【docker】开启gitlab + nginx + https之旅

时间:2024-03-20 20:45:16

docker跑gitlab不是难事,利用nginx的反向代理,加上https也没什么问题

一定要按步骤来!!!

一定要按步骤来!!!

一定要按步骤来!!!

1. docker跑gitlab

$ sudo mkdir -p /srv/gitlab/config
$ sudo mkdir -p /srv/gitlab/logs
$ sudo mkdir -p /srv/gitlab/data
$ sudo mkdir -p /srv/gitlab/config/ssl
$ sudo docker run -d --name gitlab \
--hostname gitlab.example.com \
-p 2443:443 -p 22:22 \
-v /srv/gitlab/config:/etc/gitlab \
-v /srv/gitlab/logs:/var/log/gitlab \
-v /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest

这里我并没有暴露(expose)docker容器内的80端口,因为我们是要使用https进行访问的,只要暴露docker容器内的443端口就可以了
/srv/gitlab/config/ssl是放证书文件的

2. 阿里云域名免费获取证书

【docker】开启gitlab + nginx + https之旅
【docker】开启gitlab + nginx + https之旅
【docker】开启gitlab + nginx + https之旅
申请完成后,耐心等待一会,不用任何操作就会自动签发证书,如下图前往管理证书:
【docker】开启gitlab + nginx + https之旅
下载证书:
【docker】开启gitlab + nginx + https之旅
【docker】开启gitlab + nginx + https之旅
这个压缩包里含有一个.pem文件和一个.key文件

3. gitlab默认使用.crt格式的私钥,需要进行格式转换

此部分内容过于简单,就是改下文件后缀名就好了
并将这两个文件同时copy到/srv/gitlab/config/ssl/root/.cert两个目录下

这里注意一下两个文件的命名: gitlab.example.com.crt 和 gitlab.example.com.key 因为gitlab默认在/srv/gitlab/config/ssl下找这两个文件(docker容器内是/etc/gitlab/ssl

当然也可以指定(容器内 vi /etc/gitlab/gitlab.rb):

nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.example.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.example.com.key"

4. 修改gitlab的配置文件gitlab.rb

$ sudo docker exec -it gitlab /bin/bash

docker# vi /etc/gitlab/gitlab.rb

修改一下内容:

external_url "https://gitlab.example.com"
nginx['redirect_http_to_https'] = true

5. 重启gitlab

$ sudo docker restart gitlab

6. nginx反向代理,配置gitlab.conf(vi /etc/nginx/conf.d/gitlab.conf)

gitlab.conf的内容如下:

upstream gitlab{
    server localhost:2443;
}

# 转发到容器
server{
    listen 443;
    server_name gitlab.example.com;
    ssl on;
    ssl_certificate /root/.cert/gitlab.example.com.crt;
    ssl_certificate_key /root/.cert/gitlab.example.com.key;

    location / {
        proxy_pass https://gitlab;
   	proxy_http_version 1.1;
        proxy_set_header X_FORWARDED_PROTO https;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
    }
}

# 转发到443
server {
    listen 80;
    server_name  gitlab.example.com;
    rewrite ^(.*)$ https://${server_name}$1 permanent; 
}

7. 使nginx配置文件生效

$ sudo nginx -s reload

没了没了就这么简单

参考官方文档:

  1. GitLab Docker images
  2. NGINX settings

参考博文:
Docker方式部署GitLab,Nginx反向代理Https