Firefly III. My favorite personal finance management app
Personal finance management using an open source program
Earlier this year, I was in the market for a personal finance manager. I wanted to know where all my money went during the month, and how I can be able to optimize savings and and see where I can reduce unnecessary spending.
After trying different apps and lots of research, I ended up finding Firefly III.
What is Firefly III?
What can it do?
A light overview of Firefly III is as follows:
- You can create and edit transactions, accounts, and give them budgets, categories and tags.
- You can automate part of this with recurring transactions and auto-budgets.
- You can keep track of liabilities.
- You can setup piggy banks for savings goals and generate reports of all your transactions
If you want a more comprehensive list of features, you can check out their Introduction and features page.
For me, it's Perfect! It ticked all the boxes of what I needed.
Firefly has different options on how to host it, personally what I ended up using to host Firefly was Docker.
Docker is a software platform that allows you to build, test, and deploy applications quickly. It does this by containerizing the applications. I really love it and in the future I'll hopefully make a post talking about this amazing platform. But if you're a developer, you really need to look into it if you haven't already.
If you'd like to test out Firefly and see if it's for you, you can check out their demo site.
For those that are versed with docker, this is a sample of the contents of a docker-compose file that you can use.
version: '3.3'
services:
#The firefly app
app:
image: fireflyiii/core:latest
container_name: firefly
restart: always
volumes:
- firefly_iii_upload:/var/www/html/storage/upload
env_file: .env
ports:
- 80:8080
depends_on:
- db
#Database for firefly
db:
image: mysql
container_name: fireflydb
hostname: fireflyiiidb
restart: always
environment:
- MYSQL_RANDOM_ROOT_PASSWORD=yes
- MYSQL_USER=firefly
- MYSQL_PASSWORD=secret_firefly_password
- MYSQL_DATABASE=firefly
volumes:
- firefly_iii_db:/var/lib/mysql
volumes:
firefly_iii_upload:
firefly_iii_db:
Make sure to change MYSQL_PASSWORD = "Your own strong password"
This will deploy the firefly application as well as the SQL database for it and get you started. Personally, I also add the following to my docker-compose file as well:
#phpmyadmin - To check database
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: pma
links:
- db
environment:
PMA_HOST: db
PMA_PORT: 3306
PMA_ARBITRARY: 1
restart: always
ports:
- 8081:80
#mysql-cron-backup - Creates automatic backups of fireflydb
mysql-cron-backup:
container_name: software_firefly_db_backuper
image: fradelg/mysql-cron-backup
restart: always
depends_on:
- db
volumes:
- ./mysql_backup:/backup
environment:
- MYSQL_HOST=fireflydb
- MYSQL_USER=firefly
- MYSQL_PASSWORD=secret_firefly_password
- MAX_BACKUPS=15
- INIT_BACKUP=1
- CRON_TIME=0 * * * * # Every hour at minute 0
- GZIP_LEVEL=9 # High compression level
I use the mysql-cron-backup container to create periodical backups for my firefly database so I'm able to restore it in case anything goes wrong, and I use phpadmin to help me access the database directly.
If you have any questions, don't hesitate to contact me. Cheers.