Ubuntu 上部署 GitLab 的网络配置要点
一 基础网络与防火墙
- 在 /etc/gitlab/gitlab.rb 中正确设置 external_url(域名或公网 IP),修改后执行 gitlab-ctl reconfigure 使配置生效。
- 放行访问端口:
- 使用 UFW:sudo ufw allow 80/tcp;sudo ufw allow 443/tcp;sudo ufw allow OpenSSH。
- 使用 firewalld:sudo firewall-cmd --permanent --add-service=http;sudo firewall-cmd --permanent --add-service=https;sudo firewall-cmd --permanent --add-service=ssh;sudo firewall-cmd --reload。
- 如经 NAT/端口转发,将公网的 80/443 转发到内网 GitLab 主机;云厂商安全组同样需放行对应端口。
- 避免端口冲突:若主机上已有服务占用 80/443,需调整 GitLab 或宿主机的端口映射与防火墙策略。
二 使用域名与 HTTPS
- 启用 HTTPS:将 external_url ‘https://your_domain’,并按需配置内置 Nginx 证书与跳转:
- nginx[‘enable’] = true
- nginx[‘redirect_http_to_https’] = true
- nginx[‘ssl_certificate’] 与 nginx[‘ssl_certificate_key’] 指向证书文件。
- 自动证书:如需 Let’s Encrypt,在 gitlab.rb 中启用相关选项(如设置联系邮箱),并确保域名解析与 80/443 可达,再执行 reconfigure 申请与续期。
- 证书与权限:证书路径及权限需正确,变更后执行 gitlab-ctl reconfigure 与(必要时)重启服务。
三 反向代理与端口规划
- 与主机 Nginx 共存:在 gitlab.rb 中关闭内置 Nginx(nginx[‘enable’] = false),设置外部 Web 服务器用户(web_server[‘external_users’] = [‘www-data’]),并确保权限同步(如将 www-data 加入 gitlab-www 组)。
- 反向代理关键头:确保传递 Host、X-Real-IP、X-Forwarded-For、X-Forwarded-Proto,以便 GitLab 正确生成链接与识别协议。
- 端口规划与映射:
- 常见做法是将容器或实例的 80/443 映射到主机高位端口(如 9080/9443),再由主机 Nginx 终止 TLS 并反向代理到这些端口。
- 若更改了 GitLab 内部监听端口(如 nginx[‘listen_port’] 或工作进程端口),需同步更新反向代理与防火墙规则。
- SSH 克隆端口:容器内 Git over SSH 默认 22,常映射到主机 9022;同时需在 GitLab 中告知外部 SSH 端口:gitlab_rails[‘gitlab_shell_ssh_port’] = 9022。
四 连通性验证与故障排查
- 服务状态与日志:使用 gitlab-ctl status 检查组件;用 gitlab-ctl tail nginx/gitlab_access.log 与 gitlab-ctl tail 定位网络与权限类问题。
- 端口与连通性:在服务器上检查监听(ss -tlnp | grep -E ‘(:80|:443|:22)’);从外部测试 curl -Iv https://your_domain;如走代理,确认代理规则与证书链无误。
- 首次访问与凭据:首次访问 external_url 完成管理员初始化;如需查看初始 root 密码,检查 /etc/gitlab/initial_root_password(注意文件权限与及时保护)。