gitlab私有化部署真正难点是装完能否正常使用,而非单纯安装成功;核心卡点包括gitlab-ctl reconfigure因内存不足(需≥8g)、selinux未配置、postfix未启动、磁盘空间不足或external_url配置错误而失败,4核8g为硬性门槛,external_url必须匹配内网ip+端口且影响ssh、webhook、邮件等全链路功能。

装完 GitLab 不等于能用,gitlab-ctl reconfigure 卡住、网页打不开、SSH 克隆失败、邮件发不出——这些才是真实落地时最常遇到的问题。
为什么 gitlab-ctl reconfigure 总是卡住或失败
这不是脚本坏了,而是系统没对齐 GitLab 的硬性要求:
- 内存必须 ≥ 8G:低于这个值,PostgreSQL 和 Redis 启动时争资源,
reconfigure会假死;free -h实时看,别信 swap - SELinux 必须关或配好:CentOS/RHEL 默认开启,不运行
sudo yum install policycoreutils-python-utils,/var/opt/gitlab目录权限初始化就失败 - Postfix 必须已启动:
sudo systemctl start postfix && sudo systemctl enable postfix,否则 mailroom 阶段 hang 住 - 磁盘空间留足 100G+:
/var/opt/gitlab占大头,CI runner、LFS、备份全靠它,20G 剩余空间撑不过一周
external_url 写错一个字符,整个协作链路就断
它不只是“你从哪打开网页”,还决定 SSH URL、Webhook 回调地址、邮件里的重置链接、Avatar 加载路径:
部署一个包含 4 个智能体(agent)的数字孪生平台。在以下情况下使用该技能: 1. 用户希望为物理资产监控与预测性维护等场景搭建数字孪生系统……
- 绝对不能写
localhost或127.0.0.1:其他机器克隆时解析成自己本地,连都连不上 - 协议和端口必须匹配实际访问方式:比如配了
http://192.168.1.100:8080,防火墙和云厂商安全组就得放行8080 - 如果写
https://,必须同步配置证书路径:nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.example.com.crt",否则 Nginx 启不来 - 内网部署建议直接用内网 IP + 端口,别强上域名:DNS 不通或 hosts 没配全,GitLab 自检就报错退出
Docker 部署时 gitlab_rails['gitlab_shell_ssh_port'] 必须改
宿主机若已运行 OpenSSH(监听 22),Docker 默认映射会冲突,导致 git clone git@xxx:/xx 超时:
- 容器内 SSH 服务默认监听 22,但宿主机 22 已被占用 → 必须在
/etc/gitlab/gitlab.rb中设gitlab_rails['gitlab_shell_ssh_port'] = 2222 - 同时在
docker-compose.yml的ports下加映射:- "2222:22",让外部走 2222 进容器 22 - 改完后仍要执行
sudo gitlab-ctl reconfigure,否则新端口不生效
真正难的不是敲下那几行安装命令,而是把 external_url、内存、SELinux、Postfix、端口映射这五点全部对齐。少一个,GitLab 就只是个跑起来但用不了的空壳。










