GitLab在Debian上的网络设置指南
一 系统网络与防火墙
- 设置静态IP(示例为网卡eth0,请按实际网卡名调整)
- 防火墙放行端口(UFW)
- 开放HTTP/HTTPS:sudo ufw allow 80,443/tcp;sudo ufw reload
- 如使用云厂商安全组,也需放行80/443入站。
二 GitLab核心网络参数 external_url
- 编辑配置文件:sudo nano /etc/gitlab/gitlab.rb
- 设置访问地址(HTTP或HTTPS)
- HTTP示例:external_url ‘http://192.168.1.100’
- HTTPS示例:external_url ‘https://git.example.com’
- 使配置生效:sudo gitlab-ctl reconfigure
- 说明:修改external_url会触发内部Nginx/Unicorn等组件按新地址重新生成配置。
三 启用HTTPS与证书部署
- 方式A(推荐)使用Let’s Encrypt自动获取并配置
- 安装Certbot:sudo apt update && sudo apt install -y certbot python3-certbot-nginx
- 获取并自动配置证书:sudo certbot --nginx -d git.example.com
- 同步GitLab为HTTPS:在**/etc/gitlab/gitlab.rb**中设置 external_url ‘https://git.example.com’,再执行 sudo gitlab-ctl reconfigure
- 方式B 手动放置证书
- 准备证书与目录:
sudo mkdir -p /etc/gitlab/ssl
sudo chmod 700 /etc/gitlab/ssl
sudo cp git.example.com.key git.example.com.crt /etc/gitlab/ssl/
- 在**/etc/gitlab/gitlab.rb**中指定证书路径:
external_url 'https://git.example.com'
nginx['ssl_certificate'] = '/etc/gitlab/ssl/git.example.com.crt'
nginx['ssl_certificate_key'] = '/etc/gitlab/ssl/git.example.com.key'
- 可选:将所有HTTP重定向到HTTPS
nginx['redirect_http_to_https'] = true
- 使配置生效:sudo gitlab-ctl reconfigure。
四 反向代理与端口定制
- 使用外部Nginx反向代理(示例)
- 安装Nginx:sudo apt-get install -y nginx
- 站点配置示例(/etc/nginx/sites-available/gitlab):
server {
listen 80;
server_name git.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
- 启用站点并重启Nginx:sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled && sudo systemctl restart nginx
- 调整GitLab监听(/etc/gitlab/gitlab.rb):
external_url 'http://git.example.com'
nginx['listen_port'] = 80
nginx['listen_network'] = "0.0.0.0"
unicorn['port'] = 8080
- 使配置生效:sudo gitlab-ctl reconfigure
- 变更HTTPS端口示例
- external_url ‘https://git.example.com:2443’
- 证书路径按前述方式配置,完成后 sudo gitlab-ctl reconfigure。
五 验证与常见问题
- 连通性验证
- 本机:curl -I http://127.0.0.1 或 https://git.example.com
- 外部:浏览器访问配置的域名/IP;如启用HTTPS,确认证书有效(锁标识)
- 日志排查
- GitLab:sudo gitlab-ctl tail(Nginx、Rails 等日志)
- Nginx:sudo journalctl -u nginx -f
- 常见问题
- 端口被占用:ss -tulpen | grep 80/443/8080;必要时调整 unicorn/nginx 端口后 reconfigure
- 证书权限:/etc/gitlab/ssl 权限应为700,证书文件600
- 反向代理后CSRF或重定向异常:检查 X-Forwarded-Proto/X-Real-IP 等代理头是否正确设置,必要时在 gitlab.rb 中调整 nginx[‘proxy_set_headers’] 与 trusted_proxies/real_ip 相关项。