Daimon's Blog
主页 归档 关于 RSS 探针 常用工具
主页
归档
关于
RSS
探针
常用工具

Sub-Store 自部署 + 订阅链接转换全教程

daimon daimon 2025-09-29 #Sub-Store#订阅#代理#Docker#Clash

机场订阅多了,每家给的链接格式还不一样——有的 Clash YAML、有的 base64、有的 share link。手动管理几条还行,多了之后想要”聚合 + 过滤 + 重命名 + 一键导出 Clash/V2rayN/Shadowrocket”等功能,Sub-Store 是社区里目前最强的工具。

这篇用 Docker Compose 把 Sub-Store 跑起来 + 接 1Panel 反代 + 自定义后端路径,全套搞定。

一、为什么用 Sub-Store#

订阅工具市面上有 3 类,对比一下:

工具重点适合
subconverter格式转换在线一次性转换
Sub-Store节点聚合 + 过滤 + 编排长期管理多个机场
surgio规则集生成高度自定义需求

Sub-Store 的杀手锏:

  • 多机场聚合到一个订阅链接
  • 节点筛选(正则 / 国家 / 协议 / 倍率)
  • 节点改名(去广告 + 加 emoji)
  • 格式输出:Clash / V2rayN / Shadowrocket / Surge / Loon 全支持
  • 定时备份到 WebDAV / S3
  • 有 iOS / Android / Web 三端 UI

二、整体架构#

graph LR A1[机场 A 订阅] --> SS[Sub-Store
聚合/筛选/改名] A2[机场 B 订阅] --> SS A3[自建节点] --> SS SS --> O1[Clash 客户端] SS --> O2[Shadowrocket] SS --> O3[Surge / Loon] SS --> O4[V2rayN] N[Nginx 反代
HTTPS] --> SS

部署后你只需要在客户端填一个 Sub-Store 生成的 URL,所有机场节点都聚合进来。

三、Docker Compose 部署#

3.1 创建数据目录#

Terminal window
1
mkdir -p /opt/sub-store/data

3.2 docker-compose.yml#

1
services:
2
sub-store:
3
image: xream/sub-store:http-meta
4
container_name: sub-store
5
restart: always
6
environment:
7
# 定时备份到自定义存储(可选)
8
- SUB_STORE_BACKEND_UPLOAD_CRON=55 23 * * *
9
# 自定义后端路径(关键,防扫)
10
- SUB_STORE_FRONTEND_BACKEND_PATH=/your_secret_path
11
volumes:
12
- /opt/sub-store/data:/opt/app/data
13
ports:
14
- "127.0.0.1:3001:3001" # 只绑本机,外网走 nginx 反代

3.3 关键环境变量#

变量说明
SUB_STORE_FRONTEND_BACKEND_PATH必设:自定义后端路径,相当于密码
SUB_STORE_BACKEND_UPLOAD_CRON定时备份的 cron 表达式(可选)
SUB_STORE_BACKEND_API_HOSTAPI 域名(自动检测,一般不设)
SUB_STORE_DATA_BASE_PATH数据目录(一般用默认)
SUB_STORE_BACKEND_DEFAULT_FLOW_USER_AGENT拉机场订阅时的 UA

⚠️ SUB_STORE_FRONTEND_BACKEND_PATH 是你的唯一防护——这个路径就是你 Sub-Store 后端的”密码”。设个长一点的随机字符串。

3.4 启动#

Terminal window
1
cd /opt/sub-store
2
docker compose up -d
3
4
# 看日志确认启动
5
docker compose logs -f

3.5 端口绑定为什么是 127.0.0.1:3001?#

不直接 3001:3001 暴露公网,原因:

  • Sub-Store 默认不强制认证,任何能访问端口的人都能改你的配置
  • 必须通过反代 + 自定义路径 + HTTPS 把它保护起来
  • 127.0.0.1 绑定意味着只有 nginx 反代能访问

四、Nginx 反代 + HTTPS#

用 1Panel 的话最简单:

4.1 1Panel 配置#

网站 → 创建网站 → 反向代理:

字段值
主域名substore.your-domain.com
代理地址http://127.0.0.1:3001
HTTPS开启 + 用 DNS 自动签

完成后浏览器访问 https://substore.your-domain.com 就能看到 Sub-Store 的 Web UI。

4.2 手动 nginx 配置(不用 1Panel)#

1
server {
2
listen 443 ssl http2;
3
server_name substore.your-domain.com;
4
5
ssl_certificate /path/to/fullchain.pem;
6
ssl_certificate_key /path/to/privkey.pem;
7
8
location / {
9
proxy_pass http://127.0.0.1:3001;
10
proxy_http_version 1.1;
11
proxy_set_header Host $host;
12
proxy_set_header X-Real-IP $remote_addr;
13
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
14
proxy_set_header X-Forwarded-Proto $scheme;
15
proxy_set_header Upgrade $http_upgrade;
16
proxy_set_header Connection "upgrade";
17
proxy_read_timeout 86400;
18
}
19
}
20
21
server {
22
listen 80;
23
server_name substore.your-domain.com;
24
return 301 https://$host$request_uri;
25
}

五、首次访问 Web UI#

访问 https://substore.your-domain.com,第一次需要填后端路径:

字段值
后端地址https://substore.your-domain.com
后端路径/your_secret_path(和 docker compose 里的一致)

填对了进 UI 即可。

六、Sub-Store 核心功能#

6.1 添加订阅#

订阅 → 添加:

字段值
名称随便,如 机场A
类型单条 / 组合订阅
链接机场提供的订阅 URL
用户代理通常 clash.meta 或 clashx.pro

填完保存,Sub-Store 会自动拉机场节点。

6.2 节点筛选 + 改名#

在订阅上右键 → 编辑预处理,能加各种节点操作脚本:

操作用途
节点过滤器按关键词/正则筛节点(去广告)
节点重命名加 emoji / 国家旗 / 删多余
节点类型过滤只保留 vless / 排除 trojan
节点排序按延迟 / 按国家排
去重删重复节点

社区有大量现成脚本,搜「Sub-Store 脚本」就有。

6.3 组合订阅#

把多个机场聚合成一条:

订阅 → 添加 → 组合订阅 → 勾选多个子订阅 → 保存。

输出一条 URL,里面包含所有勾选的机场节点。

6.4 文件管理(自定义规则集)#

文件 → 添加,可以上传自己的:

  • 节点列表
  • 规则集
  • mihomo / Clash 模板

之后在订阅里可以引用这些文件。

七、生成订阅 URL#

在订阅列表 → 点订阅 → 下载 → 选目标格式:

客户端格式
Clash / Clash Verge / mihomoClash
ShadowrocketShadowrocket
SurgeSurge
LoonLoon
V2rayNV2ray
sing-boxsing-box

每种都会生成一个 URL,这个 URL 就是你客户端要填的东西。

八、订阅格式扫盲#

不同客户端吃不同格式:

格式内容客户端
Share Links每行一个 vmess:// / ss:// / trojan:// / vless://V2rayN、Shadowrocket、Clash Meta 都支持
Base64Share Links 整体 Base64 编码几乎所有客户端
Clash YAML完整 YAML 配置(节点+策略组+规则)仅 Clash 系列

💡 机场给的是什么? 99% 都是 base64 编码的 Share Links。Sub-Store 帮你拉回来,按你要的格式重新输出。

九、定时备份配置#

🪤 Sub-Store 的所有数据在 Docker 卷里,容器重建数据丢失。一定要配备份。

9.1 直接备份卷目录#

每周 cron 打包:

Terminal window
1
0 4 * * 0 tar -czf /backup/sub-store-$(date +\%Y\%m\%d).tar.gz \
2
/opt/sub-store/data

9.2 Sub-Store 内置同步(推荐)#

设置 → 应用同步,可选:

  • WebDAV(InfiniCLOUD / Koofr / 自建 Alist)
  • GitHub Gist
  • 自定义 HTTP 同步接口

配好之后每天自动备份配置 + 数据。

十、踩坑清单#

现象原因解决
访问 UI 显示空白后端路径不一致检查 docker env 和 UI 填的
拉机场 403UA 触发机场风控改 UA 为 clash.meta 或别的常见值
拉机场超时VPS 在国内 / 机场在国外给 Docker 配代理
HTTPS 不通1Panel 证书没绑或反代配错检查 nginx + 证书
重启 Docker 后数据消失没挂卷检查 volumes 配置
客户端拉订阅超时Sub-Store 拉机场慢在 Sub-Store 里调整定时刷新
多人能匿名访问 UI后端路径太短改成 32 位随机字符串

十一、几条实用经验#

  • SUB_STORE_FRONTEND_BACKEND_PATH 必设强密码:这是唯一防线。
  • 端口绑 127.0.0.1:别裸奔到公网。
  • HTTPS 必上:Sub-Store 走 HTTP 明文传输,所有订阅 token 都在 URL 里。
  • 预处理脚本是核心生产力:花一次时间写好”去广告 + 改名 + 去重”,永久受益。
  • iOS / Android 端也有 app:搜 “Sub-Store”,能扫码同步配置。
  • VPS 在国内 + 机场在国外 需要给 Docker 配代理,否则拉机场超时。

跑通之后你的代理订阅管理体验会上一个台阶:所有机场聚合成一条 URL,多个客户端共享,节点筛选/改名一次配好永久用。

mihomo / Clash 规则进阶:fake-ip + DNS 分流 + no-resolve
New-API 自部署:搭建你自己的 AI 网关
本博客所有文章除特别声明外,均遵循 CC BY-NC-SA 4.0 协议,转载请注明出处。
博客框架 Astro & Fuwari
冀ICP备20260167号
1
一、为什么用 Sub-Store
2
二、整体架构
3
三、Docker Compose 部署
3.1 创建数据目录
3.2 docker-compose.yml
3.3 关键环境变量
3.4 启动
3.5 端口绑定为什么是 127.0.0.1:3001?
4
四、Nginx 反代 + HTTPS
4.1 1Panel 配置
4.2 手动 nginx 配置(不用 1Panel)
5
五、首次访问 Web UI
6
六、Sub-Store 核心功能
6.1 添加订阅
6.2 节点筛选 + 改名
6.3 组合订阅
6.4 文件管理(自定义规则集)
7
七、生成订阅 URL
8
八、订阅格式扫盲
9
九、定时备份配置
9.1 直接备份卷目录
9.2 Sub-Store 内置同步(推荐)
10
十、踩坑清单
11
十一、几条实用经验