📘 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 主站

主机记录类型
gitlabA服务器IP

GitLab Pages(示例 pages.zeusai.top)

主机记录类型
pagesA服务器IP

如果你想要 GitLab 自动生成项目独立域名:

project1.pages.zeusai.top

需额外添加:

主机记录类型
*.pagesA服务器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
最后修改:2025 年 12 月 09 日
反正没人给,你也爱给不给吧。