官方推荐yum/dnf安装gitlab-ce最稳,适合生产环境;Docker适合快速试用或已有容器基建,但需注意shm_size、端口映射及证书配置;源码编译不推荐。

直接装官方 gitlab-ce 包最稳,Docker 方式适合想快速试用或已有容器基建的场景;别碰源码编译,没必要的复杂度。
用 yum/dnf 安装 gitlab-ce(推荐 CentOS/RHEL 系统)
这是生产环境最主流、文档最全、升级路径最清晰的方式。关键不是“能不能装”,而是装完后 gitlab-ctl reconfigure 能否成功跑通——它会生成 Nginx、PostgreSQL、Redis 等所有子服务的配置并启动。
- 必须先装
postfix:GitLab 发邮件(重置密码、通知等)依赖它,不装会导致gitlab-ctl reconfigure卡在ruby_block[supervise_redis_sleep]或后续报错 -
external_url必须写对:改完/etc/gitlab/gitlab.rb后一定要运行gitlab-ctl reconfigure,否则新地址不会生效;如果用 IP 访问,就写http://192.168.0.10,别加端口(除非你显式改了 Nginx 监听) - 502 错误大概率是权限问题:常见于
/var/opt/gitlab/gitlab-rails目录缺少其他用户(other)的执行权限,执行sudo chmod -R o+x /var/opt/gitlab/gitlab-rails通常能解决 - 防火墙要放行:CentOS 7/8 默认用
firewalld,记得firewall-cmd --permanent --add-service=http和--add-service=https,再reload
用 Docker Compose 启动 GitLab(适合测试或轻量部署)
Docker 方式省去了系统级依赖冲突,但要注意它默认把所有数据挂载到宿主机目录,$GITLAB_HOME 路径一旦指定就不能轻易挪动,否则下次 docker-compose up 会初始化空实例。
使用约定式提交(Conventional Commits)从 Git 历史记录中生成结构化变更日志,支持多种格式、AI 增强型描述以及可自定义的范围……
-
gitlab/gitlab-ee:latest镜像体积大(>1GB),首次拉取慢,建议换具体小版本号,比如gitlab/gitlab-ee:16.11.5,更可控 -
shm_size: '256m'是硬性要求:GitLab 的 Unicorn 进程需要共享内存,不设或设太小会导致 Web 页面白屏或 502 - HTTPS 不是开箱即用:哪怕你配了
external_url 'https://gitlab.example.com',也得自己挂载证书到/etc/gitlab/ssl/并在GITLAB_OMNIBUS_CONFIG里补上nginx['redirect_http_to_https'] = true等配置 - SSH 端口映射要小心:如果宿主机已占用了 22 端口(比如开了 sshd),就把 compose 里的
- '22:22'改成- '2222:22',然后在 GitLab UI 项目页面 clone 地址里手动把git@gitlab.example.com:换成git@gitlab.example.com:2222
配置完打不开?先看这几个日志
GitLab 不是黑盒,出问题时别盲目重启,直接查对应服务的日志最有效。
-
gitlab-ctl tail nginx:看有没有 502、404 或 upstream connect failed,确认 Nginx 是否能连通gitlab-workhorse -
gitlab-ctl tail gitlab-rails:Rails 应用层报错,比如数据库连接失败、Redis 超时、邮件配置语法错误都会在这里体现 -
gitlab-ctl status:一眼看出哪些服务没起来,常见是postgresql或redis因磁盘满、内存不足起不来 -
journalctl -u postfix -n 50:如果收不到注册邮件,先确认 Postfix 自身是否正常投递,而不是怪 GitLab
别忽略时间同步和 SELinux
这两个点在离线环境或老系统上特别容易踩坑,但报错信息完全不提示它们。
- 系统时间偏差 >5 分钟:会导致 JWT Token 验证失败,表现为你能登录,但点任何项目都跳 401,
gitlab-rails日志里出现JWT::ExpiredSignature - SELinux 开启状态:CentOS 默认是
enforcing,GitLab 的多个服务路径(如/var/opt/gitlab)会被拦截,临时关掉验证一下:sudo setenforce 0;若确认是它导致,再用semanage fcontext加策略,而非永久关闭 -
/var分区空间不足:GitLab 默认把仓库、日志、备份全塞进/var/opt/gitlab,20GB 磁盘可能撑不过一个中型项目,df -h /var必查
GitLab 安装本身不难,难的是它背后一整套服务链的协同——从内核参数、文件权限、网络端口到时钟精度,任何一环松动都会让 Web 页面变成 502 或白屏。动手前先扫一遍基础环境,比装完再调三天强得多。

















