一、安装 Gitlab
# gitlab.example.com 为 你的域名或者主机IP
docker run --name gitlab \
--hostname gitlab.example.com \
--publish 22:22 --publish 443:443 --publish 80:80 \
--restart always \
--volume /etc/localtime:/etc/localtime:ro \
--volume /home/gitlab/config:/etc/gitlab \
--volume /home/gitlab/logs:/var/log/gitlab \
--volume /home/gitlab/data:/var/opt/gitlab \
-d gitlab/gitlab-ce:latest
注:文章所用 latest == 11.4.4-ce.0
这里我使用了官方默认的SSH 22 端口(悄悄的把服务器的SSH端口改成其他,为了给 gitlab 让步),至于开放 80、443端口(--publish 443:443 --publish 80:80 ),gitlab 内置了 nginx 的服务,会占用 80 和 443 端口,如果你服务器上本身就有 nginx,也可以选择不大家可以根据实际情况,自行选择暴露的端口哈。
二、配置 GitLab 使用 HTTPS 协议
如果不需要启用 HTTPS,关于安装 GitLab 的内容到这里就结束了,如果需要启用 HTTPS,那么到这一步骤我就默认大家已经申请好了 SSL 证书,获取到了以下相关的证书文件,申请 SSL 证书可参考文章[HTTPS][1]
# 相关的证书文件
.
└── www.example.com
├── cert.pem # 网站自身的证书
├── chain.pem # 网站证书链中的上级证书
├── fullchain.pem # 包含了网站自身证书和上级证书的完整证书链
├── privkey.pem # 网站自身证书对应的私钥
└── README
GitLab 启用 HTTPS
修改 /etc/gitlab/gitlab.rb
文件,配置 external_url
为 https
开头的地址
# 域名(https://)
external_url 'https://gitlab.example.com'
# http重定向到https
nginx['redirect_http_to_https'] = true
配置 GitLab 使用的证书有两种方式,一种是将之前通过 Let's Encrypt 申请的证书放置到 GitLab 默认要求的配置,如下文 链接证书 所示;另一种则是修改 GitLab 的配置文件,将证书的路径指向之前通过 Let's Encrypt 申请的证书,如下文 修改配置 所示。两种方式选一即可
配置方法一:链接证书
GitLab 默认配置会寻找存放在 /etc/gitlab/ssl/
目录下的 gitlab.example.com.key
和 gitlab.example.com.crt
文件,其中的 gitlab.example.com
应当替换为在上文中 external_url
里设置的域名
链接证书需要用到 fullchain.pem
和 privkey.pem
证书文件,gitlab 默认使用 .crt
格式的私钥,需要进行格式转换,就是改下文件后缀名就好了(fullchain.pem --> gitlab.example.com.crt,privkey.pem --> gitlab.example.com.key ),然后将改完后缀的文件复制到 gitlab 容器内 /etc/gitlab/ssl/
目录下
可以通过如下命令来将之前通过 Let's Encrypt 申请的证书链接到所需的位置
# 使用 root 用户执行以下命令
mkdir -p /etc/gitlab/ssl
chmod 700 /etc/gitlab/ssl
cd /etc/gitlab/ssl
# 然后将`gitlab.example.com.crt` 和 `gitlab.example.com.key` 文件拷贝到该目录下
配置方法二:修改配置
编辑 GitLab 的配置文件 /etc/gitlab/gitlab.rb
# 容器内的证书文件位置
nginx['ssl_certificate'] = "/etc/letsencrypt/live/gitlab.example.com/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/gitlab.example.com/privkey.pem"
最后执行下面命令让配置生效
gitlab-ctl reconfigure
后记
不过申请的证书三个月就过期了,然后又要去拷贝新证书替换容器内的证书,为了方便,我直接将 /etc/letsencrypt
挂载到容器内,这样就不用替换证书了
docker run --name gitlab \
--hostname gitlab.example.com \
--publish 22:22 --publish 443:443 --publish 80:80 \
--restart always \
--volume /etc/localtime:/etc/localtime:ro \
--volume /home/gitlab/config:/etc/gitlab \
--volume /home/gitlab/logs:/var/log/gitlab \
--volume /home/gitlab/data:/var/opt/gitlab \
--volume /etc/letsencrypt:/etc/letsencrypt \
-d gitlab/gitlab-ce:latest