一个部署在 Cloudflare Workers 上的订阅聚合与规则配置工具。它把订阅源、节点处理、组合订阅和分流规则模板放在云端,客户端只需要订阅最终生成的链接。
English: README.en.md
点上面的 Deploy to Cloudflare 按钮。Cloudflare 会把仓库复制到你的 GitHub/GitLab 账号,自动创建 Worker、D1 数据库并部署。
部署页会要求填写两个 secret:
SUB_STORE_ADMIN_TOKEN:管理界面和/api/*token。SUB_STORE_PUBLIC_DOWNLOAD_TOKEN:订阅下载链接 token。
可以用下面的命令生成随机 token:
openssl rand -base64 32部署完成后打开:
https://<your-worker>.<your-subdomain>.workers.dev/?token=<admin-token>
然后在网页里添加订阅源、组合订阅和规则模板。这是最适合普通开源用户的路径。
说明:这是 Cloudflare 官方的模板导入流程。Cloudflare 可能会在你的账号里配置 Workers Builds,用于后续从你自己的副本仓库部署;本上游仓库不使用 GitHub Actions、Dependabot 或 GitHub CI/CD。
如果你希望 Codex、Claude Code 或本地命令直接帮你导入订阅源、创建组合订阅并返回可复制链接,用:
pnpm run install:cloudflare这个命令会检查 Cloudflare 登录、创建或复用 D1、生成本地部署配置、写入 Worker secrets、迁移 D1、部署 Worker、导入 config/agent-setup.local.json,最后验证并打印管理链接和下载链接。
如果还没有 Cloudflare 账号或没有登录 Wrangler,它会停下来并提示:
pnpm --dir cloudflare exec wrangler login
pnpm run install:cloudflare让 AI Agent 处理时,可以直接复制 agent/install.prompt.md。
- 有多个机场订阅、VPS 自建节点或本地节点文本,希望统一输出一个订阅链接。
- 希望把分流规则、节点筛选和组合逻辑放在服务端维护,而不是在每个客户端重复配置。
- 希望用 Cloudflare 的轻量部署方式运行,不想维护服务器、数据库服务和复杂后台任务。
- 管理远程订阅 URL 和本地节点文本。
- 把多个订阅源组合成一个云端组合订阅。
- 对节点做区域/类型/正则过滤、重命名、正则删除、去重、正则排序、域名解析、旗帜处理和常用属性设置。
- 内置常用 Mihomo 分流模板,也支持导入自己的 JSON/YAML 模板。
- 在网页里预览处理前后的节点列表,并校验本地节点内容。
- 支持订阅流量信息、配置备份/恢复、远程订阅请求超时、User-Agent、透传 User-Agent 和并发参数。
- 下载链接支持临时传入
url、content和ua,可以复用已有过滤器和模板做一次性格式转换。 - 输出 Mihomo、Stash、Surge、Surge Mac、Surfboard、Loon、Egern、Shadowrocket、Quantumult X、sing-box、v2ray、URI 和 JSON。
- 使用 Worker Secrets 保护管理端和下载链接。
这个项目聚焦“云端聚合 + 云端节点处理 + 云端规则模板 + 最终订阅输出”。核心循环是:添加订阅源,处理节点,组合订阅,套用规则模板,预览校验,复制下载链接。它不是完整 Sub-Store 的逐项复刻,也不是 Cloudflare 功能展示项目。
详细边界见 docs/product-scope.md。
Cloudflare Worker
|-- Static Assets Vue 管理界面
|-- /api/* 配置 API
|-- /download/source/* 单订阅源输出
|-- /download/collection/* 组合订阅输出
|
|-- D1 sources / collections / templates / settings
|-- Worker Secrets admin token / download token
只需要 Cloudflare Workers + D1。KV、R2、Durable Objects、Queue、Cron 都不是核心路径。
需要 Node.js 22 和 pnpm 11。仓库带有 .node-version 和 packageManager 字段。
pnpm run setup
cp cloudflare/.dev.vars.example cloudflare/.dev.vars
pnpm run build:frontend
pnpm run dev访问:
http://localhost:8787/?token=dev-admin-token
如果不用按钮,也不用 agent installer:
pnpm run setup
pnpm --dir cloudflare exec wrangler login
pnpm --dir cloudflare exec wrangler d1 create sub-store-cloudflare
cp config/agent-setup.example.json config/agent-setup.local.json
pnpm run deploy:config -- config/agent-setup.local.json cloudflare/wrangler.deploy.local.jsonc --database-id <database-id>
pnpm --dir cloudflare exec wrangler secret put SUB_STORE_ADMIN_TOKEN
pnpm --dir cloudflare exec wrangler secret put SUB_STORE_PUBLIC_DOWNLOAD_TOKEN
pnpm run migrate:remote
pnpm run deploy:local详细说明见 docs/deployment.md。Agent 导入配置见 docs/ai-agent-install.md。
https://substore.example.com/download/source/<source-id>?token=<download-token>
https://substore.example.com/download/collection/<collection-id>?token=<download-token>
https://substore.example.com/download/collection/<collection-id>/mihomo?token=<download-token>
https://substore.example.com/download/collection/<collection-id>/sing-box?token=<download-token>
不带输出格式的链接是通用订阅,Worker 会按客户端 User-Agent 自动选择格式;也可以显式指定 mihomo、stash、surge、loon、qx、sing-box、uri、json 等输出格式。
临时转换:
https://substore.example.com/download/source/<source-id>?token=<download-token>&url=https%3A%2F%2Fexample.com%2Fsub
https://substore.example.com/download/source/<source-id>/sing-box?token=<download-token>&content=<url-encoded-node-text>
url 会临时替换该订阅源的远程订阅地址,content 会临时按本地节点文本解析,ua 会临时覆盖拉取远程订阅时使用的 User-Agent。临时参数只影响本次请求,不会写入 D1。
| 概念 | 作用 |
|---|---|
| Sources | 远程订阅 URL 或本地节点文本。 |
| Collections | 多个 Sources 的组合订阅。 |
| Filters | 节点包含、排除、正则删除、重命名、去重、排序、域名解析、旗帜和常用属性设置。 |
| Templates | Mihomo / Stash / Surge Mac 的代理组、规则提供者和规则列表。 |
输入格式:
- 远程订阅:每行一个
http(s)URL,多个 URL 会合并。 - 本地节点:支持单行 URI、Mihomo YAML、JSON 代理数组、常见 Surge/Loon/Quantumult X 单行节点,也支持完整 Base64 内容。
- 常用 URI:
ss、ssr、vmess、vless、trojan、hysteria、hysteria2、tuic、anytls、http、socks5、wireguard。
输出格式:
- Mihomo / Stash / Surge Mac:YAML 输出,支持模板里的代理组、规则提供者和规则列表。
- Surge / Surfboard / Loon / Quantumult X:常见文本节点格式输出。
- Shadowrocket / URI:通用 URI 列表。
- sing-box:基础 JSON 配置。
- v2ray:Base64 URI 列表。
- JSON:处理后的节点数组,适合调试和二次处理。
acl4ssr-mihomo:默认模板,使用 ACL4SSR 和常用媒体/AI 分流。acl4ssr-mihomo-no-emoji:同样使用 ACL4SSR,但分组名不带 emoji。mihomo-basic:小型基础模板。loyalsoldier-whitelist:Loyalsoldier 白名单思路。loyalsoldier-blacklist:Loyalsoldier 黑名单思路。ai-streaming-mihomo:AI、流媒体、Telegram、GitHub 常用规则。
pnpm run check:release
pnpm run deploy:dry-run这两个命令是本仓库的本地发布 gate:检查 Worker、构建前端、验证 agent seed / deploy config / Worker contract,并扫描当前文件和 main 历史里的常见发布风险。仓库不使用 GitHub Actions 或 Dependabot。
本项目的前端交互和订阅管理思路参考并致敬 sub-store-org/Sub-Store。原版 Sub-Store 是功能完整的订阅管理项目,覆盖了更广的运行环境和客户端生态;这个仓库选择更小的 Cloudflare-native 形态,方便直接部署和二次修改。