远程访问 gitlab 自带的 postgresql 数据库

主要参照他人成文 https://cong5.net/post/open-remote-connect-postgresql-with-omnibus-gitlab。

步骤两大部分,一是启用密码,二是修改监听地址。

1. 设置密码。根据前文方法,连接到数据库,修改密码(默认没有),即输入 \password 命令后,两次输入新密码,然后 \q 退出;
2. 在 /etc/gitlab/gitlab.rb 中设置 gitlab_rails['db_password'] 为上述密码(保险起见前后加上双引号);
3. 在 /etc/gitlab/gitlab.rb 中设置 postgresql['listen_address'] = "*" 以启用对外部连接的监听;
4. 在 /etc/gitlab/gitlab.rb 中设置 postgresql['md5_auth_cidr_addresses'] = ["0.0.0.0/0"] 表示允许所有的 IP 连接,如果想指定连接IP的,将 0.0.0.0 设为特定 IP 值即可;
5. 老一套,重新生成配置文件并重启以生效:sudo gitlab-ctl reconfigure 然后 sudo gitlab-ctl restart

在客户机上打开 DBeaver 用 gitlab-psql 用户测试连接,一次通过。

重要更新(2020-03-09)
今日有小伙伴报告 GitLab 无法正常访问了,502 错误,第一时间就感觉是数据库访问上出了问题。查看日志文件 /var/log/gitlab/gitlab-rails/production.log,相关信息是:

pg_hba.conf 文件是 PostgreSQL 的访问控制策略文件,和 postgresql.conf 文件都处于 /var/opt/gitlab/postgresql/data 路径下。

pg_hba.conf 文件内容为:

字面上看,是主机、用户、数据库以及 SSL 开关全部没有命中现有的访问规则。但再看上面列出的前两行配置,似乎不应该出现漏掉的情况,一行本地主机访问,一行经由网络访问,用户名和数据库名是全集通配,网络也是全网允许。不过,貌似少了错误信息中显现出的 IPv6 规则,于是,加入了 host all all ::/0 md5 行。用 gitlab-ctl restart postgresql 重启数据库,问题仍在。

开启乱撞模式。把数据库的 all 改成 gitlabhq_production,不行,把用户名改成 gitlab,不行,而且后果更严重,数据库直接就起不来了。又把注意力从 host 类型投到 local 上,各种尝试均无效果。改来改去,错误信息在之前的和以下的这两类之间摇摆:

但这里意外发现了上次配置时犯的一个错误:psql 改密码时 password 命令后没有带用户名,因为误以为当前连接的用户身份就是 gitlab,没想到是 gitlab-psql!连忙把 gitlab 用户的数据库密码也改了,否则前文的 gitlab_rails['db_password'] 配置的密码是不可能正确的,因为我们没有一并修改的 gitlab_rails['db_username'] 配置项默认用户就是 gitlab。

真的是改了好多次……然后开始怀疑,会不会来自 localhost 的网络访问是要单独配置啊?在这个指导思想下又魔改了几次(包括子网范围有无、大小等),终于有了以下正常工作版的 pg_hba.conf

摸索出的门道大概是,1. 同一规则,要把 IPv4 和 IPv6 都配上(但最后一条很显然没有配 IPv6,不知为何没有影响),2. localhost 的网络访问,不会去匹配全网段规则。以上三条规则,共耗时约三个小时。

发表评论

电子邮件地址不会被公开。 必填项已用*标注