我正在尝试在 CentOS 5.5 服务器上安装 Roundcube,并使用 PostgreSQL 8.1.22 数据库。
安装程序脚本的第一页检查是否存在 php 库等,它全都给我绿色的 OK。我甚至特意安装了可选的库。
第二页为我生成了两个配置文件(main.inc.php 和 db.inc.php),我将它们放到位。
第三页是出错的地方:
检查数据库配置 DSN(写入):不正常(MDB2 错误:连接失败)
确保配置的数据库存在,并且用户具有写权限
DSN:pgsql://roundcube:密码@localhost/roundcubemail
您在此处看到的信息(用户 roundcube、密码 password、服务器 localhost 和数据库 roundcubemail)均正确。数据库 roundcubemail 属于用户 roundcube,并且具有写入权限。
我不知道为什么它无法连接到该数据库。我使用 phpPgAdmin 来管理它,它在同一台服务器上的同一个 Apache 上运行!
更新
更多信息:我的 postgres 日志文件中有一堆这样的内容:
FATAL: no pg_hba.conf entry for host "127.0.0.1", user "roundcube", database "roundcubemail", SSL off
但是,我的 pg_hba.conf 文件有这样的内容:
# "local" is for Unix domain socket connections only
local all all trust
host all all 127.0.0.1/32 trust
使用 telnet 连接到端口 5432 上的 localhost 和 127.0.0.1 都可以正常工作。
答案1
上面 DerfK 的回答是错误的。只要你配置得当,就可以使用带有 roundcube 的 Unix 套接字的 PostgreSQL。在 db.inc.php 中,它应该显示为:
$rcmail_config['db_dsnw'] = 'pgsql://roundcube:*password*@unix(/tmp)/roundcube';
假设你已经在 pgsql 中为数据库“roundcube”创建了一个“roundcube”用户,密码为“密码“在您的主 postgresql.conf 中,您应该通过更改以下内容来阻止在 IP 层上进行监听:
listen_addresses = ''
unix_socket_directory = '/tmp'
ssl = false # There's no point in using SSL on a local UNIX socket except wasting CPU
此外,这是最重要的部分,您必须在 pg_hba.conf 中进行更改以添加此行:
local all roundcube md5
重新启动所有程序,它运行良好,并且比使用 TCP 连接更快(因为您避免了所有 IP 封装)。