2019.10.23 本篇教學以 Traefik 1.7 版本為主
之前寫過蠻多篇 Let’s Encrypt 的使用教學,但是這次要跟大家介紹一套非常好用的工具 Traefik 搭配自動化更新 Let’s Encrypt 憑證,為什麼會推薦 Traefik 呢,原因在於 Traefik 可以自動偵測 Docker 容器內的 Label 設定,並且套用設定在 Traefik 服務內,也就是只要修改服務的 docker-compose 內容,重新啟動,Traefik 就可以抓到新的設定。這點在其它工具像是 Nginx 或 Caddy 是無法做到的。底下我們來一步一步教大家如何設定啟用前後端服務。全部程式碼都放在 GitHub 上面了。
教學影片
啟動 Traefik 服務
在啟動 Traefik 服務前,需要建立一個獨立的 Docker 網路,請在 Host 內下
|
|
接著建立 Traefik 設定檔存放目錄 /opt/traefik
此目錄自由命名。
|
|
接著在此目錄底下建立三個檔案
其中 docker-compose.yml
用來啟動 Traefik 服務,acme.json
則是存放 Let’s Encrypt 的憑證,此檔案權限必須為 600
,最後則是 traefik 設定檔 traefik.toml
。一一介紹這些檔案的內容,底下是 docker-compose.yml
|
|
此檔案必須要由 root
使用者來執行,原因是要 Listen 80 及 443 連接埠,其中 acme.json 及 traefik.toml 則由 host 檔案直接掛載進容器內。接著看 traefik.toml
|
|
其中 onHostRule
用於讀取 docker container 內的 frontend.rule
的 Host
設定,這樣才可以跟 Let’s Encrypt 申請到憑證。最後啟動步驟
啟動 App 服務
請打開 docker-compose.yml 檔案
|
|
可以看到透過 docker labels 設定讓 traefik 直接讀取並且套用設定。啟動服務後可以看到 acme.json
已經存放了各個 host 的憑證資訊,未來只要將此檔案備份,就可以不用一直申請了。最後用 curl 來測試看看
心得
由於 Traefik 可以自動讀取 docker label 內容,未來只需要維護 App 的 docker-compose 檔案,對於部署上面相當方便啊,透過底下指令就可以重新啟動容器設定
|
|
如果對於自動化部署有興趣,可以參考我在 Udemy 上的線上課程
See also
- Go 1.16 推出 Embedding Files
- 用 Docker 每天自動化備份 MySQL, Postgres 或 MongoDB 並上傳到 AWS S3
- 如何將前端網站打包成 Docker Image
- 使用 Docker BuildKit 加速編譯 Image
- 用 GitHub Actions 上傳 Docker Image 到 AWS ECR
- Docker 推出官方 GitHub Actions 套件
- Go Modules 處理 Private GIT Repository 流程
- 用五分鐘安裝好 Drone 搭配 GitHub 自動化環境
- 使用 Docker 五分鐘安裝好 Gitea (自架 Git Hosting 最佳選擇)
- [Go 教學] graceful shutdown 搭配 docker-compose 實現 rolling update