这个仓库维护了一份 Sub-Store 镜像,并提供了一个相对安全的生产环境部署模版。
具体来说,它会负责锁定 Sub-Store 后端和前端的具体版本,自动检测上游有没有新版本,拉取源码、构建 Docker 镜像并做基础测试,测试没问题后发布到 GHCR,并且给出一套开箱即用的,更安全的,适合生产环境的 sub-store docker compose 部署配置模板。
这不是 Sub-Store 的官方源码仓库。也不存储上游源码
git clone https://github.com/YewFence/sub-store-image.git
cd sub-store-image仓库中包含 Nginx 配置自动生成脚本,并且保留了绑定挂载卷的文件夹以避免权限问题,所以需要克隆整个仓库以部署服务,仅有一个
compose.yaml文件无法直接部署服务。
cp .env.example .env参考 .env.example 里的注释,填好必要的环境变量。
使用
compose.yaml。
启动:
# proxy 服务用官方 nginx 镜像,通过挂载脚本在启动时注入配置
docker compose up -d默认仅在本地/私有网络可用
如果想用 Cloudflare Tunnel 让订阅可以在公网访问,先确保 .env 里公网订阅入口配置那部分填写完成,然后启用 public profile:
# proxy 服务用官方 nginx 镜像,通过挂载脚本在启动时注入配置
docker compose --profile public up -d如果不清除如何配置的,可以查看docs/public-feed-setup.md。
使用
compose.dev.yaml。
启动:
# 下载上游源码
just sync
# 下载上游许可证
just licenses
docker compose -f compose.dev.yaml up -d --build打开:
http://127.0.0.1:3000
生产环境服务。
特点:
- 主服务用预构建好的 Sub-Store 镜像
- 数据持久化到宿主机的
./data目录 - 管理页面只映射在本地/私有网络端口,也支持配反向代理、内网域名和自定义 TLS 证书
- 订阅入口可选通过 Cloudflare Tunnel 暴露在公网,需要带 token 查询参数验证
- 只有显式启用
publicprofile 时才会暴露在公网
开发服务。
特点:
- 在本地使用源代码 build 镜像
- 数据持久化到宿主机的
./data目录 - 直接暴露端口,不安全,请勿暴露到公网。
git clone https://github.com/YewFence/sub-store-image.gitjust syncjust build可自定义镜像名:
just build ghcr.io/your-name/sub-store:testjust smoke可指定镜像和端口:
just smoke sub-store:smoke 38080just metadatajust publish-metadata ghcr.io/your-name/sub-storejust publish ghcr.io/your-name/sub-store会生成这些 tag:
latestYYYY.MM.DD.localb<backendVersion>-f<frontendVersion>backend-<backendVersion>-frontend-<frontendVersion>sha-<backendSha7>-<frontendSha7>
先登录目标 registry:
docker login ghcr.io然后推送:
just publish-push ghcr.io/your-name/sub-storesources.lock.json上游版本号锁文件。renovate.jsonRenovate 配置,负责自动更新上游版本。scripts/本地和 CI 共用的脚本,包括同步、构建、测试、发布。justfile命令快捷执行入口。compose.yaml生产环境用的 compose 配置。compose.dev.yaml开发/测试用的 compose 配置。docs/github-actions-setup.mdGitHub Actions / Renovate / GHCR 的配置说明。
使用以下上游仓库:
锁文件里的 depName 会被统一展开成 https://github.com/<depName>.git。同步脚本会优先按 currentValue 找同名 tag,如果没有,再尝试 v<currentValue>。
有两条工作流:
Upstream Smoke监听renovate/**分支。Renovate 更新锁文件后,这条工作流会拉上游源码、构建镜像、跑前后端测试。作为测试,通过配置 Renovate 的自动合并以自动更新main分支Publish Image监听main分支。main有更新时发布 GHCR 镜像并创建 GitHub Release。
发布时会同时打几层 tag:
latestYYYY.MM.DD.<run_number>b<backendVersion>-f<frontendVersion>backend-<backendVersion>-frontend-<frontendVersion>sha-<backendSha7>-<frontendSha7>
这些 tag 的用途大概是:
- 日期 tag 方便人工查阅,也适合在文档中引用
b...-f...用于快速确认上游版本组合sha-...用于精确溯源
除了 tag,镜像 labels 和 GitHub Release 里还会包含:
- backend / frontend 的上游 release 链接
- backend / frontend 的精确 commit SHA
- 构建仓库自己的 commit
- 对应的 workflow run 链接
GitHub 的自动化配置,详见:
本仓库的构建脚本、配置文件及相关文档以 MIT License 开源。
但请注意:通过本仓库构建或分发的预构建 Docker 镜像包含受各自许可证约束的上游组件。镜像构建时会把第三方许可证文件和 NOTICE.txt 一起打进 /usr/share/licenses/sub-store/,仓库里的说明见 THIRD_PARTY_LICENSES.md。
发布的镜像包含以下上游项目,它们分别受各自的 copyleft 许可证约束:
| 组件 | 上游仓库 | 许可证 |
|---|---|---|
| Sub-Store 后端 | sub-store-org/Sub-Store | AGPL-3.0 |
| Sub-Store 前端 | sub-store-org/Sub-Store-Front-End | GPL-3.0 |
感谢这些项目的开发者和维护者
- 这是 非官方 的第三方镜像维护仓库,与上游无直接关联
- 本仓库不包含上游源码,仅记录版本锁定信息(
sources.lock.json) - 镜像从上游源代码提供,不做修改,不对功能性、安全性或可用性做任何担保
根据这些许可证,使用本镜像时:
- 你有权获得源代码:可通过上方链接获取各组件的完整源码
- 你有权修改和再分发:但修改后的版本仍需遵守对应上游组件的许可证要求
- 如果涉及网络服务或再分发:还需要额外留意 AGPL / GPL 对源码提供与许可证保留的要求
如需了解完整条款,请参阅镜像内附带的许可证文件,或直接查看 THIRD_PARTY_LICENSES.md 里的链接。