从安装到避坑:我的CentOS 7 GitLab搭建翻车实录与完整修复指南
从安装到避坑:我的CentOS 7 GitLab搭建翻车实录与完整修复指南
1. 缘起:为什么选择GitLab
去年接手公司内部代码管理平台迁移任务时,我毫不犹豫选择了GitLab。相比其他方案,它开源免费的特性、强大的CI/CD集成能力,以及活跃的社区支持,都让它成为团队协作开发的理想选择。但没想到,这次在CentOS 7上的离线安装之旅,竟成了我职业生涯中最"难忘"的技术踩坑经历之一。
2. 准备工作:那些容易被忽略的细节
2.1 依赖检查的陷阱
按照常规思路,我先检查了policycoreutils-python、openssh和postfix这三个核心依赖。表面上看,系统已经安装了这些组件,但实际使用中还是遇到了问题:
# 检查policycoreutils-python是否完整安装 rpm -qa | grep policycoreutils后来发现,某些最小化安装的CentOS 7系统虽然包含基础包,但缺少关键组件。更稳妥的做法是:
# 完整安装所有必要组件 yum install -y policycoreutils-python openssh-server postfix2.2 离线环境下的安装包获取
由于是内网环境,我不得不提前下载好所有安装包。这里有个小技巧:GitLab官方仓库提供了完整的依赖树,使用以下命令可以列出所有依赖:
# 查看RPM包依赖关系 rpm -qpR gitlab-ce-12.1.17-ce.0.el7.x86_64.rpm我创建了一个包含以下内容的离线安装清单:
| 组件名称 | 版本要求 | 下载来源 |
|---|---|---|
| gitlab-ce | ≥12.1.17 | packages.gitlab.com |
| openssl | ≥1.0.2k | CentOS官方镜像 |
| libicu | ≥50.2 | EPEL仓库 |
3. 安装过程:平静表面下的暗流
3.1 基础服务配置
防火墙配置看似简单,却暗藏玄机。除了常规的http服务,还需要特别添加https:
# 完整的防火墙配置 firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload3.2 那个让我失眠的rpm命令
使用rpm安装时,我遇到了第一个坑:
# 错误示范:直接安装可能缺少依赖 rpm -ivh gitlab-ce-12.1.17-ce.0.el7.x86_64.rpm # 正确做法:使用yum本地安装自动解决依赖 yum localinstall -y gitlab-ce-12.1.17-ce.0.el7.x86_64.rpm4. 配置调优:从能用变好用
4.1 关键配置文件修改
/etc/gitlab/gitlab.rb是核心配置文件,以下几个参数需要特别注意:
external_url 'http://your-server-ip' git_data_dirs({ "default" => { "path" => "/data/gitlab/git-data" } }) unicorn['port'] = 8081 # 避免端口冲突4.2 存储路径优化实践
默认存储路径在/var/opt/gitlab下,我将其迁移到了更大的数据盘:
创建新目录并设置权限:
mkdir -p /data/gitlab/{git-data,backups} chown -R git:git /data/gitlab修改配置文件后执行:
gitlab-ctl reconfigure gitlab-ctl restart
5. 故障排查:那些教科书不会教你的实战经验
5.1 神秘的502错误
安装完成后访问页面出现502,按照以下步骤排查:
检查内存使用:
free -hGitLab至少需要4GB内存,不足时可创建swap:
dd if=/dev/zero of=/swapfile bs=1G count=4 chmod 600 /swapfile mkswap /swapfile swapon /swapfile检查日志权限:
chmod -R 775 /var/log/gitlab查看具体错误日志:
tail -100 /var/log/gitlab/nginx/gitlab_error.log
5.2 reconfigure卡住之谜
执行gitlab-ctl reconfigure时进程卡住,通常是因为:
- 服务器性能不足(建议4核CPU+4GB内存以上)
- 磁盘I/O瓶颈(使用iotop检查)
- 网络问题(离线环境需禁用某些检查)
解决方案:
# 临时禁用prometheus监控 echo "prometheus_monitoring['enable'] = false" >> /etc/gitlab/gitlab.rb gitlab-ctl reconfigure6. 终极检查清单
经过多次失败后,我总结出这个一次性成功的检查表:
- [ ] 确认系统资源满足最低要求(4GB内存+2核CPU)
- [ ] 检查所有依赖包完整安装
- [ ] 防火墙正确配置http/https规则
- [ ] 修改默认8080端口避免冲突
- [ ] 配置合理的存储路径
- [ ] 设置swap空间(内存不足时)
- [ ] 首次reconfigure前禁用非必要服务
- [ ] 检查所有相关日志文件权限
7. 性能优化小技巧
让GitLab运行更流畅的几个实用配置:
# 减少sidekiq并发数 sidekiq['concurrency'] = 2 # 调整unicorn worker数量 unicorn['worker_processes'] = 2 # 禁用实时监控 prometheus['enable'] = false node_exporter['enable'] = false修改后记得执行:
gitlab-ctl reconfigure gitlab-ctl restart8. 备份与恢复实战
可靠的备份策略至关重要,这是我的方案:
# 手动备份 gitlab-rake gitlab:backup:create # 自动备份配置 echo '0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1' >> /etc/crontab # 恢复备份 gitlab-rake gitlab:backup:restore BACKUP=备份文件名关键参数说明:
| 参数 | 说明 | 推荐值 |
|---|---|---|
| backup_keep_time | 备份保留时间 | 604800(7天) |
| backup_path | 备份存储路径 | /data/gitlab/backups |
| backup_archive_permissions | 备份文件权限 | 0600 |
