Linux 上 GitLab 数据库配置指南
一 前置说明与总体思路
- 使用 Omnibus 包安装时,GitLab 默认自带并启用 PostgreSQL,数据库与应用在同一台机器,配置集中在 /etc/gitlab/gitlab.rb,修改后执行 gitlab-ctl reconfigure 使配置生效。不要直接编辑由模板生成的 /var/opt/gitlab/gitlab-rails/etc/database.yml,否则会被覆盖。若需对接外部数据库,只需在 gitlab.rb 中关闭内置 PostgreSQL 并填写外部库连接信息即可。
二 方案一 使用内置 PostgreSQL(默认)
- 安装 GitLab(以 Ubuntu/Debian 为例,其他发行版替换包管理命令即可):
- 安装仓库与软件包:
- curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
- sudo apt-get install -y gitlab-ce
- 基本配置与初始化:
- 编辑 /etc/gitlab/gitlab.rb,设置外部访问地址(示例):external_url ‘http://your_server_ip’
- 使配置生效:sudo gitlab-ctl reconfigure
- 启动服务:sudo gitlab-ctl start
- 如需手动创建数据库与用户(可选,Omnibus 通常会自动初始化):
- sudo -u postgres psql -c “CREATE DATABASE gitlab;”
- sudo -u postgres psql -c “CREATE USER gitlab WITH PASSWORD ‘your_password’;”
- sudo -u postgres psql -c “ALTER ROLE gitlab SET client_encoding TO ‘utf8’;”
- sudo -u postgres psql -c “ALTER ROLE gitlab SET default_transaction_isolation TO ‘read committed’;”
- sudo -u postgres psql -c “ALTER ROLE gitlab SET timezone TO ‘UTC’;”
- 验证与连接信息查看:
- 查看自动生成的数据库配置:cat /var/opt/gitlab/gitlab-rails/etc/database.yml
- 进入数据库命令行:sudo -u gitlab-psql psql -d gitlabhq_production
- 健康检查:sudo gitlab-rake gitlab:check SANITIZE=true --trace
- 备份默认目录:/var/opt/gitlab/backups。
三 方案二 使用外部 PostgreSQL(生产推荐)
- 准备外部 PostgreSQL(建议与 GitLab 应用分离部署),创建数据库与用户(示例):
- CREATE DATABASE gitlabhq_production OWNER gitlab;
- CREATE USER gitlab WITH PASSWORD ‘StrongPassword!’;
- 允许应用服务器网段访问(示例):host gitlabhq_production gitlab 192.168.1.0/24 md5(写入 pg_hba.conf)
- 配置 GitLab 连接外部库(/etc/gitlab/gitlab.rb):
- 关闭内置数据库:postgresql[‘enable’] = false
- 填写连接信息:
- gitlab_rails[‘db_adapter’] = ‘postgresql’
- gitlab_rails[‘db_encoding’] = ‘unicode’
- gitlab_rails[‘db_database’] = ‘gitlabhq_production’
- gitlab_rails[‘db_username’] = ‘gitlab’
- gitlab_rails[‘db_password’] = ‘StrongPassword!’
- gitlab_rails[‘db_host’] = ‘10.0.0.10’ # 外部数据库地址
- gitlab_rails[‘db_port’] = 5432
- 使配置生效:sudo gitlab-ctl reconfigure
- 安全与网络要点:
- 仅开放数据库端口(默认 5432)给应用服务器所在网段,使用强口令与最小权限
- 如启用 SSL,配置 gitlab_rails[‘db_sslmode’] 并在数据库侧配置证书。
四 方案三 使用外部 MySQL(不推荐,需额外步骤)
- 安装并初始化 MySQL,创建数据库与用户(字符集需支持 utf8mb4):
- CREATE DATABASE gitlab_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- CREATE USER ‘gitlab_user’@‘app_ip’ IDENTIFIED BY ‘StrongPassword!’;
- GRANT ALL PRIVILEGES ON gitlab_db.* TO ‘gitlab_user’@‘app_ip’;
- 配置 GitLab(/etc/gitlab/gitlab.rb):
- 关闭内置数据库:postgresql[‘enable’] = false
- 填写连接信息:
- gitlab_rails[‘db_adapter’] = ‘mysql2’
- gitlab_rails[‘db_encoding’] = ‘utf8’
- gitlab_rails[‘db_database’] = ‘gitlab_db’
- gitlab_rails[‘db_username’] = ‘gitlab_user’
- gitlab_rails[‘db_password’] = ‘StrongPassword!’
- gitlab_rails[‘db_host’] = ‘10.0.0.11’
- gitlab_rails[‘db_port’] = 3306
- 使配置生效:sudo gitlab-ctl reconfigure
- 注意:MySQL 支持在 GitLab 中属于“可用但非默认”,相较 PostgreSQL 配置更复杂、升级与维护成本更高,官方文档更偏向 PostgreSQL,生产环境建议优先使用 PostgreSQL。
五 常见问题与运维要点
- 配置生效方式:修改 /etc/gitlab/gitlab.rb 后必须执行 gitlab-ctl reconfigure;不要直接改 database.yml,该文件由模板生成,手动修改会被覆盖。
- 连接失败排查:核对数据库地址、端口、用户名、密码;检查数据库监听地址与 pg_hba.conf / 防火墙 是否允许应用服务器访问(PostgreSQL 默认 5432,MySQL 默认 3306)。
- 初始化与升级:首次接入外部库可能需要执行数据库迁移(如 sudo gitlab-rake db:migrate),或设置 gitlab_rails[‘auto_migrate’] = true 在启动时自动迁移;升级前做好全量备份(默认备份目录 /var/opt/gitlab/backups)。
- 高可用与扩展:数据库与应用分离、使用连接池(如 PgBouncer)、合理设置连接数、开启 SSL/TLS、定期监控与备份,是生产环境的关键实践。