---
title: "Deploy Firefly III"
description: "One-click Firefly III personal finance manager with managed MySQL"
category: "Analytics"
url: https://railway.com/deploy/firefly-iii-1
---

# Deploy Firefly III

One-click Firefly III personal finance manager with managed MySQL

**[Deploy Firefly III on Railway](https://railway.com/template/firefly-iii-1)**

- **Creator:** BURNI80
- **Category:** Analytics

## Template content

### MySQL https://devicons.railway.app/i/mysql.svg

- **Image:** mysql:9.4
- **Start command:** `docker-entrypoint.sh mysqld --innodb-use-native-aio=0 --disable-log-bin --performance_schema=0 --innodb-buffer-pool-size=1G`

### Firefly https://user-images.githubusercontent.com/633783/132589722-658d39a5-6700-436e-9557-18fd925712bf.png

- **Image:** fireflyiii/core:version-6.6.6
- **Start command:** `cat > /tmp/create_user.php <<'EOF'
<?php
require "/var/www/html/vendor/autoload.php";
$app = require "/var/www/html/bootstrap/app.php";
$app->make("Illuminate\Contracts\Console\Kernel")->bootstrap();
$email = getenv("FF_ADMIN_EMAIL");
$pass  = getenv("FF_ADMIN_PASSWORD");
if (!$email || !$pass) { exit(0); }
$repo = app(FireflyIII\Repositories\User\UserRepositoryInterface::class);
if ($repo->count() === 0) {
  $user = $repo->store(["blocked" => false, "blocked_code" => null, "email" => $email, "role" => "owner"]);
  $user->password = Illuminate\Support\Facades\Hash::make($pass);
  $user->save();
  echo "USER_CREATED\n";
}
EOF
for i in $(seq 1 30); do php /tmp/create_user.php >/dev/null 2>&1 && break; sleep 4; done
exec /package/admin/s6/command/s6-svscan -d4 -- /run/service`
- **Health check:** /login
- **Public domain:** Yes

## Documentation

# Deploy and Host Firefly III on Railway

Firefly III is an open-source, self-hosted personal finance manager. Track income and expenses, build budgets, and get a clear picture of your money without sending your financial data to a commercial service. This template deploys Firefly III with a managed MySQL database and persistent storage in one click.

## About Hosting Firefly III

Firefly III is a PHP (Laravel) application backed by a relational database. This template bundles the official `fireflyiii/core` image (pinned, never `latest`) with Railway's managed MySQL and a 512 MB persistent volume for uploads and attachments. Database credentials and the public URL are wired automatically via references, so there is nothing to configure. On first boot the app runs its database migrations — expect the healthcheck to restart for 5–10 minutes while it initializes. The admin account is created automatically from the variables you fill in during deploy; log in and you are ready to add your accounts.

## Common Use Cases

- **Personal budgeting** — track income and expenses month over month and stay within your budgets.
- **Multi-account money management** — monitor bank accounts, cash, credit cards, and investments from one dashboard.
- **Automatic categorization and reporting** — use rules to categorize transactions and generate clear, exportable reports.

## Dependencies for Firefly III Hosting

- **MySQL-compatible database** — provided as a Railway managed MySQL service, private to your project and auto-wired.
- **PHP web runtime** — provided by the official `fireflyiii/core` Docker image (version `6.6.6`, pinned).

### Deployment Dependencies

- [Firefly III official docs](https://docs.firefly-iii.org)
- [Firefly III on GitHub](https://github.com/firefly-iii/firefly-iii)
- [Official Docker image on Docker Hub](https://hub.docker.com/r/fireflyiii/core)

### Implementation Details

The template wires everything with Railway references — no hardcoded credentials. At deploy time you only fill in three variables:

| Variable | Purpose |
|---|---|
| `FF_ADMIN_EMAIL` | Email of the owner/admin account, created automatically on first boot |
| `FF_ADMIN_PASSWORD` | Password for that admin account |
| `TRUSTED_PROXIES` | Set to `**` (required behind Railway's proxy) |

Everything else is generated automatically: `APP_KEY` (32 alphanumeric chars, shared with the DB secret), `APP_URL` (your Railway public domain), and all `DB_*` connection variables (via `${{MySQL.*}}` references). Uploads persist to a 512 MB volume mounted at `/var/www/html/storage/upload`.

## Why Deploy Firefly III on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying Firefly III on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.


## Similar templates

- [Matomo Analytics + MariaDB](https://railway.com/deploy/matomo-analytics-mariadb) — Privacy-friendly analytics with MariaDB and persistent volumes.
- [Bugsink](https://railway.com/deploy/bugsink) — Self-hosted Error Tracking. Sentry-SDK compatible
- [SubTrackr](https://railway.com/deploy/bscottsubtrackr) — Self-hosted Subscription Tracker

Open this page in a browser: https://railway.com/deploy/firefly-iii-1
