Ubuntu 上 GitLab 启用 HTTPS 的完整做法
一 准备与前置检查
sudo ufw allow http 与 sudo ufw allow https)。如使用云厂商安全组,同样需放行 443。sudo apt update && sudo apt install -y curl openssh-server ca-certificates postfix。/etc/gitlab/ssl,权限建议 700/600(目录 700,证书与密钥 600)。二 方式一 使用 Let’s Encrypt 自动申请证书(推荐)
/etc/gitlab/gitlab.rb:
external_url 'https://git.example.com'letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['admin@example.com']
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
三 方式二 使用自签名证书(内网或测试环境)
sudo mkdir -p /etc/gitlab/ssl
sudo chmod 700 /etc/gitlab/ssl
sudo openssl genrsa -des3 -out /etc/gitlab/ssl/git.example.com.key 2048
sudo cp -v /etc/gitlab/ssl/git.example.com.{key,original}
sudo openssl rsa -in /etc/gitlab/ssl/git.example.com.original -out /etc/gitlab/ssl/git.example.com.key
sudo rm -v /etc/gitlab/ssl/git.example.com.original
sudo openssl req -new -key /etc/gitlab/ssl/git.example.com.key -out /etc/gitlab/ssl/git.example.com.csr
sudo openssl x509 -req -days 1460 \
-in /etc/gitlab/ssl/git.example.com.csr \
-signkey /etc/gitlab/ssl/git.example.com.key \
-out /etc/gitlab/ssl/git.example.com.crt
sudo chmod 600 /etc/gitlab/ssl/git.example.com.{key,crt}
/etc/gitlab/gitlab.rb:external_url 'https://git.example.com'
nginx['enable'] = true
nginx['redirect_http_to_https'] = true
nginx['redirect_http_to_https_port'] = 80
nginx['ssl_certificate'] = "/etc/gitlab/ssl/git.example.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/git.example.com.key"
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
四 验证与常见问题
redirect_http_to_https,访问 http:// 会自动跳转。/etc/gitlab/ssl/*.key 为 600,目录为 700,避免 GitLab/Nginx 启动失败。/etc/gitlab/gitlab.rb 后执行 sudo gitlab-ctl reconfigure;必要时 sudo gitlab-ctl restart。sudo gitlab-ctl tail nginx/gitlab_access.log、sudo gitlab-ctl tail nginx/gitlab_error.log。# HTTPS
git clone https://git.example.com/namespace/project.git
# 若使用自签名证书,可临时跳过验证(不推荐长期使用)
git -c http.sslVerify=false clone https://git.example.com/namespace/project.git