Docker-compose部署GitLab最稳易维护,因直接安装会污染系统服务、引发端口冲突、升级易丢数据、配置容错差;而容器化实现服务隔离、秒级回滚、声明式配置与统一端口映射,避免gitlab-ctl reconfigure失败及环境不一致问题。

docker-compose 部署是目前最稳、最易维护的方式,直接在宿主机用 yum 或 apt 安装 GitLab 会污染系统服务(比如接管 nginx、postfix、systemd),升级卡死、配置错一个括号就 gitlab-ctl reconfigure 失败,不推荐。
为什么必须用 docker-compose 而不是包管理器安装
GitLab 不是单个进程,而是 Ruby on Rails + PostgreSQL + Redis + Nginx + Sidekiq 的组合体。直接装进系统会导致:
-
gitlab-ctl reconfigure修改全局systemd单元和nginx.conf,和你已有的 Web 或邮件服务冲突 - 升级跨大版本(如 15.x → 16.x)时容易丢数据,而容器可秒级回滚镜像
-
/etc/gitlab/gitlab.rb是 Ruby 语法配置文件,写错{或;就报错,且提示极不友好;而environment.GITLAB_OMNIBUS_CONFIG是纯字符串拼接,调试直观 - 云服务器(如阿里云)默认屏蔽 22 端口,
docker-compose.yml可直接映射到2222,绕过限制
docker-compose.yml 里三个字段不改就根本用不了
以下三项漏改一个,GitLab 启动后网页打不开、git clone 报 Connection refused、SSH 推送超时——全是常见现象:
-
external_url必须填实际可访问地址,例如'http://192.168.1.100:8080'或'https://gitlab.example.com';禁用localhost和127.0.0.1,否则生成的克隆地址、Webhook 回调、邮件重置链接全错 -
gitlab_rails['gitlab_shell_ssh_port'] = 2222必须显式声明:宿主机 OpenSSH 默认占着 22,不改会导致git clone git@xxx:/xx超时;同时ports下要加- "2222:22" -
volumes三路径必须分开挂载:./gitlab/config:/etc/gitlab(配置)、./gitlab/logs:/var/log/gitlab(日志)、./gitlab/data:/var/opt/gitlab(仓库+数据库);混挂或少挂一个,重启后项目全丢
启动后连不上?先查这三处
别急着重装,按顺序快速定位:
- 执行
docker ps -a | grep gitlab,确认状态是Up;若为Restarting或Exited,立刻跑docker logs -f gitlab,重点搜error和failed——90% 是shm_size不够、磁盘满、或external_url写错 - 检查防火墙和云厂商安全组:如果用了
'8080:80'映射,必须同步放行宿主机 8080 端口,不能只开 80 - 确认
external_url中的 IP/域名能被客户端解析:内网部署建议直接用内网 IP + 端口,别强上域名;DNS 不通或/etc/hosts没配全,GitLab 自检就报错退出
硬件和系统依赖必须对齐,否则 gitlab-ctl reconfigure 必卡
这不是脚本问题,是资源没到位:
- 内存必须 ≥ 8G:低于这个值,PostgreSQL 和 Redis 启动争资源,
reconfigure假死;用free -h实时看可用内存是否 ≥ 6GB - 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、内存、SELinux、Postfix、端口映射这五点全部对齐。少一个,GitLab 就只是个跑起来但用不了的空壳。


















