核心原则:GitLab 配置域名不是通过修改系统主机名或 /etc/hosts 实现的,而是通过 Omnibus 安装包配置中的 external_url 参数,让 GitLab 内置的 Nginx、Web 页面链接、通知邮件链接以及 Git 克隆地址都自动使用该域名。

一、准备域名解析
将你的域名通过 DNS 服务商添加解析记录。如果是公网访问,建议使用独立子域名,例如 gitlab.example.com,添加一条 A 记录指向 GitLab 服务器的公网 IP。如果只是本机或内网测试,可以在客户端系统的 /etc/hosts 文件中添加一行:<服务器IP> gitlab.example.com。但生产环境必须使用真实的 DNS 记录。
二、修改 GitLab 配置文件
登录 GitLab 服务器,编辑配置文件:/etc/gitlab/gitlab.rb。将 external_url 设置为你的域名。如果是 HTTP,则配置为:
external_url 'http://gitlab.example.com'
如果你希望使用 HTTPS,则设置为:external_url 'https://gitlab.example.com'。该配置会直接影响 GitLab 内置 Nginx 的监听端口:HTTP 默认监听 80 端口,HTTPS 默认监听 443 端口。
三、执行 reconfigure 使配置生效
保存 /etc/gitlab/gitlab.rb 后,执行以下命令让配置生效:
sudo gitlab-ctl reconfigure
该命令会根据新的 external_url 重新生成 Nginx 配置并启动相关服务。如果希望强制重启所有 GitLab 组件,可以再执行:sudo gitlab-ctl restart。配置完成后,在浏览器中访问 http://gitlab.example.com 或 https://gitlab.example.com 即可看到 GitLab 登录页面。
四、配置 HTTPS 证书
生产环境强烈建议启用 HTTPS。设置好 external_url 'https://gitlab.example.com' 后,在同一个配置文件中指定证书路径:
nginx['ssl_certificate'] = "/etc/ssl/private/gitlab.example.com.crt"nginx['ssl_certificate_key'] = "/etc/ssl/private/gitlab.example.com.key"
如果使用 GitLab 内置的 Let's Encrypt 自动申请证书,需要先确保域名已经解析到服务器,并且 80 和 443 端口可以正常访问,然后设置:
letsencrypt['enable'] = trueletsencrypt['contact_emails'] = ['admin@example.com']
之后再次执行 sudo gitlab-ctl reconfigure,GitLab 会自动申请并配置证书。若要让 HTTP 自动跳转到 HTTPS,可以在配置文件中添加:nginx['redirect_http_to_https'] = true。
五、验证配置是否成功
执行 sudo gitlab-ctl status 查看 GitLab 服务是否正常。也可以在服务器上执行:curl -I http://gitlab.example.com,观察返回的 HTTP 状态码。如果域名无法访问,需要检查 DNS 解析是否生效、服务器防火墙以及云厂商安全组是否放行 80、443、22 等端口。
六、SSH Clone 域名配置
域名配置成功后,项目页面显示的 SSH 克隆地址默认会变成 git@gitlab.example.com:group/project.git。如果 SSH 服务运行在非 22 端口,或者需要为 SSH 指定单独的域名,必须在 /etc/gitlab/gitlab.rb 中额外设置:
gitlab_rails['gitlab_ssh_host'] = 'gitlab.example.com'gitlab_rails['gitlab_ssh_port'] = 2222
设置完成后再次执行 sudo gitlab-ctl reconfigure,GitLab 生成的所有 SSH 克隆地址都会使用新的域名和端口。
七、常见注意事项
不要手动修改 GitLab 内置 Nginx 的 gitlab-http.conf 文件,因为 gitlab-ctl reconfigure 会覆盖它。若 GitLab 部署在反向代理或负载均衡之后,应将 external_url 设置为用户访问的公网域名,并保证反向代理正确转发到 GitLab 的 80 或 443 端口。配置域名后,如果邮件通知中的链接仍是旧的 IP 地址,通常是因为 external_url 没有被正确修改,需要重新执行 reconfigure。

查看详情

查看详情