开源个人订阅追踪工具Zublo

简介

什么是 Zublo ?

Zublo 是一个开源的自托管订阅追踪工具,可以帮助用户在一处管理所有周期性支付。它提供了清晰的 Web 界面、续费提醒、日历和统计视图,以及 AI 分析功能,让用户对你的订阅支出一目了然。

主要特点

  • 单一职责:专注于追踪周期性支付,不会变成完整的财务套件
  • 快速部署:简单的 Docker 安装即可快速运行
  • 数据自主:你的数据保存在自己的基础设施上
  • AI 真正有用:内置聊天界面,支持多种 LLM 提供商(Google GeminiOpenAIOllama、兼容 OpenAI 的端点)
  • 紧凑架构React 前端 + PocketBase 后端,易于理解和扩展
  • 多视图展示:仪表盘、订阅列表、日历、统计、AI 聊天多种视图
  • 多货币支持:支持多货币并自动同步汇率
  • API 访问:通过 scoped API 密钥提供 REST API 访问
  • 开源免费:基于 Apache License 2.0 协议开源

应用场景

  • 自托管用户:单容器、SQLite 持久化,无需重型平台要求
  • Homelab 用户:占用空间小,备份简单,易于配置反向代理
  • 注重隐私的用户:订阅数据保存在自己的基础设施上
  • 独立开发者:紧凑的全栈代码库,易于 fork 和扩展
  • 团队共享支出的追踪:清晰的循环成本可见性,无需采用完整的财务套件

Zublo 是一个专注于订阅追踪的紧凑型工具,适合想要自托管并保持数据控制的用户。

安装

在群晖上以 Docker 方式安装。

Zublo 镜像托管在 ghcr.io,群晖 Docker 套件无法直接搜索,需要使用命令行安装。

本文写作时, latest 版本对应为 0.1.0

docker cli 安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
docker run -d \
--name=zublo \
--restart=unless-stopped \
-p 9597:9597 \
-v $(pwd)/data:/pb/pb_data \
-e PB_ENCRYPTION_KEY="4ed3224d70ae10d048566d33165f2b570bb424666a48eba8ef03c4100611b6b5" \
ghcr.io/danielalves96/zublo:latest

环境变量说明PB_ENCRYPTION_KEYPocketBase 的加密密钥,用于加密敏感数据。生产环境必须设置为复杂的随机字符串,不能使用默认值。可以用 openssl rand -hex 32 命令来生成

docker-compose 安装

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: '3'

services:
app:
image: ghcr.io/danielalves96/zublo:latest
container_name: zublo
restart: always
ports:
- "9597:9597"
volumes:
- ./data:/pb/pb_data #change this path to your desired path
environment:
PB_ENCRYPTION_KEY: 4ed3224d70ae10d048566d33165f2b570bb424666a48eba8ef03c4100611b6b5
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:9597/api/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 15s

然后通过 SSH 登录到您的群晖,执行下面的命令:

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 zublo 和 子目录
mkdir -p /volume1/docker/zublo/data

# 进入 zublo 目录
cd /volume1/docker/zublo

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

服务启动后,会有多个访问地址:

  • http://<群晖IP>:9597 - 应用主界面
  • http://<群晖IP>:9597/_/ - PocketBase 管理后台
  • http://<群晖IP>:9597/api/ - REST API

在浏览器中输入 http://群晖IP:9597 就能看到注册界面

  • 主要货币却没有人民币,只能进入系统后再设置
  • 支持中文,但似乎对界面不起作用

密码不能少于 8 个字符

软件的主界面还是英文

需要进设置重新切换一下,估计应该是 Bug

进入设置可以设置货币为 CNY

支付方式老苏只保留了可能能用上的几个

分类可以自己翻译成中文

还可以添加自己的分类,同时删除用不上的

添加订阅

进入 订阅

添加订阅

添加成功

随便加了几个

AI

进入设置,必须先启用 AI

接下来设置提供商,还是以 硅基流动 为例

  • 提供商名称:例如: siliconflow
  • API 基址:为 https://api.siliconflow.cn/v1
  • API密钥:硅基流动中创建的 API 秘钥
  • 如果设置无误,点 获取模型 会返回模型的名称


目前硅基流动(SiliconFlow)注册就送 16 元的代金券

注册地址:

https://cloud.siliconflow.cn/i/NkUiXVhQ

和之前的不同,现在的券虽然多了2块钱,但是有有效期,不过可以用于 Pro/ 开始的模型

后续准备试试七牛,据说可以用国外的大模型

注册地址:

https://s.qiniu.com/2ENRR3


但是不知道是 Bug 还是什么缘故,API密钥无法保存,所以无论是仪表板的 AI 推荐

还是 聊天,都会报 401

API 使用

进设置,新建 API 秘钥

老苏勾选了全部的权限

切记要保存好 API Key

在可用端点中,能看到接口

注意事项

  1. 数据持久化:必须持久化 /pb/pb_data 目录,否则重启后数据会丢失
  2. 加密密钥PB_ENCRYPTION_KEY 在生产环境必须修改,建议使用复杂的随机字符串
  3. 首次注册:第一个注册的用户自动成为管理员
  4. AI 提供商:如需使用 AI 功能,需要自行配置 API Key(支持 Google GeminiOpenAIOllama、兼容 OpenAI 的端点,例如:OpenRouter
  5. 端口占用:如果 9597 端口被占用,可以更换为其他端口

参考文档

Zublo: Self-hosted subscription tracking with AI that is actually useful
地址:https://github.com/danielalves96/zublo

Package zublo — Package zublo
地址:ghcr.io/danielalves96/zublo