本文最后更新于 346 天前,其中的信息可能已经有所发展或是发生改变。
五分钟系列之traefik
介绍
该系列是用五分钟来快速了解traefik的基本功能以及快速部署。
食用范围
- 初学者
- 概念验证
- 快速部署
- 等等
先决条件
Docker
Docker Compose
DNS
记录
介绍
Traefik是一种现代 HTTP 反向代理和负载均衡器,可以轻松的和Docker
、Swarm
模式、Kubernetes
、Marathon
、Consul
、Etcd
、Rancher
、Amazon ECS
等集成,并自动和动态地配置自身。将 Traefik
指向您的编排器应该是您需要的唯一配置步骤。
官方的口号就是:Makes Networking Boring
部署
这里采用Docker Compose方式进行部署
version: '3'
# 自行创建网络 docker network create traefik
networks:
traefik:
external: true
services:
traefik:
container_name: traefik
image: traefik:latest
restart: always
command:
# 声明需要入口点的端口,在之后部署新的应用的时候需要用到
- --entrypoints.http.address=:80
- --entrypoints.https.address=:443
# 声明Docker为提供者
- --providers.docker=true
- --api=true
# 启用http3协议
- --experimental.http3=true
- --entrypoints.https.http3
# 证书信息 这里使用的Cloudflare 如果是其他的提供商,参考https://doc.traefik.io/traefik/https/acme/#providers
- --certificatesresolvers.letsencrypt.acme.email=example@example.com
- --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
- --certificatesresolvers.letsencrypt.acme.dnschallenge=true
- --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare
- --certificatesresolvers.letsencrypt.acme.dnschallenge.delaybeforecheck=0
- --certificatesresolvers.letsencrypt.acme.dnschallenge.resolvers=1.1.1.1:53,1.0.0.1:53
# 配置Cloudflare环境变量,如果是其他的提供商,参考https://doc.traefik.io/traefik/v1.4/configuration/acme/#dnsprovider
environment:
- CLOUDFLARE_EMAIL=example@example.com
- CLOUDFLARE_API_KEY=api key of cloudflare
# 标签 主要用于Traefik配置
labels:
# 配置规则以及强制跳转到https
- traefik.http.routers.to-https.rule=HostRegexp(`{host:.+}`)
- traefik.http.routers.to-https.entrypoints=http
- traefik.http.routers.to-https.middlewares=to-https
# 声明该应用的域名和入口点
- traefik.http.routers.traefik.rule=Host(`traefik.example.com`)
- traefik.http.routers.traefik.entrypoints=https
- traefik.http.routers.traefik.service=api@internal
# 定义是否启用tls,以及使用哪一个证书提供商
- traefik.http.routers.traefik.tls=true
- traefik.http.routers.traefik.tls.certresolver=letsencrypt
- traefik.http.middlewares.to-https.redirectscheme.scheme=https
# 身份认证,用于登录Traefik的,参考https://doc.traefik.io/traefik/middlewares/http/basicauth/#configuration-examples
- traefik.http.routers.traefik.middlewares=auth
- traefik.http.middlewares.auth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/,test2:$$apr1$$d9hr9HBB$$4HxwgUir3HP4EsggP/QNo0
networks:
- traefik
ports:
- 80:80
- 443:443/tcp
# 该协议用于提供http3
- 443:443/udp
volumes:
- $PWD/config/traefik:/etc/traefik
- $PWD/letsencrypt:/letsencrypt
# 用于检索docker容器
- /var/run/docker.sock:/var/run/docker.sock:ro
然后启动该应用
docker compose up -d
之后创建新的应用
version: '3'
services:
wordpress:
image: wordpress
container_name: wordpress
environment:
- TZ=Asia/Shanghai
restart: always
volumes:
- $PWD/html:/var/www/html
labels:
# 定义该应用的域名
- traefik.http.routers.wordpress.rule=Host(`wordpress.example.com`)
# 定义入口点
- traefik.http.routers.wordpress.entrypoints=https
# 定义使用哪一个证书提供商
- traefik.http.routers.wordpress.tls.certresolver=letsencrypt
# 定义流量转发到应用内部的哪一个端口
- traefik.http.services.wordpress.loadbalancer.server.port=80
networks:
- traefik
networks:
traefik:
external: true
之后,你就可以通过 https://wordpress.example.com 进行访问了