traefik 結合 docker-compose 的快速安裝及使用

traefik 介紹

traefik 是一個爲了讓部署微服務更加便捷而誕生的現代HTTP反向代理、負載均衡工具。 它支持多種後臺 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 來自動化、動態的應用它的配置文件設置。前端

特性一覽

  • 它很是快
  • 無需安裝其餘依賴,經過 Go 語言編寫的單一可執行文件
  • 支持 Rest API
  • 多種後臺支持:Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, 而且還會更多
  • 後臺監控, 能夠監聽後臺變化進而自動化應用新的配置文件設置
  • 配置文件熱更新。無需重啓進程
  • 正常結束 http 鏈接
  • 後端斷路器
  • 輪詢,rebalancer 負載均衡
  • Rest Metrics
  • 支持最小化 官方 docker 鏡像
  • 後臺支持 SSL
  • 前臺支持 SSL(包括 SNI)
  • 清爽的 AngularJS 前端頁面
  • 支持 Websocket
  • 支持 HTTP/2
  • 網絡錯誤重試
  • 支持 Let’s Encrypt (自動更新 HTTPS 證書)
  • 高可用集羣模式

本文將分享 traefik 結合 docker-compose 的一點使用經驗。git

docker(docker-ce) 及 docker-compose(1.23.2) 的快速安裝

sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
sudo curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

docker-compose 安裝 traefik 及使用

用其搭配 docker-compose 部署網站,可輕鬆綁定域名,設置 https , 負載均衡,已在多個項目使用,文檔可靠,強烈推薦!github

如下爲使用的基本操做web

  1. 建立 network,使 traefik 及網站處於同一網絡
  2. 建立 traefik.toml(官方文檔)
  3. 建立 acme.json (touch acme.json && chmod 600 ./acme.json)
  4. 建立 docker-compose.yml

docker-compose.yml

使用 docker-compose up -d 便可構建 traefik 服務, 根據 labels 標籤經過監聽其內部的 8090 端口,並綁定了域名 traefik.testdomain.comdocker

docker-compose 可以使用的 labes 配置見文檔:http://docs.traefik.cn/toml#docker-backend traefik.toml 配置見文檔:http://docs.traefik.cn/tomljson

使用以前須要先建立一個網絡(docker network create me_gateway),讓 traefik 及全部網站都使用一個網絡,這樣就可以自動將域名綁定到對應的容器中後端

下面是一個 traefik 的 docker-compose.yml 配置api

version: '3'
services:
  me_traefik:
    restart: always
    image: traefik:1.7.4
    ports:
      - '80:80'
      - '443:443'
    labels:
      - 'traefik.backend=me_traefik'
      - 'traefik.frontend.rule=Host:traefik.testdomain.com'
      - 'traefik.enable=true'
      - 'traefik.passHostHeader=true'
      - 'traefik.protocol=https'
      - 'traefik.port=8090'
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
      - ./acme.json:/acme.json
    networks:
      - webgateway
networks:
  webgateway:
    external:
      name: me_gateway

volumes 說明bash

  • /var/run/docker.sock:主機 docker
  • ./traefik.toml:traefik 配置文件
  • ./acme.json:Let's Encrypt 配置,會根據 traefik.toml 生成,映射出來,後續重啓數據將不會丟失,可是須要爲其添加讀寫權限(chmod 600 acme.json),初始化時能夠 touch acme.json 生成一個空文件

下面是一個 traefik 的 traefik.toml 配置示例服務器

################################################################
# Global configuration
################################################################
debug = false
logLevel = "ERROR"
defaultEntryPoints = ["http","https"]
[entryPoints]
  [entryPoints.http]
  address = ":80"
#    [entryPoints.http.redirect]
#      entryPoint = "https"
# 啓用https
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]
  [entryPoints.webentry]
    address = ":8090"
    [entryPoints.webentry.auth]
      [entryPoints.webentry.auth.basic]
         users = ["test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/"]
[api]
dashboard = true
entrypoint = "webentry"

[ping]

[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "testdomain.com"
watch = true
exposedByDefault = false
usebindportip = true
swarmMode = false
network = "me_gateway"

[acme]
# 用於註冊的郵箱地址
email = "wsyimo@qq.com"
# 證書存儲使用的文件或鍵。
storage = "acme.json"
# 代理acme驗證證書challenge/apply的入口點。
# 警告, 必需指向到一個443端口做爲入口點
entryPoint = "https"
# 啓用按需證書。若是這個主機名尚未證書,這將會在與一個主機名發起請求的第一個TLS握手中向Let's Encrypt請求一個證書。
# 警告,第一次在請求中獲取主機證書會致使TLS握手會很是慢,這會引發Dos攻擊。
# 警告,值得注意的是Let's Encrypt是有請求上限的:https://letsencrypt.org/docs/rate-limits
onDemand = false
# 啓用根據前端Host規則來生成證書。這將會爲每一個具備Host規則的前端生成一個Let's Encrypt的證書。
# 舉個例子,一個具備規則的Host:test1.traefik.cn,test2.traefik.cn 將會爲主域名test1.traefik.cn與SAN(替代域名) test2.traefik.cn生成一個證書。
onHostRule = true
  [acme.httpChallenge]
  entryPoint="http"

traefik 自動申請 https 證書(Let’s Encrypt)

文檔地址:http://docs.traefik.cn/toml#acme-lets-encrypt-configuration

defaultEntryPoints = ["http","https"]
[entryPoints]
  [entryPoints.http]
  address = ":80"
#    [entryPoints.http.redirect]
#      entryPoint = "https"
# 啓用https
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]
  [entryPoints.webentry]
    address = ":8090"

traefik 自定義入口並配置帳戶密碼

文檔地址:http://docs.traefik.cn/toml#entrypoints-definition 可是,按照文檔來,可能並不必定可以配置成功~,若是不成功就參考下面的配置吧,

defaultEntryPoints = ["http","https"]
[entryPoints]
  [entryPoints.http]
  address = ":80"
#    [entryPoints.http.redirect]
#      entryPoint = "https"
# 啓用https
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]
  [entryPoints.webentry]
    address = ":8090"
    [entryPoints.webentry.auth]
      [entryPoints.webentry.auth.basic]
         users = ["test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/"]
[api]
dashboard = true
entrypoint = "webentry"
  1. 在 api 節點指定 entrypoint= 入口點
  2. 配置 entryPoints 節點
[entryPoints]
    [entryPoints.入口點]
        address = ":8090"
        [entryPoints.webentry.auth]
        [entryPoints.webentry.auth.basic]
            users = ["test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/"]

上訴密碼須要使用 htpasswd 生成,可在服務器生成,也可以使用新鮮出爐的 metools 的htpasswd 密碼生成 在線生成了。

當 traefik 部署完成,後續網站綁定域名只須要在 docker-compose.yml 中指定 labels對應值便可自動綁定域名,申請 https 等操做了(指定到同一個網絡),關於更多使用場景及方法,仍是須要去查看文檔 ,簡單的能夠參考個人配置,clone 後經過 docker-compose.yml 就可快速在服務器構建你的項目了

相關地址

相關文章
相關標籤/搜索