Ssl

使用 Plesk 和 LetsEncrypt 配置 GitLab Docker 容器

  • June 24, 2019

嗨,我的 GitLab 設置有問題。

我想要達到的目標:

  • 在 Docker 容器中執行 GitLab
  • 通過埠 80 和 443 上的子域 (gitlab.mydomain.com) 訪問 GitLab 以獲取 https
  • 通過 LetsEncrypt 和 Plesk 提供的 *.mydomain.com 萬用字元證書管理 SSL(已用於 Plesk 管理的子域)
  • 能夠在 GitLab 容器(npm 腳本等)中執行建構任務,並最終將特定的輸出文件移動到 Plesk 管理的子域的目錄(容器外部)

到目前為止我做了什麼:

  • 有一個執行 Ubuntu 18.04.2 並預裝了 Plesk Onyx 17.8.11 的 v-server
  • 通過 Plesk 設置 mydomain.com
  • 通過 Plesk 為 mydomain.com 設置 LetsEncrypt 萬用字元證書
  • 通過 ssh 安裝 Docker(不是 Plesk)
  • 在 mydomain.com:30080 的容器內執行 GitLab

我對伺服器環境和 Docker 完全陌生,所以我不確定所需的事物結構。也許你們知道該怎麼做?

謝謝!

此設置對我有用:

  1. 從 Plesk 創建一個子域(例如 gitlab.mydomain.com)
  2. 在“主機設置”中選擇您的 Let’s Encrypt 證書,並確保在 HTTPS 上設置永久 301 重定向(只需勾選複選框)
  3. 啟動 Docker 容器時,公開埠 80(例如 80:10080)
  4. 在“Apache & nginx 設置”中添加以下內容:
location / {
   proxy_pass http://localhost:10080;
   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "Upgrade";
}

這將通過 HTTPS 和 Let’s Encrypt 證書為您的子域提供服務,同時將請求代理到容器的埠 80,因此您不必費心將證書從容器外部傳遞給 GitLab。

據我了解,這是安全的,因為未加密的流量被限制在伺服器中(如果您的 Docker 守護程序與 Plesk 在同一台伺服器上)並且無法從外部訪問。

最後一點

能夠在 GitLab 容器(npm 腳本等)中執行建構任務,並最終將特定的輸出文件移動到 Plesk 管理的子域的目錄(容器外部)

這本身就是一個完整的問題。

要執行建構,您需要安裝 GitLab Runner。GitLab 文件建議將其安裝在不同的主機上,但您可以嘗試在同一主機上使用他們的Docker 映像。

有關建構和部署應用程序的資訊,請參閱 GitLab Runner文件。您需要為所謂的“持續部署”設置“管道”。

要為每個應用創建子域,您可以:

  • 從 Plesk 手動創建子域並使用腳本部署文件作為“管道”建構的最後一步
  • 使用一些腳本和 Plesk API 來自動創建子域
  • 忽略 Plesk 並使用完整的 Docker;使用將處理所有子域和 Let’s Encrypt 證書的反向代理,例如Traefik

這些只是指針,我建議您搜尋和閱讀更多關於 CI/CD 的主題。

引用自:https://serverfault.com/questions/955158