Firefly III — a self-hosted personal finance manager: track accounts, budgets, bills, and categories with rich reports and a double-entry ledger. Deployed as an all-in-one host-networked Nomad job: a MariaDB sidecar plus the Firefly III app with an upload volume.
Save as values.hcl, edit, then run:
# The name of the Nomad job.
job_name = "firefly-iii"
# The Nomad namespace to deploy into.
namespace = "default"
# The datacenters to deploy to.
datacenters = ["*"]
# The Firefly III container image. Pin a tag in production.
image = "fireflyiii/core:latest"
# The MariaDB image for the bundled database.
mariadb_image = "mariadb:11"
# Host port for the Firefly III web UI. The app's Apache listens on 8080; there is no env to change it, so keep this at 8080 (front with a reverse proxy for another port).
port = 8080
# Host port for the co-located MariaDB.
db_port = 3306
# Password for the Firefly III database user.
db_password = "firefly"
# Laravel APP_KEY — must be EXACTLY 32 characters. Generate a random one. CHANGE THIS.
app_key = "0123456789abcdef0123456789abcdef"
# Public URL Firefly III is served at (APP_URL). Empty = http://localhost:<port>.
app_url = ""
# UID the app runs as (www-data). The upload volume is chown'd to this at startup.
uid = 33
# Named volume for uploaded attachments (/var/www/html/storage/upload).
upload_volume = "firefly_upload"
# Named volume for MariaDB data (/var/lib/mysql). Holds all your financial data.
db_data_volume = "firefly_db_data"
# Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []
# Resources for the Firefly III app task.
resources = {
cpu = 500
memory = 512
}
# Resources for the MariaDB task.
mariadb_resources = {
cpu = 300
memory = 512
}
| Name | Type | Default | Description |
|---|---|---|---|
| job_name | string | "firefly-iii" | The name of the Nomad job. |
| namespace | string | "default" | The Nomad namespace to deploy into. |
| datacenters | list | ["*"] | The datacenters to deploy to. |
| image | string | "fireflyiii/core:latest" | The Firefly III container image. Pin a tag in production. |
| mariadb_image | string | "mariadb:11" | The MariaDB image for the bundled database. |
| port | number | 8080 | Host port for the Firefly III web UI. The app's Apache listens on 8080; there is no env to change it, so keep this at 8080 (front with a reverse proxy for another port). |
| db_port | number | 3306 | Host port for the co-located MariaDB. |
| db_password key | string | "firefly" | Password for the Firefly III database user. |
| app_key key | string | "0123456789abcdef0123456789abcdef" | Laravel APP_KEY — must be EXACTLY 32 characters. Generate a random one. CHANGE THIS. |
| app_url | string | "" | Public URL Firefly III is served at (APP_URL). Empty = http://localhost:<port>. |
| uid | number | 33 | UID the app runs as (www-data). The upload volume is chown'd to this at startup. |
| upload_volume | string | "firefly_upload" | Named volume for uploaded attachments (/var/www/html/storage/upload). |
| db_data_volume | string | "firefly_db_data" | Named volume for MariaDB data (/var/lib/mysql). Holds all your financial data. |
| constraints | list | [] | Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true". |
| resources | object | {
cpu = 500
memory = 512
} | Resources for the Firefly III app task. |
| mariadb_resources | object | {
cpu = 300
memory = 512
} | Resources for the MariaDB task. |
No variables match.
Firefly III — a self-hosted personal finance manager: track accounts, budgets, bills, and categories with rich reports and a double-entry ledger.
All-in-one host-networked Nomad job: a busybox chown init, a MariaDB prestart sidecar, and the Firefly III app.
nomad-pack registry add nomploy https://github.com/Nomploy/nomad-packs
nomad-pack run firefly-iii --registry=nomploy
| Variable | Default | Description |
|---|---|---|
port |
8080 |
Web UI port (fixed — see note). |
db_port |
3306 |
Co-located MariaDB port. |
db_password |
firefly |
Database password. |
app_key |
32-char placeholder | Laravel APP_KEY — must be exactly 32 chars; change it. |
app_url |
"" |
APP_URL; empty = http://localhost:<port>. |
uid |
33 |
User the app runs as (www-data); upload volume chown'd to it. |
upload_volume / db_data_volume |
named volumes | Uploads / MariaDB data. |
resources / mariadb_resources |
see defaults | Per-task resources. |
app_keymust be exactly 32 characters. The app's Apache binds 8080 with no env to change it — front it with a reverse proxy (or thenginx-proxy-manager/caddypack) to serve on another port/domain (8080 overlaps several packs). Pin the job to the node holding the volumes withconstraints.