Ubuntu 上 GitLab 的网络配置与优化
一 基础网络与访问配置
- 设置外部访问地址:编辑 /etc/gitlab/gitlab.rb,将 external_url 设为域名或 IP(HTTP/HTTPS)。修改后执行 sudo gitlab-ctl reconfigure 使配置生效。示例:external_url ‘http://your_server_ip’ 或 ‘https://gitlab.example.com’。
- 防火墙放行:开放 80/443(以及自定义的 SSH 端口)。如使用 UFW:sudo ufw allow 80,443/tcp;如使用 firewalld:sudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload。
- NAT/端口转发:如有路由器或云厂商安全组,将公网 80/443 转发至内网 GitLab 主机;如 SSH 端口非 22,需同步转发并在 GitLab 中声明 SSH 端口。
- 验证:浏览器访问 external_url,或在服务器上执行 curl -I http://127.0.0.1 检查返回状态。
二 容器与端口映射实践(Omnibus 与 Docker 两种场景)
- Omnibus(裸机/包安装)
- 修改 external_url 与所需端口(如改为 8080),必要时调整 nginx 监听端口。
- 重新配置并重启:sudo gitlab-ctl reconfigure && sudo gitlab-ctl restart。
- Docker Compose(示例)
- 编排要点:将 external_url 的端口与宿主机端口映射一致;如自定义 SSH 端口,需同时映射并声明。
- 示例片段:
- environment: GITLAB_OMNIBUS_CONFIG: | external_url ‘http://192.168.X.X:8929’ gitlab_rails[‘gitlab_shell_ssh_port’] = 2222
- ports: “8929:8929” “2222:22”
- 说明:SSH 克隆地址将显示为 ssh://git@your_domain_or_ip:2222/namespace/project.git。
三 域名与 HTTPS 配置
- 自签名或已有证书
- 在 gitlab.rb 中启用并指向证书/私钥:
- nginx[‘enable’] = true
- nginx[‘redirect_http_to_https’] = true
- nginx[‘ssl_certificate’] = “/etc/gitlab/ssl/server_cert.crt”
- nginx[‘ssl_certificate_key’] = “/etc/gitlab/ssl/private.key”
- 执行 sudo gitlab-ctl reconfigure 生效。
- Let’s Encrypt 自动证书
- 开启自动签发与续期:
- letsencrypt[‘enable’] = true
- letsencrypt[‘contact_emails’] = [‘admin@example.com’]
- letsencrypt[‘auto_renew’] = true
- letsencrypt[‘auto_renew_hour’] = “1”
- letsencrypt[‘auto_renew_minute’] = “30”
- letsencrypt[‘auto_renew_day_of_month’] = “*/5”
- external_url ‘https://gitlab.example.com’
- 确保 80/443 对外开放,以便完成 ACME 验证。
四 传输与并发性能优化
- 大文件与流水线
- 使用 Git LFS 管理大文件,避免仓库膨胀与克隆慢;CI 构建产物与缓存建议使用对象存储(如 S3/MinIO)或外部缓存,减轻内网与磁盘压力。
- 页面与后台并发
- 适度调整 Puma(前端)与 Sidekiq(后台任务)并发,避免资源争用:
- puma[‘worker_processes’]、puma[‘min_threads’]、puma[‘max_threads’]
- sidekiq[‘concurrency’]
- 示例(小团队/低配环境,仅示意):puma[‘worker_processes’] = 1;puma[‘min_threads’] = 1;puma[‘max_threads’] = 2;sidekiq[‘concurrency’] = 4。调整后执行 sudo gitlab-ctl reconfigure。
- 监控组件按需启用
- 资源紧张时可临时关闭监控相关组件(如 Prometheus/Alertmanager/Exporters),以降低内存与 CPU 占用:monitoring_role[‘enable’] = false;prometheus[‘enable’] = false;alertmanager[‘enable’] = false;postgres_exporter[‘enable’] = false;redis_exporter[‘enable’] = false;node_exporter[‘enable’] = false。生产环境不建议长期关闭核心监控。
- 传输与超时
- 提高 Git 与 Nginx 读写与超时阈值(示例):
- nginx[‘client_max_body_size’] = ‘512m’(适配大推送/附件)
- 在 gitlab.rb 或反向代理中适当增大 proxy_read_timeout / proxy_connect_timeout(如 300s),减少大包/慢链路中断。
- 可选加速
- 面向公网用户可启用 CDN 加速静态资源访问;内网环境优先优化链路与存储 I/O。
五 安全与网络加固要点
- 强制 HTTPS 并配置安全协议与套件(示例):
- nginx[‘ssl_protocols’] = “TLSv1.2 TLSv1.3”
- nginx[‘ssl_prefer_server_ciphers’] = “on”
- nginx[‘ssl_ciphers’] = “ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:…”
- nginx[‘ssl_session_cache’] = “builtin:SSL_SESSION_CACHE(Filesystem,10m)”
- 限制管理接口与内网访问:仅在内网开放管理后台与备份/监控端口;对外最小化暴露。
- 邮件通知(可选但推荐):配置 SMTP/TLS,保证账号注册、工单与流水线通知可达。
- 变更流程:修改 gitlab.rb 前先备份;每次变更后执行 sudo gitlab-ctl reconfigure 并检查服务状态(sudo gitlab-ctl status)。