Setup Firefly III Really Quickly

By Christopher Talke Buscaino at

We've been really trying to get ontop of our personal finances recently, and rather than buying something like You Need A Budget (YNAB) or Pocketsmith, we've opted to get Firefly III up and running since we have the ability to self-host.

So if you are also a personal finance nerd, and you know how to self-host using docker, here is a quick script to get your own Firefly III instance up and running!

#!/usr/bin/env bash

# Network
NETWORK_NAME="FIREFLY_NET"
docker network create $NETWORK_NAME

# Firefly Database Script
SQL_CONTAINER_NAME="FIREFLY_DB"

docker stop "$SQL_CONTAINER_NAME" &> /dev/null
docker kill "$SQL_CONTAINER_NAME" &> /dev/null
docker rm "$SQL_CONTAINER_NAME" &> /dev/null

docker run -d \
  -v ~/firefly/web:/var/lib/mysql \
  -e MYSQL_DATABASE=firefly \
  -e MYSQL_USER=firefly \
  -e MYSQL_PASSWORD=firefly \
  -e MYSQL_RANDOM_ROOT_PASSWORD=<random_password> \
  --restart unless-stopped \
  --network $NETWORK_NAME \
  --name=$SQL_CONTAINER_NAME \
  mysql:5.7

# Firefly Web Script
WEB_CONTAINER_NAME="FIREFLY_WEB"

docker stop "$WEB_CONTAINER_NAME" &> /dev/null
docker kill "$WEB_CONTAINER_NAME" &> /dev/null
docker rm "$WEB_CONTAINER_NAME" &> /dev/null

docker run -d \
  -v ~/firefly/web:/var/www/html/storage/upload \
  -p 8075:8080 \
  -e APP_KEY=<random_password> \
  -e DB_HOST=$SQL_CONTAINER_NAME \
  -e DB_PORT=3306 \
  -e DB_CONNECTION=mysql \
  -e DB_DATABASE=firefly \
  -e DB_USERNAME=firefly \
  -e DB_PASSWORD=firefly \
  --restart unless-stopped \
  --network $NETWORK_NAME \
  --name=$WEB_CONTAINER_NAME \
  fireflyiii/core:latest