GitLab Linux配置中的数据库管理策略
GitLab在Linux环境下默认推荐使用PostgreSQL作为关系型数据库(兼容性最佳、性能稳定)。初始化配置步骤如下:
sudo apt-get install -y postgresql postgresql-contrib,CentOS使用sudo yum install -y postgresql-server postgresql-contrib);postgres用户,执行SQL命令创建数据库(如gitlab)和用户(如gitlab),并授予权限。示例:CREATE DATABASE gitlab OWNER gitlab;
ALTER ROLE gitlab SET client_encoding TO 'utf8';
ALTER ROLE gitlab SET default_transaction_isolation TO 'read committed';
ALTER ROLE gitlab SET timezone TO 'UTC';
/etc/postgresql/<version>/main/pg_hba.conf,添加允许GitLab访问的规则(如host gitlab gitlab 127.0.0.1/32 md5),重启服务使配置生效(sudo systemctl restart postgresql)。安装GitLab后,需通过/etc/gitlab/gitlab.rb文件配置数据库连接:
gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'unicode'
gitlab_rails['db_host'] = '127.0.0.1' # 本地数据库无需修改
gitlab_rails['db_port'] = 5432 # PostgreSQL默认端口
gitlab_rails['db_username'] = 'gitlab'
gitlab_rails['db_password'] = 'your_secure_password' # 需与创建用户时的密码一致
配置完成后,执行sudo gitlab-ctl reconfigure使设置生效,并启动GitLab服务(sudo gitlab-ctl start)。
/etc/gitlab/gitlab.rb中优化数据库缓冲与内存分配,提升查询效率:gitlab_rails['database_configuration'] = {
'postgresql' => {
'shared_buffers' => '25% of system memory', # 如8GB内存设为2GB(2048MB)
'work_mem' => '64MB', # 复杂查询排序/哈希操作内存
'maintenance_work_mem' => '128MB', # 索引创建/备份等维护操作内存
'effective_cache_size' => '512MB', # 操作系统缓存大小(建议为内存的1/2)
'max_connections' => '100' # 根据并发用户数调整(默认100,大型部署可增至200+)
}
}
/var/opt/gitlab/postgresql)存储在SSD介质上,显著提升IO性能(比HDD快3-5倍);gitlab_rails['redis_cache_instance'] = "redis://127.0.0.1:6379/0"
gitlab_rails['redis_primary_instance'] = "redis://127.0.0.1:6379/1"
gitlab-rake命令清理过期议题、合并请求和日志,减少数据库体积。示例:sudo gitlab-rake gitlab:cleanup:orphan_repository_branches # 清理孤儿分支
sudo gitlab-rake gitlab:cleanup:repositories # 清理空仓库
sudo gitlab-rake gitlab:logs:rotate # 轮转日志文件
rake命令创建全量备份(包含数据库、仓库、附件等),备份文件默认存储在/var/opt/gitlab/backups目录。示例:sudo gitlab-rake gitlab:backup:create STRATEGY=copy # COPY模式更安全(避免备份过程中数据不一致)
可通过cron定时任务(如每天凌晨2点)自动化备份:0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create STRATEGY=copy
sudo gitlab-ctl stop unicorn && sudo gitlab-ctl stop sidekiq;/var/opt/gitlab/backups目录;BACKUP_TIMESTAMP为备份文件名前缀):sudo gitlab-rake gitlab:backup:restore BACKUP=BACKUP_TIMESTAMP
sudo gitlab-ctl start。/var/log/postgresql/postgresql-*.log),排查异常操作。