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:端口进入登录界面,如果使用了域名,也可以使用域名登录。如果显示如下界面,则说明容器创建成功。
如果容器启动异常,页面会显示报错信息,这个时候可以使用 docker-compose logs -f
查看具体报错日志:
注意:
建议不要随意更改官方的配置,之前尝试过更改了服务名字、将硬盘卷改为本地映射,发现容器启动异常。将其改回后正常,当前并未识别到是哪个配置导致的。
四、使用
(一)创建帐号
首次登录需要注册一个新账号,按提示输入电子邮箱和密码,点击“Register”即可。
注册成功后会自动登录,然后进入创建账户界面。
这里可以看到系统默认是中文的,这是由于在配置文件中设置了中文。如果没有设置也可以在创建账户时选择切换为中文。
(二)修改货币
开始使用前可以将货币改成人民币。在页面左侧,“选项->货币”中,将启用人民币,并勾选默认
此时在点击仪表盘,可以看到创建账户界面中,货币单位变为人民币了
(三)创建账户
首次使用,可以在仪表盘界面中创建账户。填写银行名称、余额、语言,再点击“提交”完成创建。
这里以名称“建设银行”为例,创建成功后,会生产“建设银行”、“建设银行 储蓄账户”、“现金钱包”三个账户。
其中后两个账户为首次使用时系统自动创建,可以根据自己的需要,在“其他->账户->资产账户”中修改其属性,或者删除。如果需要创建多个账户,也可以在“资产账户”页面中创建。
创建账户时,可以看到有很多属性可以配置,这里比较有用的为账户角色,比如储蓄账户、信用卡等,后面进行报表统计的时候,可以通过账户角色进行统计。
除了资产账户,还可以创建收入账户、支出账户、负债账户。我习惯按照资产统计,所以只创建了资产账户,大家可以根据自己的习惯使用。
(四)记账
在左侧“记账->交易”中,可以看到有支出、收入、转账三个页面,用来记录不同类型的交易,这里以支出为例。在支出页面点击“创建新交易”
在交易信息页面填写描述、来源账户(如果是收入则填写目标账户)、日期、金额等信息,然后点击“提交”,完成一条支出交易创建。
此时,在支出界面就可以看到一条支出信息。
(五)归类整理
创建交易时,除了“描述、来源账户\目标账户、日期、金额”四个信息为必填项,我们可以看到右侧还有一些选填项,这里我用得比较多的是分类和标签。通过设置不同的分类或者标签,可以较为容易的在报表中看出钱都用在哪些地方了。
分类和标签在创建交易时,如果填写了新分类或标签,会自动创建;也可以在“归类整理”中进行提前创建,在选择。后续也能在“归类整理”中管理分类和标签。
(六)手机记账
目前手机端可以用的软件有2款,waterfly III和Abacus,waterfly III只有安卓版本,Abacus安卓和IOS版本均有。waterfly III比较符合我的使用习惯,所以手机上我主要用waterfly III来记账。当然也可以手机登录WEB网页来记账。
软件 | 图标 | 界面 |
---|---|---|
waterfly III | ||
Abacus |
手机客户端是通过OAuth授权方式登录firefly iii的,目前提供OAuth客户端和个人访问令牌两种授权方式。由于我主要用waterfly III,而waterfly III只能通过个人访问令牌方式登录,所以这里我只介绍个人访问令牌的方式。
(1) 创建个人访问令牌
在“选项->个人档案->OAuth授权”页面中创建个人访问令牌。
点击“创建新令牌”,填写名称,点击“Create”创建。
此时弹出一个窗口,其中展示的密钥即客户端登录firefly iii时使用的密钥。
(2) 客户端上登录
Abacus客户端
首次打开软件,会提示登录,在登录界面填写好主机URL后,勾选个人访问令牌,然后将上述密钥填写到对应位置,在点击登录即可。
waterfly III客户端
首次打开软件,也会提示登录,在登录界面填写好主机URL后,然后将上述密钥填写到对应位置,在点击登录即可。
五、备份和恢复
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_db
、firefly-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还提供很多强大的功能,比如预算和报表等,当前我没有用到,后续有机会再介绍。个人认为,软件只是一个工具,主要还是要有良好的消费和记账习惯,这样才能管理好自己的资金。