您在這裡

【網站架設】簡易方便的反向代理工具Traefik

前言

在用了多年的Nginx反向代理工具,設定了無數次的設定檔,雖然程式設定上並不困難,但是每一次設定都還是膽戰心驚,因為一點的小失誤,都有可能造成整個Nginx的服務中斷。更不用提為了要設定HTTPS的服務,要設定到加密程度A+,做到的環節更是多阿。一直到了最近,才發現這個好用工具,將讓我決定離開Nginx的懷抱,轉向到這個工具,這個工具就是Traefik。

Traefik 簡介

Traefik是一套用Go語言所開發的應用程式,2015年9月推出了v1.0,至今已經到了v1.6版本了。其主要功能是反向代理負載平衡等功能。Traeifk還可以跟現行幾乎所有的基礎架構整合。例如:Docker、Swarm Mode、Kubernetes、Marathon、Consul、Etcd、Rancher、Amazon ECS)

你為何需要用他?

一般來說我們都是用Subdomain的方式再搭配Nginx的方式來進行反向代理的工作,極複雜又麻煩,Traefik可以一次幫你解決,下圖是官方提供的圖片,一張簡易的圖片,即可說明一切

Traefik在安裝後,他可以幫你將你全數的微服務進行串連,可以通過簡單的label設定,即可完成。其還有WEB UI的介面,讓你更容易觀察與了解整體配置

Traefik的功能眾多,詳細的資訊可以到其官方網站來觀看。其中讓我眼睛一亮的則是支援Let‘s Encrypt,而且設定超容易。

如何安裝

這裡使用docker的安裝方式進行安裝,若想要了解其他方式,可以考慮官方網站的文件

  1. 建立一個Network
$ docker create network ReverseProxy
  1. 建立一個Traefik資料夾, 並且建立 docker-compose.yml
$ mkdir traefik
$ cd traefik
$ touch docker-compose.yml
  1. docker-compose.yml 檔案內容 通過docker-compose可以一次設定好traefik的服務,並且此種設定在一個資料夾裡面的方式,將會比較適合打包,搬移整體環境。

    這裡有特別將acme.json還有traefik.toml兩個檔案同步到容器內供traefik使用。

version: "3.5"
services:

  traefik:
    image: traefik:1.6
    command: --api --docker -c /etc/traefik.toml
    restart: always
    networks:
      - ReverseProxy
    container_name: traefik-reverse-proxy
    labels:
      traefik.enable: "true"
      traefik.frontend.rule: "Host:your.traefik.domain"
      traefik.frontend.headers.STSSeconds: 315360000
      traefik.port: 8080
    ports:
      - target: 80
        published: 80
        mode: host
      - target: 443
        published: 443
        mode: host
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./conf/acme.json:/acme.json
      - ./conf/traefik.toml:/etc/traefik.toml

networks:
  ReverseProxy:
  1. 建立traefik與acme.json設定檔案 照目前的狀況,你應該還是在traefik這個資料夾內的,建立conf資料夾,然後分別建立檔案
$ mkdir conf
$ cd conf
$ touch acme.json
$ touch traefik.toml
  1. 調整檔案權限
$ chmod 400 acme.json

  1. 填寫traefik設定檔案內容

* 編輯traefik.toml

$ nano traefik.toml
  • traefik.toml 內容
debug = false

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

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

[acme]
email = "victor.yang@hellosanta.com.tw"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
[acme.httpChallenge]
entryPoint = "http"

照上述這樣寫法,即可很方便的自動跟letsEncrypt要HTTPS資料囉。而會將存到的key寫到acme.json裡面。

  1. 啟動服務
$ docker-compose up -d

大功告成

結論

這個才初步接觸,就覺得方便的解決自己非常多的問題,是個值得投資時間的好用工具,在越來越多微服務的時代下,覺得這個更是重要且有趣。推薦推薦。