Docker部署Sub-Store订阅管理系统

一、Sub-Store 简介
Sub-Store 是一款开源的订阅转换服务,支持聚合多个订阅链接并输出为不同客户端格式。
它能让你:
-
将多个机场或自建节点订阅整合;
-
输出为 Clash / Surge / QuantumultX / Loon / Shadowrocket 等格式;
-
自定义节点筛选、排序、分组;
-
通过 Web 界面轻松管理。
GitHub 项目地址:
👉 https://github.com/sub-store-org/Sub-Store
二、部署环境准备
推荐系统环境:
| 系统 | 支持 |
| Debian 12 / Ubuntu 22.04 | ✅ 推荐 |
| Alpine / CentOS 7+ | ✅ 支持 |
| 内存要求 | ≥ 256MB |
确保系统已安装:
apt update && apt install -y docker.io docker-compose三、Docker Compose 配置文件
在服务器任意目录(如 /root/sub-store)下创建文件:
mkdir -p /root/sub-storecd /root/sub-storenano docker-compose.yml然后粘贴以下内容 👇:
version: "3.8"
services: sub-store: image: xream/sub-store:latest container_name: sub-store restart: always ports: - "3001:3001" volumes: - ./data:/opt/app/data environment: SUB_STORE_FRONTEND_BACKEND_PATH: /MySecretToken123 SUB_STORE_BACKEND_SYNC_CRON: "55 23 * * *" SUB_STORE_BODY_JSON_LIMIT: 10mb SUB_STORE_CORS_ALLOWED_ORIGINS: "*"⚠️ 建议你修改
自定义后端 API 路径
SUB_STORE_FRONTEND_BACKEND_PATH=/MySecretToken123修改自定义后端 API 路径 示例:
SUB_STORE_FRONTEND_BACKEND_PATH=/rd304CYuZ2KByUk4WRHF这样可以防止被随意访问。
可以使用随机生成密码网站生成:https://1password.com/zh-cn/password-generator
设置跨域来源
SUB_STORE_CORS_ALLOWED_ORIGINS: "*"推荐填写实际使用的前端域名 示例:
SUB_STORE_CORS_ALLOWED_ORIGINS: "https://sub.xxx.com"端口映射
"3001:3001"若使用 Caddy、Nginx 等反向代理,建议使用 127.0.0.1:3001:3001,避免直接暴露服务端口。
"127.0.0.1:3001:3001"四、配置详解
Docker Compose 配置参数说明
| 配置项 | 示例 | 作用 | 说明 |
|---|---|---|---|
image | xream/sub-store:latest | 指定 Docker 镜像 | 使用 xream/sub-store 提供的 Sub-Store Docker 镜像。latest 表示使用镜像仓库中的最新版本。 |
container_name | sub-store | 指定容器名称 | 将 Docker 容器名称设置为 sub-store,方便后续使用 docker logs sub-store、docker restart sub-store 等命令管理容器。 |
restart | always | 设置自动重启 | 设置为 always 后,如果 Sub-Store 容器异常退出,Docker 会自动尝试重新启动;同时 Docker 服务重启后容器也会自动启动。 |
ports | 3001:3001 | 设置端口映射 | 将 宿主机的 3001 端口 映射到 Docker 容器的 3001 端口。若使用 Caddy、Nginx 等反向代理,建议使用 127.0.0.1:3001:3001,避免直接暴露服务端口。 |
volumes | ./data:/opt/app/data | 持久化数据 | 将 Docker Compose 文件所在目录下的 data 文件夹挂载到容器内的 /opt/app/data。这样即使删除或重新创建容器,Sub-Store 的数据仍然可以保存在宿主机上。 |
SUB_STORE_FRONTEND_BACKEND_PATH | /MySecretToken123 | 自定义前端后端路径 | 修改 Sub-Store 前端访问后端 API 时使用的路径。例如设置为 /MySecretToken123 后,前端与后端之间会使用该自定义路径进行通信。该配置不是登录密码,也不属于真正的身份认证机制。 |
SUB_STORE_BACKEND_SYNC_CRON | "55 23 * * *" | 设置后端定时同步 | 使用 Cron 表达式设置 Sub-Store 后端的定时同步任务。55 23 * * * 表示每天晚上 23:55 执行一次。 |
SUB_STORE_BODY_JSON_LIMIT | 10mb | 限制 JSON 请求大小 | 设置后端能够接受的 JSON 请求体大小。设置为 10mb 后,可以允许最大约 10 MB 的 JSON 数据请求,同时避免过大的请求占用过多服务器资源。 |
SUB_STORE_CORS_ALLOWED_ORIGINS | "*" | 设置跨域访问来源 | 用于设置允许访问 Sub-Store 后端的跨域来源。设置为 * 表示允许任意 Origin 进行跨域请求,兼容性较好,但相比指定域名安全性较低。 |
五、启动服务
保存文件后执行:
docker compose up -d查看运行状态:
docker ps若一切正常,你会看到类似输出:
CONTAINER ID IMAGE STATUS PORTS a1b2c3d4e5f6 xream/sub-store Up 10 seconds 0.0.0.0:3001->3001/tcp六、Caddy反代
编辑/etc/caddy/Caddyfile
nano /etc/caddy/Caddyfileexample.com { reverse_proxy localhost:3001 }重启caddy
systemctl restart caddy七、访问与初始设置
浏览器访问:
若配置了后端路径(如 /ks9foTp4xE8fr24pg2DZ),
打开 反代域名 输入后端路径ks9foTp4xE8fr24pg2DZ
你会看到 Sub-Store 的管理界面,可以:
-
添加或导入订阅;
-
设置转换规则;
-
生成统一的订阅链接。
八、设置Gist同步
1.拥有一个 GitHub 账号
注册或登录:https://github.com/
2.获取一个 GitHub Personal Access Token(访问令牌)
-
点击Token(classic)并在右上选择Generate new token(classic)
-
勾上Repo和Gist这两项后,点击底下的Generate token即生成Token了
-
生成后复制该 token(⚠️ 只显示一次!)
建议保存到安全的地方,例如 ~/.config/sub-store/token.txt。

3.Sub-store设置Gist同步
将Github用户名和获取的Token粘贴进去即可

支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
