traefik 是一個爲了讓部署微服務更加便捷而誕生的現代HTTP反向代理、負載均衡工具。 它支持多種後臺 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 來自動化、動態的應用它的配置文件設置。前端
本文將分享 traefik 結合 docker-compose 的一點使用經驗。git
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 部署網站,可輕鬆綁定域名,設置 https , 負載均衡,已在多個項目使用,文檔可靠,強烈推薦!github
如下爲使用的基本操做web
touch acme.json && chmod 600 ./acme.json
)使用 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"
文檔地址: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"
文檔地址: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"
[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 就可快速在服務器構建你的項目了