📘 GitLab 自部署完整配置指南(适用于 1Panel + Docker + HTTPS 反代)
本文档包含:
- 正确配置 GitLab external_url
- 配置 HTTPS 反向代理(1Panel)
- 配置 SSH 克隆
- 启用 GitLab Pages 并通过独立域名访问
- 所有 gitlab.rb 的最终可用示例
- Nginx 反代示例配置
- DNS 设置说明
🟦 1. GitLab 的 HTTPS + HTTP 模式说明
在 1Panel 下:
- 外部 HTTPS 由 1Panel/Nginx 提供
- GitLab 内部只使用 HTTP
- GitLab UI 显示 HTTPS clone 地址
- 不会产生无限重定向 ERR_TOO_MANY_REDIRECTS
实现逻辑:
用户(HTTPS) → 反向代理(HTTPS) → GitLab containers(HTTP)GitLab 需要正确识别 HTTPS,由反代通过 X-Forwarded-Proto 提供。
🟦 2. GitLab 最终推荐配置(/etc/gitlab/gitlab.rb)
下面这份配置已经为:
✔ HTTPS Clone
✔ SSH Clone
✔ Pages
✔ 反代环境
全部调试完成,是安全可用的最终版本。
/etc/gitlab/gitlab.rb(最终版)
#########################
# GitLab External URL
#########################
# GitLab 访问 URL(反代是 HTTPS,所以这里必须用 https)
external_url 'https://gitlab.zeusai.top'
# 禁用内置 Let's Encrypt,避免与反代冲突
letsencrypt['enable'] = false
#########################
# GitLab Behind Reverse Proxy
#########################
# GitLab 内部监听 HTTP,不监听 HTTPS
nginx['listen_port'] = 80
nginx['listen_https'] = false
# 让 GitLab 识别外部是 HTTPS
gitlab_rails['gitlab_https'] = true
gitlab_rails['gitlab_port'] = 443
gitlab_rails['gitlab_host'] = 'gitlab.zeusai.top'
# 信任反向代理
gitlab_rails['trusted_proxies'] = ['0.0.0.0/0']
# 接收反代传递的 HTTPS 头部
nginx['proxy_set_headers'] = {
"X-Forwarded-Proto" => "https",
"X-Forwarded-Ssl" => "on"
}
#########################
# SSH Clone
#########################
gitlab_rails['gitlab_ssh_host'] = 'gitlab.zeusai.top'
gitlab_rails['gitlab_shell_ssh_port'] = 22 # 如映射 30022,则填 30022
#########################
# GitLab Pages
#########################
pages_external_url "https://pages.zeusai.top"
gitlab_pages['enable'] = true
gitlab_pages['inplace_chroot'] = true
# Pages HTTP 服务监听在 8090(你可按需修改)
gitlab_pages['external_http'] = ['0.0.0.0:8090']
gitlab_pages['external_https'] = []⬇ 保存文件后执行:
gitlab-ctl reconfigure
gitlab-ctl restart🟦 3. Nginx(1Panel)反向代理配置(最终版)
GitLab 主站(gitlab.zeusai.top)
server {
listen 80;
listen 443 ssl http2;
server_name gitlab.zeusai.top;
ssl_certificate /www/sites/gitlab.zeusai.top/ssl/fullchain.pem;
ssl_certificate_key /www/sites/gitlab.zeusai.top/ssl/privkey.pem;
location / {
proxy_pass http://127.0.0.1:2080; # 你的 Docker 映射端口 → GitLab HTTP 端口
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
if ($scheme = http) {
return 301 https://$host$request_uri;
}
}GitLab Pages(pages.zeusai.top)
server {
listen 80;
listen 443 ssl http2;
server_name pages.zeusai.top;
ssl_certificate /www/sites/pages.zeusai.top/ssl/fullchain.pem;
ssl_certificate_key /www/sites/pages.zeusai.top/ssl/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8090; # GitLab Pages 端口
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
if ($scheme = http) {
return 301 https://$host$request_uri;
}
}🟦 4. DNS 配置说明
GitLab 主站
| 主机记录 | 类型 | 值 |
|---|---|---|
| gitlab | A | 服务器IP |
GitLab Pages(示例 pages.zeusai.top)
| 主机记录 | 类型 | 值 |
|---|---|---|
| pages | A | 服务器IP |
如果你想要 GitLab 自动生成项目独立域名:
project1.pages.zeusai.top需额外添加:
| 主机记录 | 类型 | 值 |
|---|---|---|
| *.pages | A | 服务器IP |
🟦 5. SSH Clone 配置说明
1. 客户端生成 SSH Key
ssh-keygen -t ed25519 -C "your_email@example.com"2. 在 GitLab → User Settings → SSH Keys 添加公钥
3. 测试 SSH 连接:
ssh -T git@gitlab.zeusai.top(或端口 30022)
ssh -T -p 30022 git@gitlab.zeusai.top成功输出:
Welcome to GitLab, @username!🟦 6. Pages 使用方式说明
在 GitLab 中启用 Pages 后:
路径:
Project → Settings → Pages成功访问形式:
https://pages.zeusai.top/projectname如果使用通配符域名:
https://projectname.pages.zeusai.top