Docker系列 基于Firefly III搭建记账平台

日志

  • 2024-04-21:新增备份和恢复的方法。

一、前言

从2015年开始,我已经持续记账9年了。最近由于一些变故,大约三个月没有记账,导致部分账目已经核对困难,只能创建新的账本来记账。之前一直是用“随手记”来记账,除了有广告外,其本身是完全能满足我的使用要求的。不过最近刚好在倒腾NAS服务器,所以想着是不是可以在NAS上部署一个记账的应用。

在百度上大概找了下,目前发现较好的有Firefly III和九快记账两个开源软件。Firefly III是国外一款较为成熟的软件,而九快记账是国内一位大神自己开发维护的软件。考虑到软件替换和维护的难易度,这里选择了较为成熟Firefly III来搭建自己的记账平台。

二、部署

(一)容器配置文件

官方文档提供了完整的安装指导,我大体上也是按照官方的文档操作的,如果有问题,可以在官方文档中查找解决办法。

下载官方docker-compose配置文件,对必要设置进行修改。

  • ports:端口改为自己想要的端口
  • STATIC_CRON_TOKEN:cron job容器的token,需要设置为32长度的字符串,这个配置要和.env中的配置一样。

详细介绍:https://docs.firefly-iii.org/how-to/firefly-iii/advanced/cron/

(二)数据库配置文件

下载数据库的环境变量配置文件,下载链接:https://raw.githubusercontent.com/firefly-iii/firefly-iii/main/.env.example
将其重命名为 .db.env和docker-compose.yml放在同一个路径。

(1) 修改配置文件,将数据库用户名和密码设置成自己想要的

MYSQL_RANDOM_ROOT_PASSWORD=yes
MYSQL_USER=firefly
MYSQL_PASSWORD=firefly
MYSQL_DATABASE=firefly

(三)firefly-iii的配置文件

下载链接:https://raw.githubusercontent.com/firefly-iii/docker/main/database.env
将其重命名为 .env和docker-compose.yml放在同一个路径。

(1) 修改配置文件,将数据库用户名和密码设置成和 .db.env中相同。

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=firefly
DB_USERNAME=firefly
DB_PASSWORD=firefly

(2) 将STATIC_CRON_TOKEN配置成和docker-compose.yml中配置成一样的。

STATIC_CRON_TOKEN=

(3) 由于使用了容器,需要使能代理,和适配外部访问的URL。

TRUSTED_PROXIES=**
APP_URL=https://example.com

(4) 设置语言为中文。

DEFAULT_LANGUAGE=zh_CN

(5) 设置北京时间。

TZ=Asia/Shanghai

三、启动

输入指令 docker-compose up -d启动容器,浏览器输入ip:端口进入登录界面,如果使用了域名,也可以使用域名登录。如果显示如下界面,则说明容器创建成功。
38ed62083f839b45dc991df78770669c.png

如果容器启动异常,页面会显示报错信息,这个时候可以使用 docker-compose logs -f查看具体报错日志:
46184038f5fc950a301cf0314ae00d4c.png

注意:
建议不要随意更改官方的配置,之前尝试过更改了服务名字、将硬盘卷改为本地映射,发现容器启动异常。将其改回后正常,当前并未识别到是哪个配置导致的。

四、使用

(一)创建帐号

首次登录需要注册一个新账号,按提示输入电子邮箱和密码,点击“Register”即可。
38ed62083f839b45dc991df78770669c.png
注册成功后会自动登录,然后进入创建账户界面。
8be4880431b310c515dfb51d258b7d00.png

这里可以看到系统默认是中文的,这是由于在配置文件中设置了中文。如果没有设置也可以在创建账户时选择切换为中文。
687a1ef782f42f3f005f19eb81cb0936.png

(二)修改货币

开始使用前可以将货币改成人民币。在页面左侧,“选项->货币”中,将启用人民币,并勾选默认
0ba0df6939e6faef199883949d269756.png

此时在点击仪表盘,可以看到创建账户界面中,货币单位变为人民币了
b7a28380d2060264a704c433b49fa7b3.png

(三)创建账户

首次使用,可以在仪表盘界面中创建账户。填写银行名称、余额、语言,再点击“提交”完成创建。
2293f9f1c25bc1ae44aaffbc366d657d.png
这里以名称“建设银行”为例,创建成功后,会生产“建设银行”、“建设银行 储蓄账户”、“现金钱包”三个账户。
57ce16e221683f7f0b1b1964d606b5b7.png

其中后两个账户为首次使用时系统自动创建,可以根据自己的需要,在“其他->账户->资产账户”中修改其属性,或者删除。如果需要创建多个账户,也可以在“资产账户”页面中创建。
86c3cc2ee0f20be45ff3dacb509df6a3.png

创建账户时,可以看到有很多属性可以配置,这里比较有用的为账户角色,比如储蓄账户、信用卡等,后面进行报表统计的时候,可以通过账户角色进行统计。
27619ea0171884c410f596b24027f031.png

除了资产账户,还可以创建收入账户、支出账户、负债账户。我习惯按照资产统计,所以只创建了资产账户,大家可以根据自己的习惯使用。
45a7b0a2d3f99ad167da86e8e01d36b6.png

(四)记账

在左侧“记账->交易”中,可以看到有支出、收入、转账三个页面,用来记录不同类型的交易,这里以支出为例。在支出页面点击“创建新交易”
2f86010aef509b6ac692b9f4f90b6eb9.png
在交易信息页面填写描述、来源账户(如果是收入则填写目标账户)、日期、金额等信息,然后点击“提交”,完成一条支出交易创建。
ecac467fb6056fef393da762f0fe1a68.png
此时,在支出界面就可以看到一条支出信息。
fbc2d33b4441dc507d04de43d52fdbc4.png

(五)归类整理

创建交易时,除了“描述、来源账户\目标账户、日期、金额”四个信息为必填项,我们可以看到右侧还有一些选填项,这里我用得比较多的是分类和标签。通过设置不同的分类或者标签,可以较为容易的在报表中看出钱都用在哪些地方了。
272efd6e59d15a034fa70ca389fd220a.png

分类和标签在创建交易时,如果填写了新分类或标签,会自动创建;也可以在“归类整理”中进行提前创建,在选择。后续也能在“归类整理”中管理分类和标签。
79ced84268d4af05a323cc9261d14d3f.png

(六)手机记账

目前手机端可以用的软件有2款,waterfly III和Abacus,waterfly III只有安卓版本,Abacus安卓和IOS版本均有。waterfly III比较符合我的使用习惯,所以手机上我主要用waterfly III来记账。当然也可以手机登录WEB网页来记账。

软件图标界面
waterfly III2779832ca44137052c530bc766702218.pnge621cc1d2aaef6195870835cfc7c0804.png
Abacusde5523ae1f721408847b992264eb22ff.png86706035892f19395b23e392f283ffa0.png

手机客户端是通过OAuth授权方式登录firefly iii的,目前提供OAuth客户端和个人访问令牌两种授权方式。由于我主要用waterfly III,而waterfly III只能通过个人访问令牌方式登录,所以这里我只介绍个人访问令牌的方式。

(1) 创建个人访问令牌
在“选项->个人档案->OAuth授权”页面中创建个人访问令牌。
e2ed9c0501f4b41c9e08ccd12ad64438.png
点击“创建新令牌”,填写名称,点击“Create”创建。
5add361fc1031a07c7c467503ad73ae3.png
此时弹出一个窗口,其中展示的密钥即客户端登录firefly iii时使用的密钥。
f4c3a94513328cdd2893f9e818062bd4.png

(2) 客户端上登录
Abacus客户端
首次打开软件,会提示登录,在登录界面填写好主机URL后,勾选个人访问令牌,然后将上述密钥填写到对应位置,在点击登录即可。
0c250956b464341bfca81e01cba4e154.png

waterfly III客户端
首次打开软件,也会提示登录,在登录界面填写好主机URL后,然后将上述密钥填写到对应位置,在点击登录即可。
e8fd341c1ff5692493ed6093de68d76f.png

五、备份和恢复

Firefly III没有内置备份和恢复的功能,需要使用外部工具进行备份。这里需要注意,Firefly III中的账单导出数据功能无法作为备份使用。

容器部署方案官方提供了三种备份方法(1)使用docker指令手动备份;(2)在容器中使用crontab备份;(3)使用脚本和crontab进行备份

本文使用docker-compose编排工具部署,可以直接使用方法(3)。该方法使用官方推荐GitHub用户@dawid-czarnecki.制作的脚本 firefly-iii-backuper.sh进行备份;然后再配合crontab服务,设置定时任务实现自动备份。

firefly-iii-backuper.sh会将docker-compose.yml.db.env.env和容器卷firefly-iii_firefly_iii_dbfirefly-iii_firefly_iii_upload备份,并打包成一个压缩包;恢复时可以通过这个压缩包进行恢复。

备份
下载firefly-iii-backuper.sh脚本,在系统中创建一个cron任务,实现每天自动备份。
这里需要注意,脚本只能识别docker-compose.yml文件,无法识别docker-compose.yaml

1 01 * * * bash /home/myname/firefly-iii-backuper.sh backup /home/backup/$(date '+%F').tar

恢复
容器卷在恢复时,需要容器正在运行。

bash /home/myname/firefly-iii-backuper.sh restore /home/backup/firefly-2022-01-01.tar

其他方法可以参考官方文档:https://docs.firefly-iii.org/how-to/firefly-iii/advanced/backup/

六、总结

至此,Firefly III的部署和使用就介绍完了。这里主要介绍的是我使用过的功能,Firefly III还提供很多强大的功能,比如预算和报表等,当前我没有用到,后续有机会再介绍。个人认为,软件只是一个工具,主要还是要有良好的消费和记账习惯,这样才能管理好自己的资金。

消息盒子

# 暂无消息 #

只显示最新10条未读和已读信息