从安装到避坑:我的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.17packages.gitlab.comopenssl≥1.0.2kCentOS官方镜像libicu≥50.2EPEL仓库3. 安装过程平静表面下的暗流3.1 基础服务配置防火墙配置看似简单却暗藏玄机。除了常规的http服务还需要特别添加https# 完整的防火墙配置 firewall-cmd --permanent --add-servicehttp firewall-cmd --permanent --add-servicehttps 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 restart5. 故障排查那些教科书不会教你的实战经验5.1 神秘的502错误安装完成后访问页面出现502按照以下步骤排查检查内存使用free -hGitLab至少需要4GB内存不足时可创建swapdd if/dev/zero of/swapfile bs1G count4 chmod 600 /swapfile mkswap /swapfile swapon /swapfile检查日志权限chmod -R 775 /var/log/gitlab查看具体错误日志tail -100 /var/log/gitlab/nginx/gitlab_error.log5.2 reconfigure卡住之谜执行gitlab-ctl reconfigure时进程卡住通常是因为服务器性能不足建议4核CPU4GB内存以上磁盘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 CRON1 /etc/crontab # 恢复备份 gitlab-rake gitlab:backup:restore BACKUP备份文件名关键参数说明参数说明推荐值backup_keep_time备份保留时间6048007天backup_path备份存储路径/data/gitlab/backupsbackup_archive_permissions备份文件权限0600