Appearance
Sub-Store 终极使用教程 在本地或 Vercel 搭建强大的全自动订阅管理工具
⚡ Answer-First 核心速览
Sub-Store 是一套开源高级订阅管理引擎,允许用户将多个机场订阅聚合为单条动态链接,自动清洗节点名称并输出匹配 Clash、Sing-box、Surge 或 Loon 的原生格式。本地通过 Docker 运行单行容器即可拥有独立隐私服务;云端通过 GitHub 与 Vercel 亦可实现零成本免运维部署。配合内置正则过滤与节点重命名操作流,可以彻底消除节点名称杂乱与高倍率偷跑流量的烦恼。
对于长期使用科学上网工具的资深网民与网络工程师而言,同时持有两到三个不同特性的机场服务是极其普遍的选择。有人用主干专线机场处理日常办公与远程桌面,用大流量便宜机场下载大型游戏与同步网盘,再用具有原生流媒体解锁能力的节点观看 Netflix 与 Disney+。
然而多机场带来的是繁琐的配置噩梦。各个机场给出的节点命名千奇百怪,有的带有冗长的推广网址,有的夹杂着“剩余流量”、“重置日期”等提示性垃圾节点;不同机场的地区命名规范各异,有的写“HK”,有的写“HongKong”,有的写“香港 01”;当需要为 Clash Verge、Mihomo Party 或 Sing-box 编写策略组时,往往需要手工一遍又一遍合并分流。
更为致命的是第三方公共订阅转换服务的安全风险。如果直接把包含自己私密 Token 的订阅链接粘贴到未知的公共转换网站,机场节点信息就存在被第三方缓存或恶意扫描的可能。
为了从根本上掌控订阅管理权,开源社区打造了 Sub-Store 这款强大的订阅处理工具。
为什么选择 Sub-Store 订阅管理架构
Sub-Store 由知名脚本开发者开发,原本作为 Surge 与 Loon 平台的高级订阅管理器,如今已演变为跨平台独立运作的完整中间件。
text
+--------------------------------------------------------------------------+
| 多机场订阅混乱流转现状 |
+--------------------------------------------------------------------------+
机场 A (专线) ──> [HK-01-专线, US-02, 官网: abc.com] ──┐
机场 B (直连) ──> [HongKong-BGP, 流量剩余 50G, JP] ──┼──> 客户端混合载入
机场 C (流媒体) ──> [🇭🇰 香港原生解锁, 5x 倍率节点] ──┘ (策略混乱/误用高倍率)
+--------------------------------------------------------------------------+
| Sub-Store 规范化聚合与治理流转 |
+--------------------------------------------------------------------------+
机场 A 订阅 ──┐
机场 B 订阅 ──┼──> [ Sub-Store 核心引擎 ] ──> 规则过滤 (剔除官网/高倍率)
机场 C 订阅 ──┘ | ──> 正则重命名与 Emoji 补齐
| ──> 智能聚合与排序
v
输出单一原生干净订阅链接
(自动适配 Clash / Sing-box / Surge)Sub-Store 在整个网络链路中扮演着类似 API 网关与 ETL(抽取、转换、加载)管道的角色。它直接拉取上游各个机场的原始节点,在内存中进行清洗、重排、筛选与重构,最终向下游客户端提供符合标准的洁净配置。
使用 Sub-Store 带来的核心价值体现在以下维度。
- 保护隐私安全。订阅处理完全在本地或属于自己的私有云实例中完成,任何第三方都无法截获您的订阅密钥。
- 跨平台原生适配。同一个聚合集合,向 Clash 请求时输出 YAML 节点,向 Sing-box 请求时输出 JSON 格式,向 Surge 请求时输出标准文本,彻底省去格式转换烦恼。
- 自动化生命周期运维。当某个机场调整了节点服务器 IP 或新增了节点,Sub-Store 后台定时同步,客户端无需手动重复导入。
典型订阅管理痛点与 Sub-Store 解决方案大表
下表总结了出海用户在订阅管理环节最常遭遇的十项痛点与 Sub-Store 对应的治理方案。
| 痛点场景 | 传统手工操作的弊端 | 潜在后果 | Sub-Store 针对性解决方案 |
|---|---|---|---|
| 节点名称杂乱无序 | 各机场命名风格迥异且缺少国家标识 | 在长列表里查找特定地区节点极其吃力 | 使用内置正则操作流自动提取国家并补齐旗帜 Emoji |
| 推广与垃圾节点刷屏 | 机场强行塞入官网公告和测速节点 | 占用客户端空间且误选会导致直接断网 | 配置正则排除规则一键过滤包含“官网”或“剩余”的条目 |
| 高倍率节点误用消耗 | 某些节点标有 3x 或 5x 甚至 10x 计费 | 在看 4K 视频时不慎选中,几小时内耗光当月流量 | 设定数值过滤器,自动剔除倍率大于指定阈值的节点 |
| 节点协议与内核不符 | 订阅内混杂了旧客户端不支持的新协议 | 导致客户端解析配置失败或启动内核报错 | 配置协议白名单,只保留本地客户端能解析的协议类型 |
| 多机场流量无法统筹 | 多个客户端订阅各自独立存在 | 无法在同一个代理组内实现跨机场自动故障转移 | 将多源订阅绑定到同一个集合中生成统合订阅 |
| 第三方转换隐私泄露 | 将订阅粘贴到不明来源的公共转换网站 | 订阅 Token 被机房嗅探或节点被盗用刷流量 | 私有化部署 Sub-Store,数据完全由自己掌控 |
| 落地节点按需排序 | 机场默认按线路编号排序,好节点沉底 | 每次都需要手动拖动选择延迟最低的优质节点 | 内置排序算子,按国家、倍率或自定关键字智能排序 |
| 客户端格式碎片化 | 切换设备需要到处找不同的转换链接 | 手机端与桌面端难以共享同一套精细规则 | 单一订阅通过 URL 参数自适应返回各类客户端配置 |
| 无法便捷注入自定义节点 | 自己搭建的 VPS 节点需要手工一条条手填 | 每次重装系统或换设备都需要重新翻找节点密钥 | 在 Sub-Store 单节点库维护,自动合并进机场总池 |
| 节点离线死活不知 | 某些节点长时间失联但依旧停留在列表 | 自动测速轮询浪费系统资源并增加握手开销 | 配合定期节点健康探测与筛选机制过滤无效节点 |
本地 Docker 与 Docker Compose 部署实战
对于拥有本地软路由、NAS(群晖/威联通/Unraid)或者常开 Windows/Linux 主机的用户,采用 Docker 部署是最推荐的方案。容器化部署环境隔离彻底,升级方便,数据完全留存在本地硬盘。
1. 单行 Docker 命令极速启动
打开终端或 SSH 窗口,执行以下命令即可启动 Sub-Store 官方镜像。
bash
docker run -d \
--name sub-store \
--restart always \
-p 3001:3001 \
-v /var/data/sub-store:/opt/app/data \
-e SUB_STORE_BACKEND_API_HOST=0.0.0.0 \
xream/sub-store参数含义说明。
-d让容器在后台持续运行。--name sub-store指定容器名称。--restart always确保宿主机重启后容器自动拉起。-p 3001:3001将宿主机的3001端口映射到容器内部的3001Web 访问端口。-v /var/data/sub-store:/opt/app/data将持久化数据目录挂载到宿主机,确保容器销毁重建时配置不丢失。在 Windows 宿主机上可以写为-v C:\docker_data\sub-store:/opt/app/data。
2. 使用 Docker Compose 规范化编排
在生产运维环境中,使用 Compose 文件便于版本追踪与多服务联动。创建文件 docker-compose.yml,写入以下规范内容。
yaml
version: '3.8'
services:
sub-store:
image: xream/sub-store:latest
container_name: sub-store
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- ./data:/opt/app/data
environment:
- SUB_STORE_BACKEND_API_HOST=0.0.0.0
- SUB_STORE_FRONTEND_BACKEND_PATH=/在保存该文件的目录下执行以下指令拉起服务。
bash
docker compose up -d启动完成后,打开浏览器访问 http://127.0.0.1:3001 即可直接看到 Sub-Store 清爽现代的图形化管理界面。
3. 本地 Node.js 与 PM2 守护进程部署
如果不希望安装庞大的 Docker 运行环境,也可以直接在系统上使用 Node.js 运行。Sub-Store 官方发布了 NPM 全局包。
在安装有 Node.js 18 或更高版本的操作系统中,打开终端依次运行以下指令。
bash
# 全局安装 sub-store 核心与前端套件
npm install -g @sub-store/core @sub-store/frontend
# 安装 PM2 进程守护工具
npm install -g pm2
# 使用 PM2 以后台守护进程形式拉起服务
pm2 start sub-store --name "sub-store" -- -p 3001
# 设置 PM2 开机自动拉起
pm2 startup
pm2 save通过 PM2 管理的 Node.js 进程即使遇到异常崩溃,也会在毫秒级内自动拉起恢复,且系统内存开销通常低于 100MB,非常适合低配置的小型轻量服务器。
云端免服务器 Vercel 一键托管部署实战
如果没有全天候开机的本地设备,或者希望在全球任何网络环境下都能随时调用自己的订阅处理中心,利用 Vercel 与 GitHub 提供的免费云函数托管是绝佳选择。
text
+---------------------+ +-----------------------+ +----------------------+
| GitHub 私有仓库 | ──> | Vercel 云函数平台 | ──> | 全球 CDN 边缘节点 |
| (存放部署分支代码) | | (全自动 CI/CD 构建) | | (提供高可用 HTTPS API) |
+---------------------+ +-----------------------+ +----------------------+
|
v
客户端直接拉取订阅
https://my-sub.vercel.app/download/...1. 准备代码仓库
- 登录 GitHub 账号,访问 Sub-Store 官方提供的 Vercel 部署模版仓库。
- 点击右上角 Fork 按钮,将仓库复制到自己的账号下。建议将仓库属性设为 Private(私有),防止配置意外公开。
2. 绑定 Vercel 自动化构建
- 登录 Vercel 官网(支持使用 GitHub 账号一键授权登录)。
- 在 Dashboard 首页点击 Add New...,选择 Project。
- 在 Import Git Repository 列表中找到刚才 Fork 的私有仓库,点击 Import。
- 在项目配置页面中,展开 Environment Variables(环境变量) 选项。
- 添加以下两个核心环境变量。
SUB_STORE_FRONTEND_BACKEND_PATH设置为/SUB_STORE_BACKEND_API_HOST设置为0.0.0.0
- 点击页面底部的 Deploy 按钮。
- 等待约 1 到 2 分钟,Vercel 就会构建完毕,并分配一个类似
https://your-project.vercel.app的全球专属 HTTPS 访问域名。
访问该域名即可进入管理后台。由于 Vercel 云函数属于无服务器(Serverless)架构,如果担心默认域名被部分地区 DNS 污染,可以在 Vercel 项目后台的 Settings -> Domains 中绑定一个属于自己的二级域名。
多机场订阅自动聚合实战操作
部署好后台后,接下来进入最核心的订阅聚合与治理配置阶段。整个操作逻辑分为三个层次,即添加单订阅(Subscriptions)、配置节点处理规则(Operator)、生成聚合集合(Collections)。
text
[ 单订阅源管理 (Subscriptions) ]
├── 订阅 A (专线机场)
├── 订阅 B (备用直连)
└── 自建节点池 (VPS 手工节点)
│
v
[ 节点算子流水线 (Process Flows) ]
├── 正则过滤: 剔除官网/剩余流量/测速
├── 正则重命名: 统一地区名称
├── 注入 Emoji: 🇨🇳 🇭🇰 🇯🇵 🇺🇸 🇸🇬
└── 排除倍率: 倍率 > 2.0 丢弃
│
v
[ 聚合集合 (Collections) ]
└── 组合订阅 A + 订阅 B
│
v
[ 外部调用链接 (Export Link) ]
└── https://sub.mydomain.com/download/MyAggregate?target=Clash1. 添加原始订阅源
- 点击左侧导航栏的 Subscriptions(订阅) 图标。
- 点击右上角浮动加号新建订阅。
- 在弹出窗口中配置基本信息。
- Name(名称) 填写一个便于辨认的标签,如
Airport-Main。 - URL(链接) 粘贴机场服务商提供给您的原始订阅链接。
- Type(类型) 默认保持 Auto 自动识别即可。
- Name(名称) 填写一个便于辨认的标签,如
- 点击保存。Sub-Store 会立即在后台异步发起抓取,几秒钟后卡片上就会显示该订阅解析出的节点总数。
- 按照相同步骤,依次将您持有的其他机场订阅逐一录入。
2. 创建聚合集合
当所有单源订阅都添加完毕后,进入 Collections(集合) 页面。
- 点击右上角加号新建集合,命名为
My-Global-Proxy。 - 在 Subscriptions(包含的订阅) 勾选框中,勾选前面录入的机场 A 与机场 B。
- 此时该集合已经把两家机场的所有节点汇聚在了一起。如果此时直接输出,节点依然是原汁原味的杂乱格式。接下来需要在集合上挂接节点处理流(Process Flow)。
正则表达式深度清洗节点名称与国家 Emoji 自动补齐
这是 Sub-Store 最令人惊艳的功能。通过内置的 JavaScript 正则引擎与算子逻辑,可以像编写代码一样对节点属性进行精雕细琢。
1. 过滤垃圾节点与通告信息
机场往往会在订阅最上方放置几个无法连接的节点,用来展示官网地址或剩余流量。这些节点在日常使用中没有任何价值,还会干扰自动测速。
在集合设置中找到 Process Node List(处理节点列表),点击添加一个 Filter(过滤器) 算子。
选择 Regex(正则表达式) 模式,设置匹配目标为 name,勾选 Discard matched(丢弃匹配项),填入以下正则表达式。
regex
(官网|公告|到期|剩余|重置|群组|通知|流量|套餐|测试|Traffic|Expire|Website)保存后,任何包含上述中文或英文字眼的提示节点都会在下发客户端之前被彻底剔除。
2. 规范化重命名与旗帜 Emoji 补齐
很多机场的地区命名极其随意,例如有的是 [0.5x] HK 01 香港机房,有的是 HongKong-Direct-1。我们希望把它们统一清洗为整齐划一的格式,如 🇭🇰 香港 01、🇯🇵 日本 02。
在处理流中添加一个 Script(脚本) 算子,或者使用内置的 Rename(重命名) 算子。
这里推荐使用 Sub-Store 社区广泛经过实战验证的地区识别与旗帜补齐重命名正则。添加一个 Rename 算子,采用正则查找与替换(Search & Replace)模式。
香港节点规范化
- 查找正则。regex
.*(香港|HK|Hong\s*Kong).*?(\d+).* - 替换内容。text
🇭🇰 香港 $2
日本节点规范化
- 查找正则。regex
.*(日本|JP|Japan|东京|大阪).*?(\d+).* - 替换内容。text
🇯🇵 日本 $2
美国节点规范化
- 查找正则。regex
.*(美国|US|United\s*States|洛杉矶|圣何塞).*?(\d+).* - 替换内容。text
🇺🇸 美国 $2
新加坡节点规范化
- 查找正则。regex
.*(新加坡|SG|Singapore|狮城).*?(\d+).* - 替换内容。text
🇸🇬 新加坡 $2
经过这套重命名流水线的冲刷,原本杂乱无章、排版扭曲的节点列表瞬间变得整齐优美,所有国家旗帜一目了然。
节点高级过滤与策略组定制生产
除了处理文字,Sub-Store 还能够深入节点内部结构,对网络协议和连接参数进行条件判断。
text
[ 原始节点数据对象 ]
│
├── 字段: name = "🇭🇰 香港 01"
├── 字段: type = "vmess"
├── 字段: server = "1.2.3.4"
├── 字段: port = 443
└── 字段: node_cost = 1.0 (倍率)
│
v
[ 条件判定算子 (Condition Match) ]
│
├── 规则 1: type in ["vmess", "trojan", "hysteria2"] -> 保留
├── 规则 2: type == "shadowsocks" 且 cipher == "rc4-md5" -> 剔除不安全旧协议
└── 规则 3: node_cost > 2.0 -> 剔除偷跑流量高倍率节点1. 过滤高倍率偷跑节点
某些机场为了控制国际带宽成本,会部署 3 倍率甚至 5 倍率的节点。如果在不知情的情况下挂着该节点下载大文件,当月流量瞬间就会耗尽。
在集合的处理节点流中,添加一个 Filter(过滤器) 算子。选择自定义脚本模式,粘贴以下简易 JavaScript 判定逻辑。
javascript
function operator(proxies) {
return proxies.filter(p => {
// 检查节点名称中是否带有倍率标识
const rateMatch = p.name.match(/(\d+(\.\d+)?)x/i);
if (rateMatch) {
const rate = parseFloat(rateMatch[1]);
// 如果倍率大于 1.5 倍,则丢弃该节点
if (rate > 1.5) {
return false;
}
}
return true;
});
}这段脚本会自动读取节点名称中类似 2x、3.5x 的倍率标签。凡是倍率超出设定阈值的节点,都会被无情剔除,守护您的月度流量配额。
2. 输出与各客户端生态挂接
处理完成的聚合集合,如何导入到手机或电脑客户端中使用。
在 Collections 页面中,找到刚才创建的 My-Global-Proxy,点击卡片右上角的分享或下载图标。
Sub-Store 会生成一条专属订阅链接,形式如下。
text
http://127.0.0.1:3001/download/My-Global-ProxySub-Store 拥有极高的智能性,它会根据 HTTP 请求头中的 User-Agent 自动识别访问客户端。
- 如果是 Clash Verge 发起请求,它自动返回经过 YAML 序列化的代理列表。
- 如果是 Sing-box 发起请求,它自动输出严格符合 Sing-box 1.9+ 规范的 Outbound JSON 数组。
- 如果需要在 URL 中强制指定输出格式,只需在链接末尾追加
target参数即可。
常用参数范例。
- 强制输出 Clash / Mihomo 格式。
http://127.0.0.1:3001/download/My-Global-Proxy?target=Clash - 强制输出 Sing-box 格式。
http://127.0.0.1:3001/download/My-Global-Proxy?target=Sing-Box - 强制输出 Surge 节点列表。
http://127.0.0.1:3001/download/My-Global-Proxy?target=Surge
把这根专属动态链接直接填入您最喜爱的出海客户端中,即可享受全自动、高洁净的代理网络体验。
安全加固与防盗链保护
如果将 Sub-Store 部署在具有公网 IP 的云服务器或 Vercel 上,安全防护是必须严肃对待的头等大事。如果缺少访问限制,任何人只要探测到您的 API 路径,就可以拉取您所有的机场节点,导致流量失窃与敏感信息泄露。
1. 注入访问安全 Token
Sub-Store 官方原生支持通过环境变量开启 API 与访问鉴权。
在 Docker Compose 或 Vercel 环境变量中,增加以下配置项。
text
SUB_STORE_API_TOKEN=MySecretComplexPassword9876开启该变量后,管理后台的任何读写操作,以及订阅链接的下载,都必须附带该 Token。
下发给客户端的订阅链接需要调整为。
text
http://your-domain.com/download/My-Global-Proxy?token=MySecretComplexPassword9876没有携带正确 Token 的请求会被服务器当场阻断并返回 401 Unauthorized 状态码。
2. 避免使用明文 HTTP 传输
在公网环境下传输订阅信息时,强烈建议配置 Nginx 反向代理并申请 Let's Encrypt SSL 证书,全程强制启用 HTTPS 加密。HTTPS 可以有效防御中间路由节点的明文嗅探,确保您的机场密钥在出境传输过程中保持高度密态。
常见故障排查与 FAQ 问答
在搭建和使用 Sub-Store 时,用户经常会提出以下疑难问题。
1. 为什么点击下载订阅提示 404 Not Found 或返回空列表?
出现该问题通常有以下三种原因。
- 原始机场订阅抓取失败。请在 Subscriptions 列表中检查单源订阅的状态,观察节点数量是否大于 0。某些机场可能开启了 Cloudflare 防爬验证,需要调整请求头。
- 集合名称拼写错误。下载路径中的集合名称必须与后台创建的名字完全一致,注意区分大小写。
- 处理流过滤规则过严。如果写错了正则模式,可能会导致所有节点都被误判并丢弃。可以在集合设置中逐一关闭算子进行二分法排查。
2. Vercel 部署的版本更新订阅时频繁提示 Function Execution Timeout?
Vercel 免费版(Hobby 计划)对 Serverless 云函数的单次执行时长限制通常为 10 秒。
如果您的集合中包含了十几个机场订阅,或者某些机场服务器网络响应缓慢,云函数在向所有机场请求节点时就会超过 10 秒被系统强制掐断。
针对该情况的优化手段。
- 减少同一个集合中关联的单源订阅数量。
- 在 Vercel 项目配置的
vercel.json中配置函数超时时间上限(最大可延展至 60 秒)。 - 迁移至本地 Docker 或 Linux 云主机常驻部署,彻底解除云函数超时限制。
3. 如何在不同设备间同步 Sub-Store 的配置?
Sub-Store 的所有配置均保存在数据存储中。
- 对于 Docker 部署,所有设置都存放在挂载的宿主机
/opt/app/data目录下的 SQLite 数据库或 JSON 文件中。只要定期备份该目录,迁移设备时将数据卷拷贝过去即可。 - 对于 Vercel 部署,官方支持接入 GitHub 私有仓库分支作为持久化后端。在环境变量中配置
SUB_STORE_BACKEND_SYNC_CRON与 GitHub Personal Access Token,所有的配置修改都会自动推送到您的私有 GitHub 仓库形成历史版本。
4. 客户端设置定时更新后,原节点名称又变乱了是怎么回事?
请检查客户端导入的链接是否为 Sub-Store 导出的聚合集合链接。如果客户端不慎重新导入了机场原始的直接链接,清洗规则自然不会起效。确保客户端仅保留一条由 Sub-Store 生产的专属链接,并在客户端中设置每日或每小时自动同步。
