在一台服务器上同时部署了 Nginx 和 GitLab。由于 Nginx 已占用 80 端口,因此在 GitLab 的配置文件 gitlab.rb 中,将 GitLab 的监听端口更改为 88。这样配置后,GitLab 能够正常启动。然而,在 GitLab 仓库页面中进行 HTTP 克隆操作时,生成的仓库 URL 为 http://host/inno/inno-mbo.git,未包含端口号,导致无法直接克隆仓库。
在域名备案完成后,我为 GitLab 配置了一个二级域名(例如 gitlab.一级域名),并在外部 Nginx 中设置了一个 server 块,监听该域名的 80 端口。在 Nginx 配置中,通过 location 指令将请求代理到 GitLab 实际运行的 88 端口上。
- 解析一个gitlab的二级域名
- 修改 GitLab 监听端口:
- 在 GitLab 的配置文件
/etc/gitlab/gitlab.rb中,将 GitLab 的监听端口更改为非标准端口,例如 88。 - 设置
external_url为http://gitlab.一级域名(不包含端口号)
- 在 GitLab 的配置文件
external_url 'http://gitlab.一级域名'
nginx['listen_port'] = 88
重新配置 GitLab 并重启服务:
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
-
配置 Nginx 反向代理:
-
创建一个 Nginx
server块,监听 80 端口,并将请求代理到 GitLab 实际运行的 88 端口。 -
配置示例如下:
-
upstream git{
# 域名对应 gitlab配置中的 external_url
# 端口对应 gitlab 配置中的 nginx['listen_port']
server 域名:端口;
}
server{
listen 80;
# 此域名是提供给最终用户的访问地址
server_name 域名;
location / {
# 这个大小的设置非常重要,如果 git 版本库里面有大文件,设置的太小,文件push 会失败,根据情况调整
client_max_body_size 50m;
proxy_redirect off;
#以下确保 gitlab中项目的 url 是域名而不是 http://git,不可缺少
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 反向代理到 gitlab 内置的 nginx
proxy_pass http://git;
index index.html index.htm;
}
}
- 测试和验证:
- 重新加载 Nginx 配置以应用更改:
sudo nginx -s reload
- 确保 GitLab 可以通过
http://gitlab.一级域名正常访问,验证 HTTP 克隆 URL 是否正确。
通过上述配置,成功实现了通过域名访问 GitLab,并解决了克隆 URL 缺失端口号的问题。最终,GitLab 通过标准 HTTP 端口(80)提供服务,避免了在克隆 URL 中手动指定端口号的麻烦。
以下是 GitLab 常用命令的表格形式:
| 操作 | 命令 | 说明 |
|---|---|---|
| 重新配置 GitLab | gitlab-ctl reconfigure | 应用配置文件中的更改 |
| 重启 GitLab | gitlab-ctl restart | 重启所有 GitLab 服务 |
| 停止 GitLab | gitlab-ctl stop | 停止所有 GitLab 服务 |
| 启动 GitLab | gitlab-ctl start | 启动所有 GitLab 服务 |
| 查看 GitLab 状态 | gitlab-ctl status | 查看 GitLab 服务的运行状态 |
| 查看 GitLab 日志 | gitlab-ctl tail | 实时查看 GitLab 日志 |
| 升级 GitLab | gitlab-ctl upgrade | 升级 GitLab 到最新版本 |
| 编辑配置文件 | nano /etc/gitlab/gitlab.rb | 编辑 GitLab 配置文件 |
| 创建 GitLab 备份 | gitlab-rake gitlab:backup:create | 创建 GitLab 数据备份 |
| 恢复 GitLab 备份 | gitlab-rake gitlab:backup:restore BACKUP=timestamp_of_backup | 恢复 GitLab 数据备份(指定时间戳) |