目錄
1、GitLab11.3.9的安裝
首先確保機器已經安裝好Docker
,執行以下命令安裝GitLab11.3.9
:
# Pull image
> git clone https://github.com/idoall/docker.git
> cd gitlab-ce/11.3.9-ce.0
# 啟動 Gitlab 容器
> docker stack deploy -c docker-compose.3.6.yml mshk_gitlab
Gitlab 容器是以 stack 方法運行的,可以自行修改配置文件
root
帳號的密碼默認是MySuperSecretAndSecurePass0rd!
Gitlab 內部的一些配置,可以直接修改 gitlab.rb
運行docker service ls
命令,可以看到 GitLab
的服務已經在運行:
> docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
qnh3srwc3qjo mshk_gitlab_mshk_gitlab replicated 1/1 idoall/gitlab-ce:11.3.9-ce.0 *:20050->80/tcp, *:20051->443/tcp, *:20052->22/tcp
2、域名在阿里雲托管,申請免費的1年證書
在阿里雲申請后,會有兩個文件gitlab-ce.mshk.top.pem
和gitlab-ce.mshk.top.crt
,下載到本地。
3、Gitlab 的 https 配置
這里可以在運行 Gitlab 容器前,根據 幫助 將本地的目錄掛載到容器中,持久化運行。后面容器重啟也不會丟數據。
將下載的gitlab-ce.mshk.top.pem
和gitlab-ce.mshk.topcrt
證書文件,放到容器的/etc/gitlab/ssl/
目錄下面。
下面是我的docker.gitlab.ce.yml
文件配置:
version: "3.6"
# https://docs.docker.com/compose/compose-file/
# support Docker version 17.05.0-ce
services:
#################################### gitlab_ce ######################################################
gitlab_ce:
image: idoall/gitlab-ce:11.3.9-ce.0
hostname: gitlab_ce
ports:
- "20042:22"
- "20040:80"
- "20041:443"
dns:
- 114.114.114.114
- 9.9.9.9
volumes:
- /home/work/_app/_gitlab_ce/gitlab_data:/var/opt/gitlab
- /home/work/_app/_gitlab_ce/gitlab_logs:/var/log/gitlab
- /home/work/_app/_gitlab_ce/gitlab_config:/etc/gitlab
networks:
- mshk-top
environment:
GITLAB_OMNIBUS_CONFIG: "from_file('/omnibus_config.rb')"
configs:
- source: gitlab
target: /omnibus_config.rb
deploy:
replicas: 1
update_config:
delay: 1s
restart_policy:
condition: on-failure
configs:
gitlab:
file: ./docker.gitlab.ce.rb
# 統一網絡設置
networks:
mshk-top:
driver: overlay
下面是我的docker.gitlab.ce.rb
文件配置:
external_url 'https://gitlab-ce.mshk.top'
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab-ce.mshk.top.pem"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab-ce.mshk.top.key"
gitlab_rails['gitlab_shell_ssh_port'] = 20042
# 使用QQ企業郵件發郵件
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "noreply@mshk.top"
gitlab_rails['smtp_password'] = "*******"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = 'noreply@mshk.top'
gitlab_rails['smtp_domain'] = "exmail.qq.com"
# 與Crowd結合,統一登錄認證
gitlab_rails['omniauth_enabled'] = true
gitlab_rails['omniauth_allow_single_sign_on'] = true
gitlab_rails['omniauth_block_auto_created_users'] = false
gitlab_rails['omniauth_providers'] = [
{
"name" => "crowd",
"args" => {
"crowd_server_url" => "http://crowd.mshk.top/crowd",
"application_name" => "gitlab",
"application_password" => "******"
}
}
]
調整好配置后,執行下面的命令,重啟 Gitlab:
# 獲取容器名稱,賦值到一個變量中
CONTAINERNAME=`docker ps --format "{{.Names}}" | grep mshk_gitlab_mshk_gitlab.1`
# 停止服務
docker exec $CONTAINERNAME sh -c 'gitlab-ctl stop'
# 更新權限
docker exec $CONTAINERNAME update-permissions
# 重新設置gitlab配置
docker exec $CONTAINERNAME sh -c 'gitlab-ctl reconfigure'
# 啟動服務
docker exec $CONTAINERNAME sh -c 'gitlab-ctl start'
4、Nginx 配置 https,反向代理指向 Gitlab 配置
這里有一點注意,配置證書的時候,Https服務設置的反向代理端口,是我們剛才設置的20041
.
完整的Nginx的配置文件gitlab-ce.mshk.top.conf
的格式如下:
## 將HTTP請求全部重定向至HTTPS
server {
listen 80;
server_name gitlab-ce.mshk.top;
charset utf-8;
access_log logs/gitlab.access.log;
error_log logs/gitlab.error.log;
rewrite ^ https://gitlab-ce.mshk.top;
}
## 請求轉發到GitLab容器
server {
listen 443 ssl;
server_name gitlab-ce.mshk.top;
charset utf-8;
access_log logs/gitlab.access.log;
error_log logs/gitlab.error.log;
ssl on;
# 服務的證書
ssl_certificate /usr/local/nginx/cert/gitlab-ce.mshk.top.pem;
# 服務端key
ssl_certificate_key /usr/local/nginx/cert/gitlab-ce.mshk.top.key;
# session超時時間
ssl_session_timeout 5m;
# 加密算法
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
# 允許SSL協議
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# 啟動加密算法
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_pass https://localhost:20041;
}
location ~ .*\.(js|css|png)$ {
proxy_pass https://localhost:20041;
}
}
最后重新載入Nginx配置,就可以生效了:
> nginx -s reload
下面是最終生效的截圖:
博文作者:迦壹
博客地址:Nginx設置Https反向代理,指向Docker Gitlab11.3.9
轉載聲明:可以轉載, 但必須以超鏈接形式標明文章原始出處和作者信息及版權聲明,謝謝合作!
假設您認為這篇文章對您有幫助,可以通過以下方式進行捐贈,謝謝!
比特幣地址:1KdgydfKMcFVpicj5w4vyn3T88dwjBst6Y
以太坊地址:0xbB0a92d634D7b9Ac69079ed0e521CC2e0a97c420