Omnibus-GitLab 配置 PostgreSQL 开启远程访问
以前我安装Gitlab是使用源码安装的方式来安装的,这种方式的好处是可以高度自定义安装程序和指定安装位置。缺点是Golang、Ruby、Git 1.8+、Nodejs都需要编译安装,太麻烦了。
现在家里面搞了台机器做内部服务器使用,想偷懒了。于是就开始试试 Omnibus-GitLab 这个一键安装包。
但是Omnibus-GitLab 自带了 PostgreSQL 作为缺省的内部数据存储,比如用户信息, 源码仓库信息等。
平时使用最多的是MySQL数据库,其次是MongoDB,或者SQL Server数据库,但是对PostgreSQL这个数据库却很少接触,只能去找Google大叔了。
这里记录一下过程。
PostgreSQL默认情况下,远程访问不能成功,如果需要允许远程访问,网站普遍是修改2个配置文件。
这里为了安全,我们使用的是Password/Md5 Authentications的认证方式
给 Gitlab 用户加上密码
默认缺省情况下, Gitlab 用户使用的是 Peer Authentication , 这意味着客户端只能以 PostgreSQL 所在主机上的Linux系统账号访问数据库, 无法远程访问。
1、设置PostgreSQL数据库用户 gitlab 的密码:
$ su - gitlab-psql #切换到gitlab-psql用户
$ psql gitlabhq_production #连接gitlabhq_production数据库
$ \password gitlab #修改密码,然后输入两次密码,回车
$ \q #退出PostgreSQL
2、配置 Gitlab 使用刚刚设置的密码连接数据库,在/etc/gitlab/gitlab.rb 中搜索# GitLab database settings #,找到 GitLab database 部分的配置项
gitlab_rails['db_password'] = "***" #您上面设置的PostgreSQL数据库用户 gitlab 的密码
3、重新生成配置文件
sudo gitlab-ctl reconfigure
这部分完成,接着下面部分。
开启 PostgreSQL 远程(方法一)
这个方法是网上普遍的方法,但是这个方法有不足的地方。 不足的地方就是每次执行: sudo gitlab-ctl reconfigure 来重新生成配置文件的时候,配置文件又会被还原了的
1、修改 postgresql.conf 配置文件
我们从这里路径来找到 PostgreSQL 配置文件:/var/opt/gitlab/postgresql/data/postgresql.conf
大概找到63行,或者搜索 listen_addresses
。 将 postgresql.conf
文件中的 listen_addresses
项值设定为*
# - Connection Settings -
listen_addresses = '*'
2、修改 pg_hba.conf 配置文件
在pg_hba.conf文件最底部新增一行
host all all 0.0.0.0/0 md5
表示运行所以的IP连接,如果想指定连接IP的,可以将上述配置项中的0.0.0.0设定为特定的IP值。
最后重启Gitlab: sudo gitlab-ctl restart
Tips: 但是这样的话,每次执行:sudo gitlab-ctl reconfigure
的时候,配置文件又会被还原了的。
开启 PostgreSQL 远程(方法二)
方法一有不足的地方,于是本着挖根究底的心态,我们就要找一个更加优异的解决方法。
根据上面的文件,我们知道了修改方法,也知道每次更新配置文件的时候都会被重置,那么证明这两个配置文件是又Gitlab生成的。
那么这样问题也很好解决,我们先去看看生成模板:
postgresql.conf.erb pg_hba.conf.erb
从中可以看到生成的规则是从配置文件里面读取的,进行了循环生成:
<% @trust_auth_cidr_addresses.each do |cidr| %>
host all all <%= cidr %> trust
<% end %>
<% @md5_auth_cidr_addresses.each do |cidr| %>
host all all <%= cidr %> md5
<% if @sql_replication_user %>
host replication <%= @sql_replication_user %> <%= cidr %> md5
<% end %>
<% end %>
那么怎么解决呢?
既然 postgresql.conf
和 pg_hba.conf
这两个配置文件是动态生成的,那么我们就不能去修改这两个文件了,而正确的做法应该是修改配置文件:/etc/gitlab/gitlab.rb
从上面的 pg_hba.conf.erb
模板文件里面,可以看到里面有几个变量 trust_auth_cidr_addresses
, md5_auth_cidr_addresses
, sql_replication_user
,这里面我们只要设置 md5_auth_cidr_addresses
即可。
打开 /etc/gitlab/gitlab.rb
文件,搜索 # GitLab PostgreSQL #
,找到postgresql['']
数组的部分,然后在最底部新增 listen_address
和 md5_auth_cidr_addresses
的配置项,如下:
找到 GitLab PostgreSQL 配置项的 ## Advanced settings
部分,然后在这部分的最后新如下配置项。
#####################
# GitLab PostgreSQL #
#####################
# postgresql['enable'] = true
# postgresql['listen_address'] = nil
# postgresql['port'] = 5432
# postgresql['data_dir'] = "/var/opt/gitlab/postgresql/data"
# postgresql['shared_buffers'] = "256MB" # recommend value is 1/4 of total RAM, up to 14GB.
## Advanced settings
# postgresql['ha'] = false
# postgresql['dir'] = "/var/opt/gitlab/postgresql"
# postgresql['log_directory'] = "/var/log/gitlab/postgresql"
# postgresql['username'] = "gitlab-psql"
# postgresql['uid'] = nil
# postgresql['gid'] = nil
# postgresql['shell'] = "/bin/sh"
# postgresql['home'] = "/var/opt/gitlab/postgresql"
# postgresql['user_path'] = "/opt/gitlab/embedded/bin:/opt/gitlab/bin:$PATH"
# postgresql['sql_user'] = "gitlab"
# postgresql['sql_ci_user'] = "gitlab_ci"
# postgresql['max_connections'] = 200
# postgresql['md5_auth_cidr_addresses'] = []
# postgresql['trust_auth_cidr_addresses'] = []
# postgresql['shmmax'] = 17179869184 # or 4294967295
# postgresql['shmall'] = 4194304 # or 1048575
# postgresql['work_mem'] = "8MB"
# postgresql['effective_cache_size'] = "1MB"
# postgresql['checkpoint_segments'] = 10
# postgresql['checkpoint_timeout'] = "5min"
# postgresql['checkpoint_completion_target'] = 0.9
# postgresql['checkpoint_warning'] = "30s"
postgresql['listen_address'] = '*'
postgresql['md5_auth_cidr_addresses'] = ["0.0.0.0/0"] #表示运行所以的IP连接,如果想指定连接IP的,可以将上述配置项中的0.0.0.0设定为特定的IP值。
最后重新生成配置文件、重启Gitlab:
sudo gitlab-ctl reconfigure #重新生成配置文件
sudo gitlab-ctl restart #重启Gitlab
至此,完成。