Firefly III
Free and open source personal finance manager
Alternative to: ynab, mint, quickbooks
Firefly III is a self-hosted personal finance manager that helps you track expenses and income so you can spend less and save more. It supports budgets, categories, and tags, can import transaction data from banks and other external tools, and produces detailed financial reports and charts. Firefly III also ships with an autonomous rule engine so recurring transactions can be categorized and tagged automatically.
Firefly III Docker Compose example
Self-host Firefly III on your own server, homelab, or VPS starting from this Docker Compose example.
It runs Firefly III in Docker containers using the official fireflyiii/core:latest, mariadb:lts images, with persistent volumes and automatic restarts preconfigured.
Review the environment variables and adjust them to your setup, save the file as compose.yml (or docker-compose.yml), and start the stack with docker compose up -d.
services:
app:
image: fireflyiii/core:latest
restart: unless-stopped
volumes:
- upload:/var/www/html/storage/upload
environment:
APP_ENV: "production"
APP_DEBUG: "false"
# Encryption key. MUST be a string of exactly 32 characters. Replace with a random value before exposing publicly.
APP_KEY: "SomeRandomStringOf32CharsExactly"
# Email address of the instance owner/administrator.
SITE_OWNER: "mail@example.com"
# Default interface language.
DEFAULT_LANGUAGE: "en_US"
# Locale used for number and date formatting. "equal" follows DEFAULT_LANGUAGE.
DEFAULT_LOCALE: "equal"
# Timezone used for all dates and scheduled tasks.
TZ: "UTC"
# Set to ** when running behind a reverse proxy so Firefly III trusts the forwarded headers.
TRUSTED_PROXIES: "**"
LOG_CHANNEL: "stack"
APP_LOG_LEVEL: "notice"
# Public URL where Firefly III is reached.
APP_URL: "http://localhost"
DB_CONNECTION: "mysql"
DB_HOST: "db"
DB_PORT: "3306"
DB_DATABASE: "firefly"
DB_USERNAME: "firefly"
DB_PASSWORD: "secret_firefly_password"
depends_on:
db:
condition: service_healthy
db:
image: mariadb:lts
restart: unless-stopped
environment:
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
MYSQL_USER: "firefly"
MYSQL_PASSWORD: "secret_firefly_password"
MYSQL_DATABASE: "firefly"
volumes:
- db:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 10
volumes:
upload:
db: Prefer a managed setup? WinterFlow installs, configures, and updates Firefly III for you using this same Docker Compose configuration.