RockyLinux 8上Docker部署GitLab全指南
1. 环境准备与前置条件检查
在RockyLinux 8上通过Docker部署GitLab前,需要确保系统满足以下基础条件。我遇到过不少因环境配置不当导致的部署失败案例,这里特别强调几个关键点:
操作系统要求 :
-
确认系统版本为RockyLinux 8.5或更高(
cat /etc/redhat-release) -
内核版本需≥4.18(
uname -r) - 建议最小4核CPU/8GB内存/100GB存储空间(实测2GB内存会导致频繁OOM)
Docker环境配置 :
# 官方推荐安装方式
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker
# 验证安装
docker --version # 要求≥20.10
docker-compose --version # 要求≥1.29
存储规划建议 :
- /var/lib/docker 建议单独挂载XFS格式分区(GitLab容器会产生大量小文件)
- 提前创建持久化目录:
sudo mkdir -p /srv/gitlab/{config,logs,data}
sudo chmod -R 777 /srv/gitlab # 解决权限问题
防火墙配置 :
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --permanent --add-port=22/tcp # 如果使用SSH协议
sudo firewall-cmd --reload
重要提示:RockyLinux 8默认的firewalld会阻止容器网络,若遇到网络连通性问题,可临时关闭测试:
sudo systemctl stop firewalld
2. Docker化GitLab部署详解
2.1 镜像选择策略
官方提供多个GitLab Docker镜像变体:
-
gitlab/gitlab-ce:latest- 最新CE版(生产慎用) -
gitlab/gitlab-ce:15.11.0-ce.0- 特定版本(推荐) -
gitlab/gitlab-ee:latest- 企业版
建议使用固定版本号而非latest标签,避免意外升级。我通常从GitLab官方镜像仓库获取版本列表:
curl -s "https://registry.hub.docker.com/v2/repositories/gitlab/gitlab-ce/tags/?page_size=50" | jq -r '.results[].name'
2.2 单容器部署方案
这是最简单的部署方式,适合中小团队:
docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
--shm-size 256m \
gitlab/gitlab-ce:15.11.0-ce.0
关键参数说明:
-
--shm-size:解决Sidekiq内存不足问题 - 端口映射:Web(80/443)和SSH(22)必须暴露
- 卷挂载:确保配置、日志、数据持久化
2.3 容器启动后初始化
首次启动需要约5-10分钟完成初始化,可通过以下命令监控进度:
docker logs -f gitlab # 实时查看日志
docker exec -it gitlab gitlab-ctl status # 检查服务状态
当看到以下日志时表示启动完成:
gitlab Reconfigured!
gitlab Running handlers complete
2.4 常见启动问题排查
问题1:502错误 通常是内存不足导致,解决方案:
-
增加容器内存限制:
docker update --memory 8G gitlab - 调整Unicorn workers数量:
docker exec -it gitlab editor /etc/gitlab/gitlab.rb
# 添加:unicorn['worker_processes'] = 2
docker exec -it gitlab gitlab-ctl reconfigure
问题2:SMTP配置错误 修改配置后必须重新加载:
docker exec -it gitlab gitlab-ctl stop
docker exec -it gitlab gitlab-ctl start postfix
docker exec -it gitlab gitlab-ctl restart
3. 备份策略设计与实施
3.1 备份类型对比
| 备份类型 | 命令 | 特点 | 恢复粒度 |
|---|---|---|---|
| 全量备份 |
gitlab-rake gitlab:backup:create
| 包含所有数据 | 完整实例 |
| 增量备份 | 第三方工具如BorgBackup | 只备份变化部分 | 文件级别 |
| 配置备份 | 手动备份/etc/gitlab | 仅配置文件 | 需手动恢复 |
3.2 自动化备份方案
创建每日凌晨2点执行的cron任务:
docker exec -it gitlab bash -c 'echo "0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1" >> /etc/crontab'
备份文件默认存储在/var/opt/gitlab/backups,建议增加远程存储:
# /etc/gitlab/gitlab.rb
gitlab_rails['backup_upload_connection'] = {
'provider' => 'AWS',
'region' => 'us-east-1',
'aws_access_key_id' => 'AKIAxxx',
'aws_secret_access_key' => 'secret'
}
gitlab_rails['backup_upload_remote_directory'] = 'gitlab-backups'
3.3 备份内容详解
GitLab备份包含以下关键部分:
- 数据库(PostgreSQL)
- 仓库数据(/var/opt/gitlab/git-data)
- 附件(/var/opt/gitlab/gitlab-rails/uploads)
- CI/CD流水线日志
- 注册表数据(如果启用)
排除项(需单独备份):
- SSL证书(/etc/gitlab/ssl)
- SSH主机密钥(/etc/gitlab/ssh_host_*)
- 配置文件(/etc/gitlab/gitlab.rb)
4. 恢复操作全流程指南
4.1 恢复前提条件
- 确保新环境版本与备份时一致:
docker run --rm gitlab/gitlab-ce:15.11.0-ce.0 cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
-
准备同名备份文件(如
1652345678_2022_05_12_15.11.0_gitlab_backup.tar) - 停止相关服务:
docker exec -it gitlab gitlab-ctl stop unicorn
docker exec -it gitlab gitlab-ctl stop sidekiq
4.2 分步恢复过程
- 将备份文件放入容器:
docker cp 1652345678_gitlab_backup.tar gitlab:/var/opt/gitlab/backups/
- 执行恢复(注意去掉时间戳和后缀):
docker exec -it gitlab gitlab-rake gitlab:backup:restore BACKUP=1652345678
- 重建配置:
docker exec -it gitlab gitlab-ctl reconfigure
docker exec -it gitlab gitlab-ctl restart
4.3 恢复后验证
- 检查项目完整性:
docker exec -it gitlab gitlab-rake gitlab:check SANITIZE=true
- 测试仓库推送:
git clone http://gitlab.example.com/root/test.git
cd test && touch testfile && git add . && git commit -m "test" && git push
- 验证CI/CD流水线是否能正常触发
5. 生产环境优化建议
5.1 性能调优参数
# /etc/gitlab/gitlab.rb
unicorn['worker_timeout'] = 60
sidekiq['concurrency'] = 10
postgresql['shared_buffers'] = "256MB"
nginx['worker_processes'] = 4
prometheus_monitoring['enable'] = false # 监控数据量大的可关闭
5.2 高可用方案
对于关键业务系统,建议采用:
- Docker Swarm/Kubernetes集群部署
- 外部PostgreSQL数据库(RDS或自建集群)
- 对象存储(如S3)替代本地存储
- GitLab Runner独立部署
5.3 监控与维护
- 健康检查脚本:
#!/bin/bash
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost/-/health)
[ "$HTTP_CODE" == "200" ] || docker restart gitlab
- 日志轮转配置:
# /etc/gitlab/gitlab.rb
logging['logrotate']['rotate'] = 30
logging['logrotate']['dateext'] = true
6. 故障处理经验分享
6.1 典型问题案例
案例1:备份文件损坏 症状:恢复时报"Backup failed"错误 解决方案:
# 尝试解压验证
docker exec -it gitlab tar -tf /var/opt/gitlab/backups/1652345678_gitlab_backup.tar
# 使用--force选项强制恢复
docker exec -it gitlab gitlab-rake gitlab:backup:restore BACKUP=1652345678 force=yes
案例2:仓库无法访问 症状:HTTP 500错误,日志显示"Failed to open repository" 修复步骤:
docker exec -it gitlab gitlab-rake cache:clear
docker exec -it gitlab gitlab-rake gitlab:check
docker exec -it gitlab gitlab-rake gitlab:storage:cleanup
6.2 升级注意事项
- 必须按顺序升级(如14.x→15.0→15.11)
- 每次升级前执行完整备份
- 测试升级流程:
docker stop gitlab
docker run --rm -v /srv/gitlab/config:/etc/gitlab gitlab/gitlab-ce:15.11.0-ce.0 \
bash -c "gitlab-ctl reconfigure && gitlab-ctl upgrade"
更多推荐
所有评论(0)