gitlab部署失败八成卡在gitlab-ctl reconfigure:需确保4核8g硬件、postfix/sshd服务启用、policycoreutils-python-utils安装;external_url禁用localhost;防火墙开放80/443/22端口;密码取自/etc/gitlab/initial_root_password首行明文。

GitLab 在 Linux 上部署失败,八成是卡在 gitlab-ctl reconfigure 这一步——不是内存不够、就是端口冲突、或者配置文件里写了非法 URL。别急着重装,先看这几个关键动作能不能跑通。
检查系统资源和基础服务是否达标
GitLab 对硬件有硬性要求:4 核 CPU + 8GB 内存是最低门槛,低于这个规格,gitlab-ctl reconfigure 会卡住或报错 omnibus_gitlab[default] (gitlab::default line 1) had an error,且日志里常出现 timeout waiting for postgresql 或 sidekiq not responding。
- 运行
free -h确认可用内存 ≥ 6GB(GitLab 启动后自身占用约 2.5GB) - 执行
systemctl is-active postfix,必须返回active;若为inactive,需补上sudo systemctl start postfix && sudo systemctl enable postfix - 确认 SSH 已启用:
sudo systemctl is-enabled sshd应输出enabled,否则执行sudo systemctl enable --now sshd - CentOS/RHEL 7/8 用户注意:
policycoreutils-python-utils必须安装,否则reconfigure会因 SELinux 模块缺失失败
external_url 配置不能写 localhost 或 127.0.0.1
很多人把 external_url 设成 "http://localhost:8080" 或 "http://127.0.0.1:8080",结果浏览器打不开,或者登录后跳转 404。GitLab 的 Workhorse 和 Nginx 组件依赖该 URL 构造内部重定向和静态资源路径,写本地地址会导致前端请求发向浏览器本机,而非服务器。
监控一个或多个 GitCode 仓库的 PR,通过 OpenClaw Gateway 自动执行 AI 审查,发布 PR 评论,并发送钉钉和企业微信通知。
- 正确写法是用局域网 IP(如
"http://192.168.0.10:8080")或已解析的域名(如"https://gitlab.example.com") - 如果只在本机测试,可临时用
"http://$(hostname -I | awk '{print $1}'):8080"获取主网卡 IP - 改完后必须运行
sudo gitlab-ctl reconfigure,不能只restart - HTTPS 场景下,务必同步配置
nginx['redirect_http_to_https'] = true和证书路径,否则 80 端口会 301 循环
防火墙和端口放行必须显式操作
GitLab 默认监听 80(HTTP)、443(HTTPS)、22(SSH),但很多教程漏掉一点:它还依赖本地 Unix socket 和 8080(GitLab Workhorse)等内部端口。外部访问失败,90% 是因为防火墙没开对端口,而不是 GitLab 本身没起来。
- CentOS/RHEL 使用
firewall-cmd:sudo firewall-cmd --permanent --add-port=80/tcp、--add-port=443/tcp、--add-port=22/tcp,然后sudo firewall-cmd --reload - Ubuntu/Debian 用户若启用
ufw,执行sudo ufw allow 80,443,22/tcp - 云服务器(如阿里云 ECS)额外检查安全组规则,确保入方向放行对应端口——光配系统防火墙没用
- 验证端口是否真在监听:
sudo ss -tlnp | grep ':80\|:443',应看到nginx进程绑定
首次登录密码必须从文件读,不能靠安装日志回显
安装完成后终端可能打印类似 root password saved to /etc/gitlab/initial_root_password,但很多人直接复制那行日志里的“password: xxx”去登录,结果失败。那个字符串是加密后的哈希值,不是明文密码。
- 真正密码藏在文件第一行明文位置:
sudo cat /etc/gitlab/initial_root_password | head -1 - 该文件仅在首次
reconfigure后生成一次,后续修改密码不会更新它;重装前若不清除/etc/gitlab,旧密码仍有效 - 如果文件不存在,说明
reconfigure未成功完成,此时gitlab-ctl status通常显示多个服务为down - 忘记密码且无法访问 Web 界面?只能重置:
sudo gitlab-rake "gitlab:password:reset[root]",然后按提示输入新密码
最易被忽略的是:GitLab 的 reconfigure 不是“一键完成”,它实际会下载并编译 Ruby bundle、初始化 PostgreSQL 数据库、生成 SSL 证书(如果启用了 HTTPS)、甚至调整内核参数。整个过程在低配机器上可能耗时 5–15 分钟,期间 gitlab-ctl status 显示部分服务为 down 属正常现象——只要最终全部变成 run,就说明成功了。










