beancount-gs 一款 self-hosted 复式记账程序,简化你的记账方式!

目录

本程序将部署在 macOS 上,不使用 Docker(mac 上的 Docker 太卡了)

动机

我利用 beancount 来记账已经有一段时间了,但有些痛点问题困扰着我:

  • 没有 web 界面,fava 真的只能用来展示和分析且不好理解,需要有一个方便记账的界面
  • text 记账的方式,在 vscode 插件能力有限的情况下,很容易忘记 assets 和 expenses 到底叫啥名,如果有 web 界面那么一定会好很多,一个下拉列表就可以解决

有没有解决方案,不需要自己造轮子的那种?

  • 有!beancoutn-gs ,最近还在更新,就喜欢长期维护的!

主旨

下载与编译

我手头就一台 intel 的 MBP,不想装虚拟机,也绝不会想用 Docker Desktop(用过的都知道有多么卡和费电)。

因此,我的需求就是将程序作为服务直接在 mac 上跑,这不跟 Linux 的服务一个样么,多好啊。

pip3 install beancount

git clone https://github.com/BaoXuebin/beancount-gs.git

beancount-gs

go build

完事,golang 就是好用啊!

我对源码中的监听端口做了修改,同时注释掉了打开浏览器的操作:

Untitled

还加入了环境变量的设置,防止找不到我的 beancount:

Untitled

请将编译好的可执行文件放到 /opt/beancount-gs/ 文件夹中。

还有很重要的事情是,把源码中编译好的前端文件夹 public 、 config 和 template 也 copy 到 /opt/beancount-gs/ 文件夹中,不然访问时啥也没有。

Untitled

开机自启动

launchd 是 macOS 内核装载后启动的第一个进程,类似 Linux 的1号进程。

Linux 中咱们是编写服务,然后使用 systemctl enable xxx 实现的。

编写 plist 文件

Plist 的全称是 Property lists 。

Untitled

类似的,macOS 就需要编写 plist 文件,放到用户登录后的 ~/Library/LaunchAgents 中:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>beancount-gs</string>
        <key>ProgramArguments</key>
        <array>
            <string>/opt/beancount-gs/beancount-gs</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>WorkingDirectory</key>
        <string>/opt/beancount-gs/</string>
        <key>StandardOutPath</key>
        <string>/opt/beancount-gs/beancount-gs.log</string>
        <key>StandardErrorPath</key>
        <string>/opt/beancount-gs/beancount-gs.log</string>
    </dict>
</plist>

这个就不用解释了吧,xml 文件就是写了一些键值对配置和启动的命令~

载入 plist 文件

man launchctl 查看用法吧

launchctl load -w /Users/yuhanliu/Library/LaunchAgents/beancount-gs.plist
# launchctl unload -w /Users/yuhanliu/Library/LaunchAgents/beancount-gs.plist
# launchctl bootstrap user/501 ~/Library/LaunchAgents/beancount-gs.plist
# id -u yuhanliu 

launchctl start beancount-gs
# launchctl stop beancount-gs

Untitled

访问

Untitled

中间居然出现好多问题,这个程序的健壮性不是很强啊:

Untitled

我还要手动新建文件夹和对应的文件……

Untitled

参考文章

前言 · 语雀

Mac 开机自启动

comments powered by Disqus

相关文章

并查集

并查集三步走 并查集,开始的时候大家都是孤岛,根节点就是自己,然后我们不断地合并、修改指针,直到所有边都访问到。 数组初始化,每个节点的 parent 指针都指向自己。数组 roots 存放所有节点的祖先节点(根节点,路径压缩)【

阅读更多

最小生成树

最小生成树:Kruskal算法和Prim算法的实现 这里直接给出离散数学中的几个定理和推论: 无向图G具有生成树当且仅当G连通. G为n阶m条边的无向连通图,则 m >= n - 1. G是树 $\Leftrightarrow$ G中任意两个顶点之间存在唯一

阅读更多

单调栈

陈述 顾名思义,就是单调的栈,可严格可不严格。能够找到下一个更大/小的元素,同时能找到上一个大于等于/小于等于的元素。 通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时

阅读更多