🚨GitLab 报错 502 的排查与解决实录:原来是端口冲突!
温馨提示:
本文最后更新于 2025年07月23日,已超过 2 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
在阿里云服务器上部署 GitLab 本来是件小事,结果却被一个神秘的 502 错误困扰了整个下午:
502
GitLab is not responding.
Please contact your GitLab administrator if this problem persists.
部署失败让我陷入了漫长的排查之路,最终发现罪魁祸首是端口冲突。以下是我的排查思路与解决过程,记录下来,希望对大家有所帮助。
🔍 步骤一:定位错误日志
在看到 502 报错后,我第一时间查看了 GitLab 的 Nginx 日志文件:
/var/log/gitlab/nginx
日志中出现了如下错误:
connect() to unix:/var/opt/gitlab/gitlab-rails/sockets/gitlab.socket failed (2: No such file or directory)
一开始以为是 socket 文件缺失,于是尝试用 nc
命令手动创建,并设置权限和属主:
chmod 777 gitlab.socket
chown git:git gitlab.socket
但无济于事,502 依然顽固地存在。
🔗 步骤二:查阅官方文档
接着我前往 GitLab 的官方 Omnibus 安装文档:
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md
根据官方说明,502 可能是在 Unicorn 和 Sidekiq 尚未启动完成的情况下发生的,并建议使用以下命令检查并重启:
sudo gitlab-ctl restart sidekiq
sudo gitlab-ctl hup unicorn
试过之后,仍然无效。使用 gitlab-ctl status
发现:
- Unicorn 的 PID 在不断变化
- 其他服务(如 Sidekiq、Redis)都很稳定
这提示我:问题应该出在 Unicorn!
🐛 步骤三:深入排查 Unicorn 报错
我使用以下命令来查看 Unicorn 的详细运行日志:
gitlab-ctl tail unicorn
输出中看到了一堆报错信息:
E, [时间戳] ERROR -- : adding listener failed addr=127.0.0.1:8080 (in use)
E, [时间戳] ERROR -- : retrying in 0.5 seconds (N tries left)
终于抓到核心问题:8080 端口已被占用!
于是我查看了当前占用该端口的进程:
lsof -i :8080
果然,是我之前部署的 Tomcat 服务占用了 8080。
🔧 步骤四:解决方法 - 修改 Unicorn 默认端口
权衡之下,我决定不停止 Tomcat,而是修改 GitLab 的 Unicorn 服务端口。
编辑 GitLab 配置文件:
sudo vim /etc/gitlab/gitlab.rb
添加或修改如下配置:
unicorn['port'] = 9090
保存后,重新应用配置并启动服务:
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
再次访问 GitLab,页面终于正常加载了!
✅ 总结
这次 GitLab 502 错误的经历提醒我:
- 报错不要慌,第一步看日志
- 不轻信表象,要深入到底层服务
- 阿里云这种服务器上经常会预装或误装服务,要时刻注意端口占用问题
通过更换 Unicorn 的监听端口,成功规避了端口冲突,顺利运行了 GitLab。
💡 推荐工具和命令速查:
命令 | 作用 |
---|---|
gitlab-ctl status |
查看服务运行状态 |
gitlab-ctl tail unicorn |
跟踪 Unicorn 日志 |
lsof -i :8080 |
查看被占用端口的进程 |
vim /etc/gitlab/gitlab.rb |
编辑 GitLab 配置文件 |
gitlab-ctl reconfigure |
应用配置变更 |
gitlab-ctl restart |
重启所有 GitLab 服务 |
正文到此结束
- 本文标签: gitlab
- 本文链接: https://code.itptg.com/article/123
- 版权声明: 本文由老魏原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权