traefik配置,以OpenWRT为例
traefik是一个类似于nginx和caddy的应用网关服务器,拥有动态配置和内置面板。
可以在同一个端口下分发不同的服务,例如emby、AList和qBitTorrent使用相同端口,根据域名规则区分。
OP端口放行
建立目录
mkdir -p /opt/bin /etc/traefik/dynamic /var/log/traefik
https://github.com/traefik/traefik/releases
下载对应架构的版本然后放入/opt/bin/
创建OpenWRT的服务单元
服务单元的路径:/etc/init.d/traefik
,必须配置CloudFlare的Token,用于ACME自动申请证书。
DNS Provider Token只能以环境变量的方式传递,不支持在文件中配置。
#!/bin/sh /etc/rc.common
START=99
STOP=10
USE_PROCD=1
PROG=/opt/bin/traefik
CONFIG=/etc/traefik/traefik.yml
start_service() {
procd_open_instance
procd_set_param command "$PROG" --configfile="$CONFIG"
procd_set_param env CF_DNS_API_TOKEN="填写CloudFlare Token"
procd_set_param respawn
procd_set_param limits core="unlimited"
procd_set_param stdout 1
procd_set_param stderr 1
procd_close_instance
}
stop_service() {
service_stop "$PROG"
}
reload_service() {
stop
start
}
traefik主配置(静态配置)
注意:入口点、证书处理器和动态配置的目录只能在主配置中声明。
/etc/traefik/traefik.toml
[entryPoints] #入口点,也就是监听地址
[entryPoints.lan]
address = "192.168.1.1:8080" #只设置监听局域网地址8080端口
[entryPoints.wan] #监听所有地址的5000
address = ":5000"
[providers.file] #动态配置目录,会自动从这个目录下热重载配置
directory = "/etc/traefik/dynamic"
[api] #启用面板
dashboard = true
[log] #程序启动日志
level = "INFO"
filePath = "/var/log/traefik/traefik.log"
[accessLog] #访问日志
filePath = "/var/log/traefik/access.log"
[certificatesResolvers.example-cert.acme] # 定义名称为kkcf的acme证书处理器
storage = "/etc/traefik/acme.json"
email = "" #设置邮箱
[certificatesResolvers.example-cert.acme.dnsChallenge] #使用dns方式完成证书申请,只有这种方式可以获得通配符证书
provider = "cloudflare" #使用CloudFlare的API
delayBeforeCheck = 0
AList配置示例
/etc/traefik/dynamic/alist.toml
[http.services.alist] #声明alist服务
[http.services.alist.loadBalancer]
[[http.services.alist.loadBalancer.servers]]
url = "http://127.0.0.1:5244/" #转发的地址
[http.routers.dav] #声明一个名称为dav的路由
rule = "Host(`example.site`)" #根据域名控制访问
service = "alist" #指向alist服务
[http.routers.dav.tls] #启用TLS,也就是HTTPS
certResolver = "example-cert" #使用主配置中定义的kkcf证书申请器
[[http.routers.dav.tls.domains]] #使用通配符证书,固定写法,不重要
main = "example.site" #主域名
sans = ["*.example.site"] #通配符
内置面板配置示例
/etc/traefik/dynamic/dashboard.toml
面板服务不需要定义,程序内置。
下面的配置可以通过 http://192.168.1.1:8080 访问面板。 用户名:admin 密码:MvU*3X&GY4Fi
[http.routers.dashboard]
rule = "PathPrefix(`/api`) || PathPrefix(`/dashboard`)"
entryPoints = ["lan"] #只监听在局域网地址
service = "api@internal" #面板为内置服务,使用api@internal引用
middlewares = ["auth"] #使用验证
[http.middlewares.auth.basicAuth] #使用HTTP基本用户名和密码
users = ["admin:$apr1$NTL4Yolz$972.cz0xsjTRv8bUzCSre."]
#上面的密码是摘要过的,对应的真正密码是password,可以使用在线工具或者命令行htpasswd生成
emby配置示例
/etc/traefik/dynamic/emby.toml
[http.services.emby] #声明emby服务
[[http.services.emby.loadBalancer.servers]]
url = "http://192.168.1.66:6666/" #指向NAS的emby端口
[http.routers.tv] #声明名称为tv的路由
rule = "Host(`tv.example.site`)" #仅允许tv.example.site域名访问
service = "emby" #指向emby服务
[http.routers.tv.tls] #HTTPS
certResolver = "example-cert"
[[http.routers.tv.tls.domains]]
main = "example.site"
sans = ["*.example.site"]
启动
service traefik start
service traefik enable #开机自启