Wailim的个人博客

Study | Play | Think | Share

利用Frp内网穿透访问Beancount账本

前言

利用Beancount记账已经小半年了,最开始是在电脑上手写Beancount文件,在局域网内运行Fava命令生成可视化记录。后来觉得日程诸多零散消费流水,如果不实时记录,而是积攒下来统一到电脑上更新账本,即使日更这工作量也有点大。如果某天的消费特别多,光是翻消费记录也有点繁琐。

后来在beancount交流群看到一个哥们分享了一个iOS捷径,可以比较方便地将账目写入iCloud文件里,试了一下倒还是不错,但是我只创建了几个高频的消费门类的捷径(如一日三餐、固定缴费这种)

方案组合

于是我在想能不能把Fava部署到NAS上,并通过外部访问的方式,实现随处可记可看账本(Fava本身有添加新条目的功能)。调研了一圈下来,形成了以下解决方案:

确定了上面的这个方案组合之后,就依次启用各个服务并进行配置。

在NAS上部署fava docker

fava docker镜像安装

在nas里打开Docker直接在注册表中搜索fava,第一个就是yegle/fava,右键直接下载该镜像。

nas docker安装

fava配置

fava的配置分为3个部分

  • 端口配置:yegle/fava的端口设置是自动分配的
  • 地址配置:将NAS上存放Beancount文件的文件路径homes/xxx/Sync/Beancount,并指向容器的装载路径/Beancount
  • 环境变量:BEANCOUNT_FILE设置为/Beancount/main.bean

yegle/fava配置

完成上面的配置即可在局域网环境下浏览器中输入192.168.xxx.xxx:port来打开beancount账本浏览。
顺便说一句,利用NAS的同步功能,可以将上面的homes/xxx/Sync/Beancount与本地PC上的Beancount目录建立双向同步,保持两边账本数据一致。这样无论是在PC端访问fava账本还是外部通过fava docker访问账本效果是一样的。

Frp内网穿透实现外网访问

与上面链接中给的教程稍有不同的是,我的Frp客户端是部署在软路由上的,不过大同小异。关于软路由我就不在这里赘述了,简单提一句是用的斐讯N1盒子刷的Openwrt R20.5.20固件,内置了Frp服务。

Frp需要分别配置服务端和客户端。

服务端配置

服务端我一开始是选用了一台HK本土的VPS,部署完成之后让一个朋友试了一下访问NAS的效果,反馈图片加载还是略慢。于是我就换了一台阿里云轻量服务器,实测下来在4G网络下可以比较流畅地观看DS File里面的视频,那应该非常ok了。如果对访问速度要求比较高的话,可能需要在VPS选择上下点功夫,尤其是高频访问图片/视频等文件

在服务端安装好Frp软件包,修改frps.ini配置并运行

1
2
3
4
5
6
7
8
9
10
11
[common]
bind_port = 7777
dashboard_port = 7750 # 配置Frp看板的端口
token = xxxxxx
dashboard_user = xxxx
dashboard_pwd = xxxx
vhost_http_port = 80
vhost_https_port = 443

# 启动 FRP 服务端
$ ./frps -c ./frps.ini

客户端配置

客户端由于Openwrt的固件集成了Frp服务,因此只需要在页面上填写相应的配置即可。

frpc配置

域名解析

配置好Frp服务端和客户端之后需要为fava的Http服务提供一个域名映射到公网IP。我之前闲置的域名在这里派上用场了,只需要在Cloudflare上添加 域名A 记录解析到VPS公网IP上,并添加一个用于fava访问的二级域名A记录。

创建好二级域名之后,在Frp客户端内添加一个fava服务,并配置好用户名和密码以提升访问安全。

fava二级域名配置

完成上面的配置,此时就可以在外网环境下访问家中部署在NAS上的fava服务了,在浏览器中输入fava二级域名会弹出一个登陆窗口。
fava登陆

在4G环境下验证访问fava成功
4G网络访问fava