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 就可快速在服务器构建你的项目了