个人财务管理系统beancount-gs

今天是老苏居家隔离的第 53 天。

最近抗原还是每天做,差别是每天做 1 次还是 2 次,周六只做一次抗原,但不明白为什么总是要求在 8 点以前

平时也就罢了,好不容易周末想睡个懒觉,结果还是要早起,大家的反应是👇这样的

周日上午一次抗原 + 一次核酸

周日晚上先接到通知,周一只要做抗原

谁知道后面晚上 11 点多又来了新的通知,周一上午继续一次抗原 + 一次核酸

因为主任特别强调 “本次核酸相当重要”,禁不住让大家浮想联翩,难道我们终于迎来可以出小区了?


老苏之前写过『 Firefly III 搭建个人财务记账平台 』 ,但坦率的说,Firefly III 在很多习惯上并不符合日常的记账习惯,所以老苏找到了 beancount-gs

什么是复式记账 ?

在会计学中,复式簿记(又称为复式记账法)是商业及其他组织上记录金融交易的标准系统。 该系统之所以称为复式簿记,是因为每笔交易都至少记录在两个不同的账户当中。 每笔交易的结果至少被记录在一个借方和一个贷方的账户,且该笔交易的借贷双方总额相等,即“有借必有贷,借贷必相等”。

什么是 beancount?

beancount 是一个优秀的开源复式记账工具,因为其基于文本记录的特性,难以拓展到移动端。

什么是 beancount-gs ?

beancount-gs 使用 Golang 进行文本的读写和接口服务支持,利用 bean-query 获取内容并解析,以 Json 格式返回。并基于已实现的接口内置实现了前端页面(适配移动端)。

官方提供了 Demo 网站:https://beancount.xdbin.com

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 beancount-gs ,选择第一个 xdbin/beancount-gs,双击直接下载

docker 文件夹中,创建一个新文件夹 beancount,并在其中建四个子文件夹,分别是 bakconfigdataicons

文件夹 装载路径 说明
docker/beancount/bak /app/bak 存放备份
docker/beancount/config /app/config 存放设置
docker/beancount/data /data/beancount 存放数据
docker/beancount/icons /app/public/icons 存放图标

端口

本地端口不冲突就行,不确定的话可以用命令查一下

1
2
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 容器端口
10000 80

环境

命令行中输入下面这行内容

1
sh -c "cp -rn /app/public/default_icons/* /app/public/icons && ./beancount-gs -p 80"

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷,老苏更喜欢命令行,搭建环境比较快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 新建文件夹 beancount 和 子目录
mkdir -p /volume2/docker/beancount/{bak,config,data,icons}

# 进入 beancount 目录
cd /volume2/docker/beancount

# 运行容器
docker run -d \
--restart unless-stopped \
--name beancount-gs \
-p 10000:80 \
-v $(pwd)/bak:/app/bak \
-v $(pwd)/config:/app/config \
-v $(pwd)/data:/data/beancount \
-v $(pwd)/icons:/app/public/icons \
xdbin/beancount-gs:latest \
sh -c "cp -rn /app/public/default_icons/* /app/public/icons && ./beancount-gs -p 80"

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: "3.9"
services:
app:
container_name: beancount-gs
image: xdbin/beancount-gs:latest
ports:
- "10000:80"
# volumes 挂载目录会导 /app/public/icons 中的图标被覆盖,这里将默认图标在挂载后重新拷贝图标
command: >
sh -c "cp -rn /app/public/default_icons/* /app/public/icons && ./beancount-gs -p 80"
volumes:
- ./bak:/app/bak
- ./config:/app/config
- ./data:/data/beancount
- ./icons:/app/public/icons

然后执行下面的命令,在 portainer 中执行也是可以的

portainer 中不要用相对路径

1
2
3
4
5
6
7
# 进入目录
cd /volume2/docker/beancount

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

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:10000 就能看到主界面

第一次需要初始化

  • 账本存储位置:账本数据和配置的磁盘存储路径;例如:laosu,用年份会不会更好呢?
  • 账本开始日期:账户的默认开始时间。(默认设置为 1970-01-01 即可);
  • 币种:账本的默认币种,账户初始化时 commodity 的默认值。注:beancount 本身没有币种的概念,其每个账户在创建的时候都可以指定一个 commodity,亦可以不指定。commodity 不一定是常规意义上的货币,可以是任意的自定义内容,例如房产,车子等;(默认设置为 CNY
  • 平衡账户名称:用户初始化账户金额,或者维持其他账户平衡的账户;
  • 是否备份数据:开启后,当源文件被修改时,之前的版本会备份到 /bak文件夹;
  • 密钥:只有服务的密钥匹配才允许完成配置项的设置。密钥可以在服务的启动日志中查看,每次服务启动,密钥都会被刷新。

接下来设置 账本名称账本密码

需要注意的是:密码如果忘记,不支持找回。

进入账本后,默认是没有任何数据。

记账 可以开始记录第一笔交易了

“有借必有贷,借贷必相等”,所以必须要记录两个账户

账目记录完成后,支出明细一栏就出现了上一步记录的消费信息

在手机上的效果还是不错的,但没有 app 还是比较可惜

beancount-gs 在使用上更偏向于日常流水账的记录方式,在保留灵活性的同时,使得新用户更容易上手使用。如果遇到问题,建议看看官方提供的中文的使用说明书:https://www.yuque.com/chuyi-ble7p/beancount-gs

参考文档

BaoXuebin/beancount-gs: 基于 beancount 提供个人财务管理的 RESTful API 服务(包含前端页面)
地址:https://github.com/BaoXuebin/beancount-gs

beancount-gs 使用文档 · 语雀
地址:https://www.yuque.com/chuyi-ble7p/beancount-gs

beancount/beancount: Beancount: Double-Entry Accounting from Text Files.
地址:https://github.com/beancount/beancount