Docker Compose 部署 GitLab(含默认密码+外部Nginx反向代理+禁用SSH)
一套直接可用、无坑、生产环境可用的完整配置,全程不使用 SSH,只走 HTTP/HTTPS,外部 Nginx 反向代理,安装时直接配置默认管理员账号密码。
一、整体架构
- GitLab 容器:只暴露 HTTP(80) 端口,完全禁用 SSH
- 外部 Nginx:负责域名、SSL、反向代理到 GitLab 容器
- Docker Compose:一键启动 GitLab
- 预设管理员账号:
root/ 你自定义的密码
二、目录结构(提前建好)
bash
mkdir -p /opt/gitlab/{config,logs,data}
chmod -R 777 /opt/gitlab # 避免权限问题
三、docker-compose.yml(核心配置)
yaml
version: '3.8'
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
restart: always
hostname: gitlab.yourdomain.com # 改成你的域名
environment:
# 外部访问地址(必须是你的最终域名)
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.yourdomain.com'
# ======================
# 禁用 SSH 功能
# ======================
gitlab_rails['gitlab_shell_ssh_port'] = nil
sshd['enable'] = false
# ======================
# 配置默认管理员密码
# ======================
gitlab_rails['initial_root_password'] = 'YourStrongPassword123!'
# ======================
# 关闭容器自带 Nginx(使用外部 Nginx)
# ======================
nginx['enable'] = false
puma['enable'] = true
puma['listen'] = '0.0.0.0'
puma['port'] = 80
# 信任外部 Nginx 反向代理
gitlab_rails['trusted_proxies'] = ['127.0.0.1', '172.16.0.0/12', '192.168.0.0/16']
ports:
- "127.0.0.1:8929:80" # 只监听本地,外部 Nginx 反代,不直接暴露公网
volumes:
- /opt/gitlab/config:/etc/gitlab
- /opt/gitlab/logs:/var/log/gitlab
- /opt/gitlab/data:/var/opt/gitlab
shm_size: '256m'
关键配置说明
-
禁用 SSH
sshd['enable'] = false关闭容器内 SSH 服务gitlab_shell_ssh_port = nil取消 SSH 克隆展示- 页面完全不显示 SSH 克隆地址
-
默认 root 密码
initial_root_password第一次启动自动设置- 只在首次初始化生效
-
关闭容器内 Nginx
nginx['enable'] = false- 使用外部独立 Nginx 代理,更灵活
-
端口安全
- 只绑定本地
127.0.0.1:8929 - 公网无法直接访问,必须走 Nginx
- 只绑定本地
四、启动 GitLab
bash
cd /opt/gitlab
docker compose up -d
启动时间约 2~5 分钟,查看状态:
bash
docker compose logs -f gitlab
看到 gitlab Reconfigured! 就是启动完成。
五、外部 Nginx 反向代理配置
创建 Nginx 配置文件
/etc/nginx/conf.d/gitlab.conf
nginx
server {
listen 80;
server_name gitlab.yourdomain.com;
# 强制跳转 HTTPS(可选,推荐)
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name gitlab.yourdomain.com;
# SSL 证书(改成你自己的路径)
ssl_certificate /etc/nginx/ssl/gitlab.crt;
ssl_certificate_key /etc/nginx/ssl/gitlab.key;
# SSL 优化
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256;
# 反向代理到 GitLab
location / {
proxy_pass http://127.0.0.1:8929;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 3600;
}
# GitLab 大文件上传限制
client_max_body_size 1024m;
proxy_request_buffering off;
}
重载 Nginx
bash
nginx -t
systemctl reload nginx
六、登录使用
- 访问地址:https://gitlab.yourdomain.com
- 用户名 :
root - 密码 :你在
docker-compose.yml里设置的initial_root_password
七、常用维护命令
bash
# 重启 GitLab
docker compose restart gitlab
# 停止 GitLab
docker compose down
# 查看日志
docker compose logs -f --tail=200 gitlab
# 修改配置后重新加载
docker compose up -d
八、注意事项
- 首次启动慢是正常的,GitLab 组件很多
- 服务器内存建议 ≥ 4GB,否则会卡顿
- 密码必须复杂度足够,否则初始化失败
- 全程无 SSH、无 22 端口、完全走 HTTP/HTTPS
总结
- 一键
docker-compose up -d即可部署 - 内置 默认 root 密码,无需找自动生成密码
- 禁用 SSH,只走 HTTP/HTTPS
- 使用 外部 Nginx 代理,安全、灵活、易维护
- 端口只监听本地,公网无法直接访问,更安全
需要我帮你生成无 SSL 版本 (纯 HTTP)、或自动申请 Let's Encrypt 证书的脚本吗?