Subconverter自建教程:Docker部署私有订阅转换,不再把节点配置喂给公共网站
先说依据
这篇依据 tindy2013/subconverter 官方仓库的 README 和 README-docker.md(2026-10-18 读取)。Docker 部署步骤没有在真机上逐条实测运行,以官方文档为准。
Subconverter是什么
Subconverter 是订阅格式转换工具:把各种代理订阅(ss、ssr、ssd、V2Ray、Clash、Quantumult 等)转换成目标客户端要的配置格式。支持的目标格式很多:clash、clashr、surge(2/3/4)、quan、quanx、loon、surfboard、ss、ssr、v2ray 等。
为什么要自建
网上有很多公共的 subconverter 转换网站,粘贴订阅链接就能转。但问题很直接:你的订阅链接里是全部节点的地址、端口、密码,用公共网站转换,等于把整套节点配置明文喂给一个陌生服务器。自建之后,转换只发生在你自己的机器上——可以在本地电脑跑,也可以在自己的 VPS 上跑。
Docker部署
官方给了最简的运行方式(需要机器上装好 Docker):
1 | # 后台运行,把容器内25500端口映射到宿主机25500 |
看到返回 subconverter vx.x.x backend 就说明跑起来了。
用 docker-compose 的话,官方示例:
1 | version: '3' |
安全提醒
官方镜像默认没有鉴权,任何人访问到 25500 端口就能用你的转换服务(还能顺手看到你传的订阅)。所以:
- 只给自己用:映射到
127.0.0.1:25500(-p 127.0.0.1:25500:25500),不要暴露到公网; - 放 VPS 上给多台设备用:前面加 Nginx 反向代理并做好访问控制(IP 白名单或 basic auth),不要裸奔。
怎么用:/sub 接口
转换接口格式(官方 README 原样):
1 | http://127.0.0.1:25500/sub?target=%TARGET%&url=%URL%&config=%CONFIG% |
| 参数 | 必填 | 说明 |
|---|---|---|
| target | 是 | 目标格式,取值看上表(如 clash、surge&ver=4、quanx) |
| url | 是 | 要转换的订阅链接,先做 URL 编码 |
| config | 否 | 外部配置文件 URL(自定义分组、规则),先做 URL 编码 |
举例:把一个订阅转成 Clash 配置,就访问
1 | http://127.0.0.1:25500/sub?target=clash&url=<URL编码后的订阅链接> |
把这条链接填进 Clash 的订阅地址就行。
多个订阅合并
多个订阅先用 | 拼起来,再整体做 URL 编码(官方 README 的原话):
1 | https://aaa.com/sub?x=1|https://bbb.com/sub?y=2 |
编码后再填进 url 参数,一次转成一份合并后的配置。
进阶:自定义分组和规则
默认的分组规则是官方自带的,想自己定义(比如按地区/用途分组、加自己的分流规则),两种方式:
- 传 config 参数:把写好的 ini 配置文件放网上(或本地路径),
config参数指向它。示例可以看官方仓库 tindy2013/subconverter 里base目录的pref.example.ini(原来常被引用的subconverteriniexample示例仓库已经下线)。 - 替换容器内配置:按官方 Dockerfile 写法,把自己的
pref.ini、规则文件放进replacements/目录,构建自己的镜像:
1 | FROM tindy2013/subconverter:latest |
1 | docker build -t subconverter-custom:latest . |
容器内配置在 /base/ 目录,结构和仓库里的 base/ 文件夹一致。改完配置后可以用官方接口热更新:
1 | curl -F "data=@newpref.ini" "http://localhost:25500/updateconf?type=form&token=<redacted>" |
token 在配置文件里改(官方 README 提醒过要改默认 token)。
和公共转换网站的对比
| 公共转换网站 | 自建 | |
|---|---|---|
| 隐私 | 订阅明文经过第三方 | 只在自己机器上 |
| 可用性 | 看站长心情,可能挂 | 自己维护 |
| 自定义规则 | 一般固定 | 随便改 |
| 成本 | 免费 | 一台能跑 Docker 的机器 |
注意事项
- 镜像默认无鉴权,不要把 25500 直接暴露到公网;
target的取值以官方 README 的 Supported Types 表为准,不同版本可能增减;- 以上部署命令来自官方文档,未在真机逐条验证,跑起来后先用
curl http://localhost:25500/version确认,再配订阅。