之前 Heresy 曾經寫過一篇《在自架 GitLab 使用 Kroki 來繪圖》,介紹可以搭配 GitLab、在檔案、issue、wiki 裡面繪製 UML 等圖形的工具型伺服器了。
而在當時,他的 Docker 版並不支援 https、只支援 http,所以沒辦法直接搭配 Https 版的 GitLab 使用;後來 Heresy 是在對方的建議下使用 NGINX 來做反向代理、來讓他可以正常運作的(參考)。
實際上,後來他們也滿快地就就加入 Https 的支援了,不過 Docker 映像檔感覺是沒有立刻更新、再加上 Heresy 這邊可以正常運作、沒有迫切的需求,所以就先沒管了。
而前一陣子、Heresy 則是才又花了點時間、研究怎麼直接使用他的 https 模式,這邊就稍微紀錄一下。
首先,這部分的官方文件可以參考「Enabling SSL on the server」(連結);理論上這邊需要三個額外的環境變數:
KROKI_SSL=true
KROKI_SSL_CERT="......"
KROKI_SSL_KEY="......."
基本上就是把憑證和 key 的內容、以字串的形式、用環境變數的方式傳遞進 Docker 裡面。
而官方建議的方法,是透過下面的指令來建立一個 .env
檔:
cat cert.pem | tr -d '\n' | sed 's/^/KROKI_SSL_CERT=/' >> .env echo >> .env cat key.pem | tr -d '\n' | sed 's/^/KROKI_SSL_KEY=/' >> .env
然後,就可以透過下面的 Docker 指令來跑 https 模式了!
docker run -p8000:8000 -e KROKI_SSL=true --env-file=.env yuzutech/kroki
不過不知道為什麼,Heresy 這邊在測試的時候,直接跑 Docker 沒有問題、但是如果是用 docker-compose 來執行的話,就會出現「environment variable name '-----END CERTIFICATE-----' may not contain whitespace.
」這樣的錯誤。
所以,這邊後來是改用 KROKI_SSL_CERT_PATH
和 KROKI_SSL_KEY_PATH
這種檔案路徑的形式、來指定憑證檔案,然後就可以運作了!
目前的 docker-compose.yml
是下面的樣子:
version: '3.0' services: gitlab: image: gitlab/gitlab-ce:latest container_name: gitlab hostname: gitlab.heresy.com ports: - "80:80" - "443:443" - "5100:5100" # Container Registry volumes: - /mnt/gitlab_data/config:/etc/gitlab - /mnt/gitlab_data/logs:/var/log/gitlab - /mnt/gitlab_data/data:/var/opt/gitlab restart: always networks: - gitlab_net kroki: image: yuzutech/kroki container_name: kroki environment: - KROKI_SSL=true - KROKI_SSL_CERT_PATH=/etc/ssl/gitlab.heresy.com.crt - KROKI_SSL_KEY_PATH=/etc/ssl/gitlab.heresy.com.key volumes: - /mnt/gitlab_data/config/ssl:/etc/ssl ports: - "8000:8000" restart: always networks: - gitlab_net networks: gitlab_net: driver: bridge
這邊就直接把本來給 GitLab 用的 SSL 憑證路徑(/mnt/gitlab_data/config/ssl
)對應成 kroki 的容器裡面的 /etc/ssl
,然後再透過前面提到的兩個環境變數來指定檔案就可以了~
這樣一來,就可以直接架設一個和 GitLab 整合的 Kroki 伺服器了~
附帶一提,這邊因為把 port 改成直接用 Kroki 的 8000 了,所以之前在 GitLab 管理區域的設定也需要修改(Heresy 這邊之前用 8081)。
修改方法:
- 進入 GitLab 管理介面(Admin Area)
- 在「Settings」、「General」裡面,先把「Kroki」裡面的「Kroki URL」移除、然後把「Enable Kroki」取消、按下「Save Changes」
- 在「Settings」、「Network」裡面、把「Outbound requests」下面「Local IP addresses and domain names that hooks and integrations can access」中的「gitlab.heresy.com:8081」改成「gitlab.heresy.com:8000」、然後按下「Save Changes」
- 回到在「Settings」、「General」裡面,把「Kroki」裡面的「Kroki URL」修改成「https://gitlab.heresy.com:8000」、然後把啟用「Enable Kroki」、按下「Save Changes」
要搞成這樣的原因,是因為不先做第二步驟的話,第三步驟會跳錯誤沒辦法完成,然後第四步驟當然也無法進行,感覺有點搞笑。