Traefik 搭配 Docker 自動更新 Let’s Encrypt 憑證

栏目: 编程工具 · 发布时间: 5年前

内容简介:之前寫過蠻多篇在啟動 Traefik 服務前,需要建立一個獨立的 Docker 網路,請在 Host 內下

Traefik 搭配  <a href='https://www.codercto.com/topics/20577.html'>Docker</a>  自動更新 Let’s Encrypt 憑證

之前寫過蠻多篇 Let’s Encrypt 的使用教學 ,但是這次要跟大家介紹一套非常好用的工具 Traefik 搭配自動化更新 Let’s Encrypt 憑證,為什麼會推薦 Traefik 呢,原因在於 Traefik 可以自動偵測 Docker 容器內的 Label 設定,並且套用設定在 Traefik 服務內,也就是只要修改服務的 docker-compose 內容,重新啟動,Traefik 就可以抓到新的設定。這點在其它 工具 像是 NginxCaddy 是無法做到的。底下我們來一步一步教大家如何設定啟用前後端服務。全部程式碼都放在 GitHub 上面 了。

教學影片

啟動 Traefik 服務

在啟動 Traefik 服務前,需要建立一個獨立的 Docker 網路,請在 Host 內下

$ docker network create web

接著建立 Traefik 設定檔存放目錄 /opt/traefik 此目錄自由命名。

$ mkdir -p /opt/traefik

接著在此目錄底下建立三個檔案

$ touch /opt/traefik/docker-compose.yml
$ touch /opt/traefik/acme.json && chmod 600 /opt/traefik/acme.json
$ touch /opt/traefik/traefik.toml

其中 docker-compose.yml 用來啟動 Traefik 服務, acme.json 則是存放 Let’s Encrypt 的憑證,此檔案權限必須為 600 ,最後則是 traefik 設定檔 traefik.toml 。一一介紹這些檔案的內容,底下是 docker-compose.yml

version: '2'

services:
  traefik:
    image: traefik
    restart: always
    ports:
      - 80:80
      - 443:443
    networks:
      - web
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /opt/traefik/traefik.toml:/traefik.toml
      - /opt/traefik/acme.json:/acme.json
    container_name: traefik

networks:
  web:
    external: true

此檔案必須要由 root 使用者來執行,原因是要 Listen 80 及 443 連接埠,其中 acme.json 及 traefik.toml 則由 host 檔案直接掛載進容器內。接著看 traefik.toml

debug = false

logLevel = "INFO"
defaultEntryPoints = ["https","http"]

[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  [entryPoints.https]
  address = ":443"
  [entryPoints.https.tls]

[acme]
email = "xxxxx@gmail.com"
storage = "acme.json"
entryPoint = "https"
onHostRule = true

[acme.httpChallenge]
entryPoint = "http"

[docker]
endpoint = "unix:///var/run/docker.sock"
watch = true

其中 onHostRule 用於讀取 docker container 內的 frontend.ruleHost 設定,這樣才可以跟 Let’s Encrypt 申請到憑證。最後啟動步驟

$ cd /opt/traefik
$ docker-compose up -d

啟動 App 服務

請打開 docker-compose.yml 檔案

version: '3'

services:
  app_1:
    image: appleboy/test:alpine
    restart: always
    networks:
      - web
    logging:
      options:
        max-size: "100k"
        max-file: "3"
    labels:
      - "traefik.docker.network=web"
      - "traefik.enable=true"
      - "traefik.basic.frontend.rule=Host:demo1.ggz.tw"
      - "traefik.basic.port=8080"
      - "traefik.basic.protocol=http"

  app_2:
    image: appleboy/test:alpine
    restart: always
    networks:
      - web
    logging:
      options:
        max-size: "100k"
        max-file: "3"
    labels:
      - "traefik.docker.network=web"
      - "traefik.enable=true"
      - "traefik.basic.frontend.rule=Host:demo2.ggz.tw"
      - "traefik.basic.port=8080"
      - "traefik.basic.protocol=http"

networks:
  web:
    external: true

可以看到透過 docker labels 設定讓 traefik 直接讀取並且套用設定。啟動服務後可以看到 acme.json 已經存放了各個 host 的憑證資訊,未來只要將此檔案備份,就可以不用一直申請了。最後用 curl 來測試看看

Traefik 搭配 Docker 自動更新 Let’s Encrypt 憑證

心得

由於 Traefik 可以自動讀取 docker label 內容,未來只需要維護 App 的 docker-compose 檔案,對於部署上面相當方便啊,透過底下指令就可以重新啟動容器設定

$ docker-compose up -d --force-recreate --no-deps app

如果對於自動化部署有興趣,可以參考我在 Udemy 上的線上課程


以上所述就是小编给大家介绍的《Traefik 搭配 Docker 自動更新 Let’s Encrypt 憑證》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

ARM嵌入式系统开发

ARM嵌入式系统开发

斯洛斯 / 北京航大 / 2005-5 / 75.00元

《ARM嵌入式系统开发:软件设计与优化》从软件设计的角度,全面、系统地介绍了ARM处理器的基本体系结构和软件设计与优化方法。内容包括:ARM处理器基础;ARM/Thumb指令集;C语言与汇编语言程序的设计与优化;基本运算、操作的优化;基于ARM的DSP;异常与中断处理;固件与嵌入式OS;cache与存储器管理;ARMv6体系结构的特点等。全书内容完整,针对各种不同的ARM内核系统结构都有详尽论述,......一起来看看 《ARM嵌入式系统开发》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具