用 Actual Budget 保存个人账本:Docker 部署、文件导入与独立恢复

部署 Actual Budget 私人账本,从小文件导入开始,核对分类与余额,区分同步、导出和完整备份。

文章目录

记账数据分散在手机应用、表格和银行导出文件里时,换设备容易只带走一部分。Actual Budget 可以把账本放到自己管理的服务器,提供浏览器界面和同步入口。对于刚开始自托管的人,更合适的起点是先用测试账本验证导入、分类、同步和恢复,再放进真实资料。

这里讨论的是软件部署与数据管理,不替读者决定支出或投资。账本记录本身也可能有遗漏,转账、退款和重复导入需要核对;界面里的余额不能自动替代银行对账。

云服务器,积分可续期|雨云 · 国内外节点 · 积分兑换权益

部署前先确认 VPS 的磁盘、内存和公网访问条件,也可以查看雨云云服务器;注册时填写优惠码 KuZhuJi。

一个账本文件与整台服务的备份不同

Actual 的服务器持久目录是 /data,其中保存服务相关文件及用户账本数据。应用提供账本导出,适合另存或迁移某份账本;服务器目录副本则用于恢复部署。两种材料各有用途,最好在首次开始记账前就验证。

Actual Budget 官方预算与分类界面示例

官方示例展示分类与账本界面,图中的金额只是演示内容。自己的分类和记录应按实际需求整理,不需要为了复制示例而改变账本结构。

账本可能包含姓名、账户、收入、商户和日常活动信息。服务器入口、管理员权限、备份存储和分享截图都需要考虑这些内容,不把“自己部署”直接等同于“没有其他人能接触”。

先启动一个私人实例

官方提供 actualbudget/actual-server,latest 指向当前正式发行,nightly 则跟随开发更新。本文先用正式发行通道,初次验收后固定实际版本或摘要,避免在没有备份时跟随开发构建。

mkdir -p ~/services/actual/data
cd ~/services/actual

保存 compose.yaml:

services:
  actual:
    image: actualbudget/actual-server:latest
    ports:
      - "127.0.0.1:5006:5006"
    volumes:
      - ./data:/data
    restart: unless-stopped
docker compose config --quiet
docker compose up -d
docker compose logs --tail=80 actual

通过 SSH 转发进入:

ssh -L 15006:127.0.0.1:5006 user@your-server

本机打开 http://localhost:15006,按首次设置界面建立访问密码并创建测试账本。使用 localhost 是初次本地验证方式;其他设备或正式域名访问应安排 HTTPS,官方说明要求安全连接才能正常使用全部相关功能。

域名配置后再开始跨设备同步

让反向代理接到宿主机 127.0.0.1:5006,使用真实域名与有效证书。另一台设备通过同一个正式入口连接,确认它看到的是同一份测试账本,而不是另外创建的本地账本。

在设备 A 新增一条测试记录,等待同步后从设备 B 查看,再在 B 修改备注并回到 A 检查。测试时使用容易辨认的内容和时间,不写真实账号。确认同步可靠之后,再建立正式账本。

浏览器缓存、本地状态和服务器数据是不同层面。刷新时暂时看见内容,不代表它已经成功同步到服务器。切换浏览器或独立设备核对,才能发现仅保留在本地的情况。

Actual 账本编辑、同步与备份关系示意

编辑和同步负责日常使用,账本导出及服务器副本负责恢复。同步会传播变化,误删或错误编辑也可能传播,所以不能把多设备同步当作独立历史备份。

准备独立实例时,可在雨云选择适合的云服务器配置,优惠码 KuZhuJi。配置按实际任务选择,数据库和附件另做备份。

CSV 导入先用一个小样本

从原来的应用或表格导出少量记录,保留原文件。检查日期格式、金额正负号、币种、账户和描述列,再映射到当前导入界面。不要首次就把几年的历史全部导入,然后只用总行数判断成功。

选几条代表记录对照原件:一笔支出、一笔收入、一笔转账和一笔退款。重复交易的识别与自己以前使用的软件可能不同,第二次导入同一小样本时观察实际行为,再决定正式迁移方法。

跨账户转账要核对两边记录,不把它简单视为多了一笔收入或支出。金额的小数分隔、时区和日期解析同样值得检查。格式错误可能没有让导入整体失败,却使单条数据被解释成另一种含义。

分类和规则先少量建立。名称一致有利于检索,过多类别却会增加每次记录的负担;按自己的使用场景选择,不把别人的示例分类当作标准答案。规则自动处理之后,仍应定期抽查原始记录。

银行自动连接放到后面考虑

这次不配置银行同步或第三方连接。不同地区、机构和连接服务的支持、授权与费用各不相同,不能因为某个选项在界面里出现,就认为自己的账户可直接接入。

若后来确实需要,先读对应官方功能说明及连接服务条件,使用所需范围的授权,记录撤销方式。手工导入依然可以满足不少场景,也比较容易用小文件解释和验证,没必要为了完成首次部署就增加外部凭据。

端到端加密是另一项需要单独理解和保管密钥的功能,不因为启用了 HTTPS 就自动存在。决定使用时按当前版本说明设置,并先做一次加密账本的导出及恢复演练;没有恢复材料时,不要贸然更改密钥。

云服务器,积分可续期|雨云 · 国内外节点 · 积分兑换权益

需要增加服务器时,可以打开雨云选购页面,填写优惠码 KuZhuJi;迁移前保留数据与原有部署配置。

账本导出之后要实际打开一次

在测试账本中写入几条记录,使用设置中的 Export Data 下载文件,保存到服务器之外。然后在独立测试环境中导入,核对账户、日期、金额、备注和分类。只确认浏览器下载完成,无法证明这份导出可以满足恢复用途。

导出文件和截图一样可能包含敏感信息。限制访问,不随手放到公开下载目录或项目仓库。数据越多,越应把保留时间、恢复版本和存储位置记录清楚,避免最后只有一份叫“最新备份”的文件却不知道它是哪天的。

清理历史或重置同步等操作可能改变本地状态和文件体积。遇到大导出或同步问题时,先保留现有材料,再按对应官方说明排查,别为了减小文件直接删除自己仍需要的数据。

服务端副本采用一致时间点

暂停应用后,对 /data 对应目录和部署文件保存副本:

mkdir -p backups
docker compose stop actual
tar -czf "backups/actual-$(date +%F-%H%M%S).tar.gz" data compose.yaml
docker compose start actual

将副本转移到外部受保护的存储。恢复时使用独立目录、原镜像和另一个回环端口,先检查访问密码和测试账本,再验证第二设备同步。测试实例不与正式实例共用 data,也不要让真实客户端无意连接到恢复副本。

升级前同时保存账本导出、服务端副本和镜像标识。新版本如果迁移了数据,回退应使用升级前材料;旧镜像还在并不保证它能读新数据。每次完成恢复测试后,把使用的备份日期记下来,真正需要恢复时才能知道从哪一份开始。

继续阅读 · 自托管实践 返回顶部