特别注意※
2023年9月19日更新了Traefik.yml的代码,增加申请证书的自定义DNS,解决因DNS污染导致申请证书失败的问题!!!
2023年5月27日更新了代码,修复了http跳转https的问题
2023年4月24日更新了代码,证书在正常情况下两分钟之内就会出来(10分钟内还不行的话就是配置有问题了)
修改配置文件※
按需修改traefik.yml、dynamic_conf.yml,其中的xxxx就是需要改的地方,一定要用编辑器改,记事本改了可能导致格式错乱,推荐VS Code
复制三个文件到指定的docker路径※
/xxxxxx/docker/traefik/
acme.json、traefik.yml、dynamic_conf.yml
修改 acme.json 权限为600(这步必须做,不然申请证书会报错)
命令 chmod 600 /xxxxxx/docker/traefik/acme.json
部署命令※
命令部署(腾讯云dnspod示例)
docker run -d --name=traefik --net=host --restart always -e TZ=Asia/Shanghai -v /xxxxxx/docker/traefik:/etc/traefik:rw -v /var/run/docker.sock:/var/run/docker.sock:rw -e DNSPOD_API_KEY=APPID,密钥 -e DNSPOD_HTTP_TIMEOUT=30 traefik:latest
堆栈部署(按需改运营商)
version: '3.3'
services:
traefik:
container_name: traefik
network_mode: host
restart: always
environment:
- TZ=Asia/Shanghai
- DNSPOD_API_KEY=APPID,密钥 #腾讯云
- DNSPOD_HTTP_TIMEOUT=30 #腾讯云
- CF_API_EMAIL=CF邮箱 #CF
- CF_API_KEY=key #CF
- ALICLOUD_ACCESS_KEY=没见过 #阿里云
- ALICLOUD_SECRET_KEY=没见过 #阿里云
- ALICLOUD_REGION_ID=没见过 #阿里云
volumes:
- '/xxxxxx/docker/traefik:/etc/traefik:rw'
- '/var/run/docker.sock:/var/run/docker.sock:rw'
image: 'traefik:latest'
DNSPOD自动申请证书参数DNSPOD_API_KEY=xxxxxx,xxxxxxxxxxxxxxx(由dnspod的appid和token构成,注意英文逗号隔开)超时时间 DNSPOD_HTTP_TIMEOUT=30
阿里云REGION_ID对照表※
新加反代※
修改dynamic_conf.yml即可,保存后自动反代,无需重启容器(会有延迟,等不了的就手动重启),如有报错则重启容器
配置文件※
# traefik.yml配置
entryPoints:
websecure:
address: ":8433" #只需改这里的端口号,随便你喜欢,改完记得路由器映射出去
http:
redirections:
entryPoint:
to: websecure
scheme: https
permanent: true
priority: 10
serversTransport:
insecureSkipVerify: true
providers:
docker:
defaultRule: Host(`{{normalize .Name }}.xxxxxxx.com`) #只需改这里的根域名
exposedbydefault: false
file:
filename: "/etc/traefik/dynamic_conf.yml"
certificatesresolvers:
LetsEncrypt:
acme:
email: xxxxxxx@qq.com #只需改这里的邮箱(腾讯云、阿里云、CF)
storage: /etc/traefik/acme.json
dnschallenge:
provider: dnspod #域名解析运营商
delayBeforeCheck: 30
resolvers:
- "1.1.1.1:53"
- "8.8.8.8:53"
# 常用域名解析运营商对照
# 腾讯云 dnspod
# 阿里云 alidns
# CF cloudflare
# dynamic_conf.yml配置
http:
routers:
plex: #随便你写啥
entryPoints:
- websecure
service: plex #随便你写啥,但要跟下面的一致
rule: "Host(`plex.xxxxxxxx.com`)" #只需改这里的二级域名
tls:
certResolver: LetsEncrypt
domains:
- main: "xxxxxxx.com" #只需改这里的根域名
sans: "*.xxxxxxx.com" #只需改这里的根域名
emby:
entryPoints:
- websecure
service: emby
rule: "Host(`emby.xxxxxx.com`)"
tls: true
nav:
entryPoints:
- websecure
service: nav
rule: "Host(`nav.xxxxxx.com`)"
tls: true
################## 华丽的分割线 ##################
services:
plex: #随便你写啥,但要跟上面的一致
loadBalancer:
servers:
- url: "http://127.0.0.1:32400"
emby:
loadBalancer:
servers:
- url: "http://10.0.0.5:12345"
nav:
loadBalancer:
servers:
- url: "http://10.0.0.5:12345"
官方文档※
其他dns服务商参考官网文档去改docker部署命令及静态文件traefik.yml里申请证书的部分即可
Traefik Let's Encrypt Documentation - Traefik
进阶※
想让windows远程桌面和https共用同一个端口吗? Come on!So esay!
只需把下面的代码复制到dynamic_conf.yml最下面即可,记得改成你的ip和端口哦
注意:这样会极大增加被黑客扫描风险,慎用!!!还会导致http无法自动跳转到https,自行取舍吧
tcp:
routers:
remote:
entryPoints:
- websecure
service: nas
rule: "HostSNI(`*`)"
services:
nas:
loadBalancer:
servers:
- address: "10.0.0.5:3389" #只需要改成你的windows的ip和端口
Tip※
直接输入plex.example.com:8433就会跳转到https://plex.example.com:8433
后续补充※
2023年5月23日:实测在unraid系统下首次申请证书大概率出现申请不到的问题,如果超过3分钟acme的文件大小大于0kb且小于8kb的话(方便判定)则申请证书失败,此时重启Traefik容器后再去观察acme文件大小,超过12kb应该就是正常的了,再访问https查看是否已经正常工作。
参考原文※
https://alanoo.notion.site/Traefik-docker-61fa53bde5554e858b5a2095ddbd8e9d