如何配置 gitlab 以使用现有的 postgres 服务器

Posted

技术标签:

【中文标题】如何配置 gitlab 以使用现有的 postgres 服务器【英文标题】:How to configure gitlab to use existing postgres server 【发布时间】:2015-07-09 01:36:47 【问题描述】:

安装Gitlab 时,默认情况下会安装 nginx 和 Postgres .. 无论您是否已经安装它们,都会安装其他东西。所以既然我已经有了这两个,我正在尝试配置 gitlab 来使用它们,我已经为 Nginx 做了这个,使用:

$ vi /etc/gitlab/gitlab.rb:

# Disable GitLab's nginx completely
nginx['enable'] = false

# Set external web user which is 'nginx' on CentOS 7
web_server['external_users'] = ['nginx']

但我需要知道如何做同样的事情postgres

【问题讨论】:

【参考方案1】:

根据this doc,把这个放到/etc/gitlab/gitlab.rb

# Disable the built-in Postgres
postgresql['enable'] = false

# Fill in the values for database.yml
gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'utf8'
gitlab_rails['db_host'] = '127.0.0.1'
gitlab_rails['db_port'] = '5432'
gitlab_rails['db_username'] = 'foo'
gitlab_rails['db_password'] = 'bar'

并运行此命令以应用此值:sudo gitlab-ctl reconfigure。如果您选择外部数据库,您还需要播种数据库。此命令将使用omnibus-gitlab 执行此操作:sudo gitlab-rake gitlab:setup

【讨论】:

远程数据库用户(本例中为 foo)必须能够在 gitlab-rake 命令期间创建数据库并成为超级用户。您可能需要在远程服务器上安装postgresql-contrib 这不应该是 Postgres 的 5432 端口吗?【参考方案2】:

Pierre 的解决方案适用于新安装,但如果数据库中已有数据,则需要进行迁移。最干净、最安全的方法是创建一个备份,其中也包含数据库:

gitlab-rake gitlab:backup:create

备份文件将位于/var/opt/gitlab/backups

或者,您可以尝试:

sudo -u gitlab-psql /opt/gitlab/embedded/bin/pg_dumpall --username=gitlab-psql --host=/var/opt/gitlab/postgresql

然后您可以将数据库导入现有的 Postgres 实例:

psql -f /tmp/database.sql

那么你也需要重新配置和重启:

gitlab-ctl start && gitlab-ctl reconfigure && gitlab-ctl restart

它以start 开头,因为您需要确保 GitLab 正在运行。这是因为,无论听起来多么奇怪,如果 GitLab 停止,reconfigure 就会失败:

Errno::ENOENT: No such file or directory - connect(2) for /var/opt/gitlab/redis/redis.socket

这有点违反直觉,因为传统上您会在实例停止时更改配置。


但是无论是迁移还是全新安装,第一次 GitLab 升级都会出现问题:

gitlab preinstall: Automatically backing up only the GitLab SQL database (excluding everything else!)
Dumping database ...
Dumping PostgreSQL database gitlabhq_production ... pg_dump: server version: 10.4; pg_dump version: 9.6.8
pg_dump: aborting because of server version mismatch
Backup failed
[FAILED]

按照它的指示,你必须:

sudo touch /etc/gitlab/skip-auto-migrations

所以现在这个包更新成功了,但是 GitLab 还是不行,你得重来一遍:

gitlab-ctl reconfigure

自动执行此操作:

yum install yum-plugin-post-transaction-actions
echo 'gitlab-ce:any:/bin/gitlab-ctl reconfigure' > /etc/yum/post-actions/gitlab-ce.action

有关所有细节,请参阅:

Migrating GitLab from internal to external PostgreSQL Upgrading GitLab with external PostgreSQL

【讨论】:

以上是关于如何配置 gitlab 以使用现有的 postgres 服务器的主要内容,如果未能解决你的问题,请参考以下文章

将现有的 GitLab 项目移动到新的子组中

如何将现有的 postgres 数据文件夹复制并使用到 docker postgres 容器中

如何使用 CLI 从我现有的本地 git 存储库创建新的 gitlab 存储库?

配置现有的 eclipse java 项目以使用 gradle 构建

如何使用 CodeceptJS 在 GitLab CI 中实现自动测试阶段?

idea本地将本地现有的项目和gitlab进行管理并提交到线上