本文介绍的是在通过编写docker-compose.yml文件启动gitlab服务,并使用https协议进行代码的加密传输。
环境:阿里云centos7.3服务器;docker 18.03.1-ce;gitlab-ce-zh。本服务器绑定了域名code.example.com。
相关文章链接:《还不会安装docker?这里帮你搞定》、《如何安装docker-compose》。
阿里云的https申请需要在阿里云控制台进行申请,然后可以下载配置nginx的秘钥。最终可以得到两个文件,一个是***.pem,一个是***.key。将其上传到服务器的/data/software/docker-nginx/cert中(随便选择文件路径都可以,这里只是方便理解后文配置文件中的路径),并将pem文件的后缀修改为crt,即将***.pem文件修改为***.crt。
直接上docker-compose.yml:
version: '3'
services:
gitlab:
container_name: gitlab # gitlab 容器名
image: 'twang2218/gitlab-ce-zh:latest' #镜像名称,如果本地镜像没有,会自动从远端pull
restart: always # 是否在docker重启时自动重启
hostname: 'code.example.com'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://code.example.com'
nginx['enable'] = true
nginx['client_max_body_size'] = '250m'
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/ssl/cert/CodeExampleCn.crt" # 加密证书文件
nginx['ssl_certificate_key'] = "/etc/ssl/cert/CodeExampleCn.key"
nginx['ssl_protocols'] = "TLSv1.1 TLSv1.2"
nginx['ssl_session_cache'] = "builtin:1000 shared:SSL:10m"
nginx['listen_addresses'] = ["0.0.0.0"]
nginx['http2_enabled'] = true
volumes:
- /data/software/gitlab-ce-zh/config:/etc/gitlab
- /data/software/gitlab-ce-zh/logs:/var/log/gitlab
- /data/software/gitlab-ce-zh/data:/var/opt/gitlab
- /data/software/docker-nginx/cert:/etc/ssl/cert
networks:
- gitlab_network
gitlab-system-nginx: # nginx 反向代理服务
container_name: gitlab-system-nginx
depends_on: # 反向代理依赖的服务名
- gitlab
image: nginx:1.18.0
ports:
- "443:443"
volumes:
- "./nginx-conf-reverse/nginx.conf:/etc/nginx/nginx.conf:ro" # 此处使用的是相对(docker-compose.yml)路径
- "/data/software/docker-nginx/cert:/etc/ssl/cert:ro" # 此处使用的是绝对路径
networks: # nginx反向代理使用的网络
- gitlab_network # gitlab使用的网络
networks:
gitlab_network:
说明:这是针对gitlab和gitlab-system-nginx两个服务和gitlab_network这个网络的配置
- 在gitlab容器中,启用了自身的nginx,并为其添加ssl证书,证书路径是容器内的路径,所以需要在volumes中设置挂载到宿主机,这样就可以在容器中访问宿主机中的文件。并使用gitlab_network网络。
- 在gitlab-system-nginx中向外部暴露443端口,且声明与gitlab在同一个网络gitlab_network中。
在docker-compose.yml的所在目录中建立nginx-conf-reverse文件夹:
并在nginx-conf-reverse文件夹中配置nginx.conf文件:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server{
listen 443 ssl http2; # 监听 443 端口
listen [::]:443 ssl http2;
server_name code.zwlys.com;
ssl_certificate /etc/ssl/cert/CodeZwlysCn.crt;
ssl_certificate_key /etc/ssl/cert/CodeZwlysCn.key;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
location / {
proxy_pass https://gitlab; # 转发给名为 "gitlab" 的 容器
}
}
}
在docerk-compose.yml所在目录使用docker-compose up -d命令,在后台启动容器编排。
在用docker ps查看已经运行的容器:
再用浏览器访问https://code.exampe.com即可成功访问gitlab。