Config
首先, 我们需要一个配置文件 thurgio.yaml。setting 顶级节包含服务器设置。
tokens
API 令牌,按作用域分组。至少配置一个令牌(否则校验失败)。
setting:
tokens:
admin:
- "admin-token" # Admin 作用域:可访问全部 /app/ 端点
- "${THURGIO_ADMIN_TOKEN}" # 环境变量引用(可选)
read:
- "read-token" # Read 作用域:仅可访问只读渲染端点
令牌通过 ?token= 查询参数或 Authorization: Bearer 请求头传递。
环境变量引用
token 值可写成 ${NAME} 形式,解析期从进程环境读取并替换(自托管免明文存 token)。仅当整个值恰好为 ${NAME} 时展开(如 prefix-${NAME}、${NAME}suffix 均保留字面);引用的环境变量未定义时配置解析报错。仅 token 值支持展开,其余配置字段不展开。
address
服务监听地址,默认 0.0.0.0。serve 启动时可用 -a/--address 或 ADDRESS 环境变量覆盖。
port
服务监听端口,默认 10100。serve 启动时可用 -p/--port 或 PORT 环境变量覆盖。端口为 0 时使用随机端口。
udp
对于节点的 udp 字段处理逻辑。
None: 不处理False: 设为 falseTry: 如果代理类型支持 udp 则启用(默认)True: 设为 true
mode
emoji 模式(全局)。
Disable: 不添加 emoji 前缀Enable: 检测到国家/地区时添加旗帜 emoji 前缀(默认)Hide: 去除代理名称中已有的 emoji 前缀
output
渲染结果的默认输出路径,按渲染目标 + 模板名分组(键为 provider/snippet,每个桶内再按模板名映射到目录列表):
setting:
output:
provider:
"clash/base.tpl":
- "prod/list/"
snippet:
"rule.tpl":
- "prod/rules/"
item 默认输出写入 {dir}/{key}.{ext}(key = item 名,ext 来自 ext 字段或参数 p.ext),目录取 item 自己 target 桶 + 自己模板名对应条目;未配置则无默认输出。
旧版的扁平目录列表写法(如
provider: ["prod/"])已不再支持,解析会直接报错(ADR-080)。
ttl
缓存有效期(秒)。
provider: 最小60,默认600(10 分钟)snippet: 最小300,默认86400(24 小时)
缓存未过期时不会重新获取。
concurrency_limit
并发任务限制(渲染/持久化等任务的并发数),最小 1,默认 10。可用环境变量 THURGIO_CONCURRENCY_LIMIT 覆盖。更新管道的抓取阶段为无界并发(每个 item 同时启动,ADR-073),不受此限制约束。
cors_origins
允许的 CORS 来源列表,默认 ["*"]。生产环境建议限制为具体域名;来源列表每请求从 live config 读取,配置热重载后立即生效。
adhoc
临时 provider/snippet(/app/admin/adhoc 端点)的默认行为:
setting:
adhoc:
tpl:
provider: "tpls/adhoc_nodelist.tpl" # 临时 provider 缺省模板
snippet: "tpls/adhoc_snippet.tpl" # 临时 snippet 缺省模板
max_items: 100 # 数量上限,超出淘汰最旧创建者
ttl_seconds: 86400 # 清理 TTL:自最后访问起算(秒)
| 字段 | 默认值 | 说明 |
|---|---|---|
tpl.provider / tpl.snippet | 无 | 请求未传 tpl 参数时的回退模板;两者都缺且请求也未指定时 → 400 |
max_items | 100 | 临时资源数量上限(内存与 DB 一致清理) |
ttl_seconds | 86400 | 滑动 TTL——自最后访问时间起算 |
example
thurgio.yaml
setting:
tokens:
admin:
- token
# address: 0.0.0.0 # $ADDRESS
# port: 10100 # $PORT
# udp: Try
# mode: Enable
# output:
# provider:
# "base.tpl":
# - output/example.yaml
# ttl:
# provider: 600
# snippet: 86400
# concurrency_limit: 10
# cors_origins:
# - "*"