Beancount本地部署指南 (又称:前MoneyWiz用户是如何逃离beancount.io的)
前言:我为什么要记账,以及我为何开始用Beancount
Beancount是一款用户较多褒贬不一的文本记账软件。在使用Beancount之前,我的主力记账是MoneyWiz 3这款App,再之前似乎是网易有钱(现已停止运营)何随手记。平心而论,使用网易有钱以及MoneyWiz的时候我并没有太注重于收支,仅仅是想让自己在使用非现金支付的时候更有花钱的感觉。
MoneyWiz虽然整体用户体验还不错,但个人使用时遇到的主要问题有如下几点:
- 从2021年左右变为订阅制,MoneyWiz 3基本已经停止维护
- 涉及货币转换的部分虽然支持手动指定汇率,但是非常难用
- 不支持Multiple Posting,即每笔交易只能有一个支出类别和一个账户(注:刚刚发现其实支持,只是我从来没用过)
- UI操作略繁琐,并且我没有Mac只能在iPad上记账,这大概也就是我从没用过Multiple Posting的原因吧…
相比之下Beancount这种纯文本记账的方式至少易用性方面有较大提升,Fava自带的编辑器也还不错。同时文档也较为完善,比如How Inventories Work等几篇文章对于我初期开始使用也有较大的帮助。
Beancount.io != Beancount,但也不是不能用
Beancount.io其实就是一个Hosted Beancount + fava,外加支持(用户体验极差的)app。现在似乎还把免费版砍了,新注册用户只有$10/月的选项。其实新用户用它上手未尝不可,如果觉得不适合可以立即止损;但自己长期使用还是自己搭服务比较好,并且数据文件是纯文本也方便使用Version control。如果你准备使用Beancount.io的话,推荐这个Tampermonkey脚本自动关掉烦人的弹窗:
1 | // ==UserScript== |
Beancount本地部署
这里可以直接找到Docker image,需要注意的是默认没有AuthN,任何人只要知道端口即可访问账本。因此建议按照教程配置反向代理。或许最理想的情况是将反向代理共同打包至一个Dockerfile内,不过考虑到上游dependency过多这大概也需要频繁更新吧。
AAD Authentication
熟悉的老朋友,直接走流程就好。被AAD毒打过一次之后这次没踩太多的坑,唯一需要注意的就是类型记得选Web。
添加其他用户
在 Azure Active Directory - Default Directory 中,Manage - Users 输入其他用户的邮箱,对方会收到一封来自 invites@microsoft.com 的邀请邮件。注意邀请邮件可能会在垃圾邮件里,接受之后对方即可使用AAD登录验证OAuth了。别忘了在oauth2-proxy的Authorized_email也加上对应的邮箱。
局域网访问 Redirect URI
很明显AAD的工程师们尽可能的想办法要求人们使用https了(RFC 8252也是这么要求的),但是局域网部署的话我真的不需要https。然而Redirect URI用http就只能localhost,最后还是硬上了https自签名证书也是证书对吧。
oauth2-proxy想用https的话最重要的一点是要提供tls-key!这大概是我花时间最多的部分了,一直试图理解为什么--https-address的端口拒绝连接,最后恍然大悟都没有证书和密钥当然没有TLS…但oauth2-proxy也不能说一点责任没有,--tls-cert/key-file是空的至少应该打个log提示一下啊…
顺带一提,上次见到Redirect URI是在Chrome extension申请OAuth implicit grant flow的时候,由于http/https的限制没法使用chrome-extension://这种格式,最后终于发现https://<app-id>.chromiumapp.org/*这样的格式才是正确的Redirect URI
TODO
以后有时间可以看看如何使用Lets encrypt的证书,就可以上个真正的https了。