【docker】开启gitlab + nginx + https之旅
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. 阿里云域名免费获取证书
申请完成后,耐心等待一会,不用任何操作就会自动签发证书,如下图前往管理证书:
下载证书:
这个压缩包里含有一个.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
没了没了就这么简单
参考官方文档: