记账软件相信大家对它都不陌生,有很多小伙伴在问我有没有好用的免费记账软件,或者能不能在群晖上搭建一个开源的记账软件。

大家都知道老宁是个程序员,前几年也想搞个记账软件,刚好对记账软件有一点点研究。对于一个优秀的记账软件,有一个功能老宁觉得是必不可少的,那就是:定时(周期)记账功能。

什么叫定时记账呢?打个比方,每个月都会在固定时间扣的贷款,每天的固定支出,每年的会员订阅费用等等。

有了定时记账的功能,才能简化我们周期性的重复工作,才是一个完整的记账软件。

在软件开发上来说,如果一个记账软件有定时记账功能,那么对人员、程序的要求会高很多。

今天介绍的这款开源记账软件 Firefly III,除了定时记账的功能,还有更加高级的功能,一起来看看。(ps:文章很长,可以收藏了慢慢看)

功能展示

快捷指令记账

快捷指令,选择记账类型

来源账户,可以在 Firefly III 中设置多种账户。

记账金额。

存钱罐

可以在 Firefly III 的存钱罐界面添加存钱计划,看看还有多久能买一张摩托车?

定期交易

设定一些规则和定期交易,让你记账更加的便捷。比如房贷,停车费,话费,免去定时重复操作的烦恼。

报表

每个账户到底支出了多少钱?你月光了么?通过报表功能可以一目了然。

项目地址

https://github.com/firefly-iii/firefly-iii

项目特性

  • 完全自托管和隔离的,除非明确告知,否则永远不会联系外部服务器
  • 创建定期交易来管理资金
  • 基于规则的事务处理
  • 复式记账系统
  • 两步验证

安装部署

下面介绍两种部署的方法,通过Docker Compose和群晖部署,老宁会着重介绍如何通过群晖来手动部署。

Docker Compose

version: '3.3'

services:
  app:
    image: fireflyiii/core:latest
    hostname: app
    container_name: firefly_iii_core
    restart: always
    volumes:
      - firefly_iii_upload:/var/www/html/storage/upload
    env_file: .env
    networks:
      - firefly_iii
    ports:
      - 80:8080
    depends_on:
      - db
  db:
    image: mariadb:lts
    hostname: db
    container_name: firefly_iii_db
    restart: always
    env_file: .db.env
    networks:
      - firefly_iii
    volumes:
      - firefly_iii_db:/var/lib/mysql
  cron:
    #
    # To make this work, set STATIC_CRON_TOKEN in your .env file or as an environment variable and replace REPLACEME below
    # The STATIC_CRON_TOKEN must be *exactly* 32 characters long
    #
    image: alpine
    restart: always
    container_name: firefly_iii_cron
    command: sh -c "echo \"0 3 * * * wget -qO- http://app:8080/api/v1/cron/REPLACEME\" | crontab - && crond -f -L /dev/stdout"
    networks:
      - firefly_iii

volumes:
   firefly_iii_upload:
   firefly_iii_db:

networks:
  firefly_iii:
    driver: bridge

环境变量可以在 https://github.com/firefly-iii/firefly-iii/blob/main/.env.example 获取,下载后需要根据自身情况进行修改。

群晖部署

如果要通过群晖进行手动部署,可以把整个过程分为三个部分:数据库、firefly iii主程序和定时任务。

因为过程比较繁杂,我会尽可能把操作步骤写详细,如果使用群晖手动部署成功,相信你对Docker相关知识的认知有一个巨大提升。

数据库

首先我们要创建一个数据库用来保存 Firefly III 的数据。关于数据库的管理,可以查看老宁写过的文章。

通过群晖 phpAdmin 套件,登录到数据库管理界面,在账户菜单下新增账户。

输入用户名和密码,并勾选左下角创建同名数据库选项,最后记得点击最下面的执行。这样在创建好账户的同时,也会创建一个新的数据库。

当然也可以直接创建一个数据库,用root用户直接来访问也是可以的。

Firefly III

接着就是在群晖的 Container Manager 上搭建 Firefly III 主程序了。

打开 Container Manager 套件,在注册表中搜索firefly,下载fireflyiii/core镜像。

在等待下载的过程中,在 File Station 套件中创建 fireflyiii文件夹,并创建一个名为firefly_iii_upload的子文件夹。

添加端口映射为8085,设置存储空间文件夹为前面创建的文件,容器路径为/var/www/html/storage/upload

接着增加环境变量如下:

  • APP_KEY:必须为32位
  • DB_HOST:数据库的地址(群晖的IP)
  • DB_PORT:端口(数据库端口)
  • DB_CONNECTION:数据库类型
  • DB_DATABASE:数据库名称(前面创建的)
  • DB_USERNAME:用户名(前面设置的)
  • DB_PASSWORD:密码(前面设置的)

如果后续在配置反代的时候出现问题,可以在环境变量中加入APP_URLTRUSTED_PROXIES两个环境变量解决,对应的值为最终访问的https地址和*号。

其他配置保持默认,启动容器后,要多等一会儿,在日志中看到如下输出则代表安装成功。

定时任务

前面两步配置完成后,其实我们就可以使用 Firefly III 的记账功能了。

接下来需要配置定时任务。

如果你对定时记账没有要求可以跳过该步骤直接使用。如果你是第一次安装,请注册登录账号后,再进行定时任务的配置。

打开 Firefly III 菜单的个人档案,获取命令行令牌。

把令牌复制下来。

打开群晖的控制面板,在任务计划中新增一个计划任务->用户定义的脚本,时间选择每天3点执行。

在任务设置中,增加自定义脚本,内容为curl http://192.168.2.99:8085/api/v1/cron/xxxx,最后的xxxx替换为前面的令牌,IP为群晖的IP,端口为 Firefly III 容器映射的本地端口。

可以勾选通过电子邮件发送运行详情,这样脚本执行的日志会被发送到邮箱里。

如果配置正确,当我们手动执行了一次创建的任务后,定期交易页面的横幅会消失。

Firefly III 使用方法

在浏览器输入【http://群晖IP:8085】打开 Firefly III 网页后台,第一次进入必须注册一个新的账户(只能注册一次,所以这里的截图用的是登录界面)。

注册成功后,需要先指定一个账户和余额,再把语言设置为中文。

账户

我们可以在账户里创建资产账户、支出账户、收入账户、债务账户几种账户。

资产账户

资产账户代表了你拥有的、可以用于支付的资金来源。

我们在创建资产账户的时候,除了必须要设置的账户名称,和支出、收入账户最大的区别就是可以设置一个初始余额,就是是账户的资金。

支出账户

支出账户用于记录你向其支付款项的目的地或实体。比如我设置的楼下小超市,支出账户是没办法设置余额的,它是用来统计资金流向的。

收入账户

收入账户则与支出账户相反,它用于记录向你支付款项的来源。

债务账户

债务账户用于跟踪你所欠的款项,比如贷款和信用卡债务。

在 Firefly III 中创建好各类账户后,后面要进行记账就方便很多,也便于后期统计、追踪资金的流向。

创建交易

我们可以在交易下选择支出来创建一个新的支出。

比如买了包烟,来源账户可以选择资产账户里的账户,而目标账户可以选择支出账户里的楼下小超市。这样就能方便我们统计在某个地方具体花了多少钱。

定期交易

最后来看看如何创建定期交易。

如果在创建定期交易页面有这样一行字,那就代表没有配置好定时任务,可以回到前面群晖部署查看如何配置,否则创建的定期交易不会执行。

在定期交易中,可以选择重复类型,也就是执行交易任务的周期。

当定期交易执行后,可以在交易中看到已经执行的定期交易。

客户端

而想要使用客户端,则必须要创建个人访问令牌。有了个人访问令牌,输入到客户端中,才能链接到 Firefly III 后台。

安卓

iOS

在iOS上没有单独的app,只能通过快捷指令来完成。在 Add Transaction 里面设置好服务器的链接和令牌token进行链接,Add Transaction 会依赖其他三个快捷指令。

由于篇幅的限制,就不再介绍客户端的使用方法了,那么复杂的 Firefly III 后台服务都被你搭建起来了,还搞不定一个小小客户端?

对了,老宁搞了个NAS论坛,地址是:https://synocircle.top,APK安装包和快捷指令都可以在论坛上找到。

最后修改:2024 年 08 月 12 日
如果觉得我的文章对你有用,就给个赏~~写文章,费烟~