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

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

动机

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

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

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

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

主旨

下载与编译

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

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

bash
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
<?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 查看用法吧

bash
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
相关文章
如何在多个编程语言间切换自如

Attention 要自由切换编程语言,必然要通过实践,编程语言之海浩瀚无边,本文会随着作者的实践而不断更新,敬请期待。 基本思路 熟悉各语言基本语法,怎么定义变量、函数、控制流等,这里有语法简介、数据结构等章节。 识别各语言的特性,为什么 Python 有元组等,也就是要知道语言的特性和高级用法等。 在熟悉基本语法时,要能搞清楚各编程语言怎么描述相同的功能的。 在识别语言特性时,要能搞清楚各编程语言处理方式上的设计哲学。

阅读更多
我的博客构建方法及历史

简介 回想自己的博客系统,是从什么时候开始建立的呢? 我翻阅了域名购买记录、服务器购买记录、GitHub 仓库等。 最早在 2019年3月 购买了 dfface.com 的域名,但我怀疑最早的网站不在那个时候,应该还要更早,更早的那一波可能采用了 GitHub Pages。

阅读更多
单调栈

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

阅读更多