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

目录

机场订阅多了,每家给的链接格式还不一样——有的 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

二、整体架构

流程图流程图

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

三、Docker Compose 部署

3.1 创建数据目录

mkdir -p /opt/sub-store/data

3.2 docker-compose.yml

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

3.3 关键环境变量

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

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

3.4 启动

cd /opt/sub-store
docker compose up -d

# 看日志确认启动
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)

server {
    listen 443 ssl http2;
    server_name substore.your-domain.com;

    ssl_certificate     /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }
}

server {
    listen 80;
    server_name substore.your-domain.com;
    return 301 https://$host$request_uri;
}

五、首次访问 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 / mihomo Clash
Shadowrocket Shadowrocket
Surge Surge
Loon Loon
V2rayN V2ray
sing-box sing-box

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

八、订阅格式扫盲

不同客户端吃不同格式:

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

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

九、定时备份配置

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

9.1 直接备份卷目录

每周 cron 打包:

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

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

设置 → 应用同步,可选:

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

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

十、踩坑清单

现象 原因 解决
访问 UI 显示空白 后端路径不一致 检查 docker env 和 UI 填的
拉机场 403 UA 触发机场风控 改 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,多个客户端共享,节点筛选/改名一次配好永久用。