---
title: "Deploy Invoice Ninja"
description: "Invoice Ninja 5 invoicing, quotes and payments with MySQL and PDF output"
category: "Other"
url: https://railway.com/deploy/invoice-ninja-2
---

# Deploy Invoice Ninja

Invoice Ninja 5 invoicing, quotes and payments with MySQL and PDF output

**[Deploy Invoice Ninja on Railway](https://railway.com/template/invoice-ninja-2)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/invoice-ninja-2/manifest.json

- **Creator:** Agaz Self-Host
- **Category:** Other

## Template content

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

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

### Invoice Ninja https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/invoice-ninja.svg

- **Image:** invoiceninja/invoiceninja-debian:5.13.53@sha256:217a0f2d45403b9562f90af51762cdd22bc6d9728c9a8751571ff6bfefc51f64
- **Start command:** `sh -c 'echo IyEvYmluL3NoCiMgSW52b2ljZSBOaW5qYSBvbiBSYWlsd2F5OiBzdGFydCBzY3JpcHQgZm9yIHRoZSBvZmZpY2lhbCBpbnZvaWNlbmluamEvaW52b2ljZW5pbmphLWRlYmlhbiBpbWFnZS4KIyBSYWlsd2F5IHZvbHVtZXMgY2FuJ3QgYmUgc2hhcmVkIGJldHdlZW4gc2VydmljZXMsIHNvIGluc3RlYWQgb2YgdXBzdHJlYW0ncyBzZXBhcmF0ZSBuZ2lueAojIGNvbnRhaW5lciB0aGlzIGFkZHMgQ2FkZHkgKHBpbm5lZCwgY2hlY2tzdW0tdmVyaWZpZWQpIG5leHQgdG8gUEhQLUZQTSwgdGhlIHF1ZXVlIHdvcmtlcnMgYW5kIHRoZQojIHNjaGVkdWxlciB1bmRlciB0aGUgaW1hZ2UncyBvd24gc3VwZXJ2aXNvcmQuIFRoZW4gaXQgaGFuZHMgb3ZlciB0byB0aGUgaW1hZ2UncyBpbml0LnNoLgpzZXQgLWV1CgojIC0tLS0gRGVmYXVsdHMgKGFueSBvZiB0aGVzZSBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIGEgc2VydmljZSB2YXJpYWJsZSkgLS0tLQpleHBvcnQgUE9SVD0iJHtQT1JUOi04MDgwfSIKZXhwb3J0IEFQUF9FTlY9IiR7QVBQX0VOVjotcHJvZHVjdGlvbn0iCmV4cG9ydCBBUFBfREVCVUc9IiR7QVBQX0RFQlVHOi1mYWxzZX0iCmV4cG9ydCBSRVFVSVJFX0hUVFBTPSIke1JFUVVJUkVfSFRUUFM6LXRydWV9IgpleHBvcnQgVFJVU1RFRF9QUk9YSUVTPSIke1RSVVNURURfUFJPWElFUzotKn0iCmV4cG9ydCBJU19ET0NLRVI9IiR7SVNfRE9DS0VSOi10cnVlfSIKZXhwb3J0IFBERl9HRU5FUkFUT1I9IiR7UERGX0dFTkVSQVRPUjotc25hcHBkZn0iCmV4cG9ydCBGSUxFU1lTVEVNX0RJU0s9IiR7RklMRVNZU1RFTV9ESVNLOi1kZWJpYW5fZG9ja2VyfSIKZXhwb3J0IERCX0NPTk5FQ1RJT049IiR7REJfQ09OTkVDVElPTjotbXlzcWx9IgpleHBvcnQgUVVFVUVfQ09OTkVDVElPTj0iJHtRVUVVRV9DT05ORUNUSU9OOi1kYXRhYmFzZX0iCmV4cG9ydCBDQUNIRV9EUklWRVI9IiR7Q0FDSEVfRFJJVkVSOi1maWxlfSIKZXhwb3J0IFNFU1NJT05fRFJJVkVSPSIke1NFU1NJT05fRFJJVkVSOi1maWxlfSIKZXhwb3J0IFNDT1VUX0RSSVZFUj0iJHtTQ09VVF9EUklWRVI6LW51bGx9IgojIE1haWwgaXMgb3B0aW9uYWw6IHdpdGggbm8gTUFJTF9IT1NULCBtYWlsIGdvZXMgdG8gdGhlIGxvZy4gQmxhbmsgb3B0aW9uYWwgdmFsdWVzIGFyZSB1bnNldCBzbwojIExhcmF2ZWwncyBvd24gZGVmYXVsdHMgKHBvcnQgNTg3LCB0bHMpIGFwcGx5Lgpmb3IgdiBpbiBNQUlMX01BSUxFUiBNQUlMX0hPU1QgTUFJTF9QT1JUIE1BSUxfVVNFUk5BTUUgTUFJTF9QQVNTV09SRCBNQUlMX0VOQ1JZUFRJT04gTUFJTF9TQ0hFTUUgTUFJTF9GUk9NX0FERFJFU1MgTUFJTF9GUk9NX05BTUU7IGRvCiAgZXZhbCAiWyAtbiBcIlwkeyR2Oi19XCIgXSB8fCB1bnNldCAkdiIKZG9uZQppZiBbIC1uICIke01BSUxfSE9TVDotfSIgXTsgdGhlbiBleHBvcnQgTUFJTF9NQUlMRVI9IiR7TUFJTF9NQUlMRVI6LXNtdHB9IjsgZWxzZSBleHBvcnQgTUFJTF9NQUlMRVI9IiR7TUFJTF9NQUlMRVI6LWxvZ30iOyBmaQpleHBvcnQgTUFJTF9GUk9NX0FERFJFU1M9IiR7TUFJTF9GUk9NX0FERFJFU1M6LSR7SU5fVVNFUl9FTUFJTDotfX0iCmV4cG9ydCBNQUlMX0ZST01fTkFNRT0iJHtNQUlMX0ZST01fTkFNRTotSW52b2ljZSBOaW5qYX0iCgojIC0tLS0gQ2FkZHkgd2ViIHNlcnZlciAoY2FjaGVkIG9uIHRoZSBzdG9yYWdlIHZvbHVtZSwgdmVyaWZpZWQgb24gZXZlcnkgYm9vdCkgLS0tLQpDQUREWV9WRVJTSU9OPTIuMTEuOQpDQUREWV9TSEE1MTI9MGU4NTU0NDM0MDI5MGExNmNlNGJmYjc2ZmU3ZDY1ZTlkZTFiZjNhNmU2N2Y1Y2NmZmYzMGIzMGQyN2VhNGM3M2UwNzgwNzdiN2JmM2U1OGFlNjBiNmIxMmU0NDMyNzcwNTI4NzA1OWM3NzViY2E1NzgyZThlZTg1ZWE3ZWRkNzUKQ0FDSEVfRElSPS92YXIvd3d3L2h0bWwvc3RvcmFnZS9yYWlsd2F5ClRHWj0iJENBQ0hFX0RJUi9jYWRkeV8ke0NBRERZX1ZFUlNJT059X2xpbnV4X2FtZDY0LnRhci5neiIKbWtkaXIgLXAgIiRDQUNIRV9ESVIiCmlmICEgZWNobyAiJENBRERZX1NIQTUxMiAgJFRHWiIgfCBzaGE1MTJzdW0gLWMgLSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICBlY2hvICJEb3dubG9hZGluZyBDYWRkeSAkQ0FERFlfVkVSU0lPTi4uLiIKICBjdXJsIC1mc1NMIC0tcmV0cnkgNSAtLXJldHJ5LWRlbGF5IDMgLW8gIiRUR1oudG1wIiBcCiAgICAiaHR0cHM6Ly9naXRodWIuY29tL2NhZGR5c2VydmVyL2NhZGR5L3JlbGVhc2VzL2Rvd25sb2FkL3Yke0NBRERZX1ZFUlNJT059L2NhZGR5XyR7Q0FERFlfVkVSU0lPTn1fbGludXhfYW1kNjQudGFyLmd6IgogIGVjaG8gIiRDQUREWV9TSEE1MTIgICRUR1oudG1wIiB8IHNoYTUxMnN1bSAtYyAtCiAgbXYgIiRUR1oudG1wIiAiJFRHWiIKZmkKdGFyIC14emYgIiRUR1oiIC1DIC91c3IvbG9jYWwvYmluIGNhZGR5CmNobW9kIDA3NTUgL3Vzci9sb2NhbC9iaW4vY2FkZHkKCm1rZGlyIC1wIC9ldGMvY2FkZHkKY2F0ID4gL2V0Yy9jYWRkeS9DYWRkeWZpbGUgPDwnQ0FERFknCnsKCWFkbWluIG9mZgoJYXV0b19odHRwcyBvZmYKCXBlcnNpc3RfY29uZmlnIG9mZgoJc2VydmVycyB7CgkJdHJ1c3RlZF9wcm94aWVzIHN0YXRpYyAwLjAuMC4wLzAgOjovMAoJfQp9Cgo6eyRQT1JUfSB7Cglyb290ICogL3Zhci93d3cvaHRtbC9wdWJsaWMKCWVuY29kZSBnemlwCglyZXF1ZXN0X2JvZHkgewoJCW1heF9zaXplIDUwTUIKCX0KCWhlYWRlciB7CgkJWC1GcmFtZS1PcHRpb25zIFNBTUVPUklHSU4KCQlYLUNvbnRlbnQtVHlwZS1PcHRpb25zIG5vc25pZmYKCQktU2VydmVyCgl9CglAaGlkZGVuIHsKCQlwYXRoICovLioKCQlub3QgcGF0aCAvLndlbGwta25vd24vKgoJfQoJcmVzcG9uZCBAaGlkZGVuIDQwNAoJcGhwX2Zhc3RjZ2kgMTI3LjAuMC4xOjkwMDAKCWZpbGVfc2VydmVyCn0KQ0FERFkKCmNhdCA+IC9ldGMvc3VwZXJ2aXNvci9jb25mLmQvY2FkZHkuY29uZiA8PCdTVVAnCltwcm9ncmFtOmNhZGR5XQpjb21tYW5kPS91c3IvbG9jYWwvYmluL2NhZGR5IHJ1biAtLWNvbmZpZyAvZXRjL2NhZGR5L0NhZGR5ZmlsZSAtLWFkYXB0ZXIgY2FkZHlmaWxlCmF1dG9zdGFydD10cnVlCmF1dG9yZXN0YXJ0PXRydWUKcHJpb3JpdHk9MTAKdXNlcj13d3ctZGF0YQplbnZpcm9ubWVudD1IT01FPSIvdG1wIixYREdfREFUQV9IT01FPSIvdG1wL2NhZGR5LWRhdGEiLFhER19DT05GSUdfSE9NRT0iL3RtcC9jYWRkeS1jb25maWciCnN0ZG91dF9sb2dmaWxlPS9kZXYvZmQvMQpzdGRvdXRfbG9nZmlsZV9tYXhieXRlcz0wCnJlZGlyZWN0X3N0ZGVycj10cnVlClNVUAoKIyAtLS0tIFdhaXQgZm9yIE15U1FMIChpbml0LnNoIHJ1bnMgbWlncmF0aW9ucyBzdHJhaWdodCBhd2F5KSAtLS0tCmVjaG8gIldhaXRpbmcgZm9yIE15U1FMIGF0ICR7REJfSE9TVDotP306JHtEQl9QT1JUOi0zMzA2fS4uLiIKaT0wCnVudGlsIHBocCAtciAndHJ5IHsgbmV3IFBETygibXlzcWw6aG9zdD0iLmdldGVudigiREJfSE9TVCIpLiI7cG9ydD0iLihnZXRlbnYoIkRCX1BPUlQiKSA/OiAzMzA2KS4iO2RibmFtZT0iLmdldGVudigiREJfREFUQUJBU0UiKSwgZ2V0ZW52KCJEQl9VU0VSTkFNRSIpLCBnZXRlbnYoIkRCX1BBU1NXT1JEIiksIFtQRE86OkFUVFJfVElNRU9VVCA9PiAzXSk7IH0gY2F0Y2ggKFRocm93YWJsZSAkZSkgeyBmd3JpdGUoU1RERVJSLCAkZS0+Z2V0TWVzc2FnZSgpLiJcbiIpOyBleGl0KDEpOyB9JzsgZG8KICBpPSQoKGkrMSkpOyBbICIkaSIgLWdlIDYwIF0gJiYgeyBlY2hvICJNeVNRTCBub3QgcmVhY2hhYmxlLCBnaXZpbmcgdXAiOyBleGl0IDE7IH0KICBzbGVlcCAzCmRvbmUKCmV4ZWMgL3Vzci9sb2NhbC9iaW4vaW5pdC5zaCBzdXBlcnZpc29yZCAtYyAvZXRjL3N1cGVydmlzb3Ivc3VwZXJ2aXNvcmQuY29uZgo= | base64 -d > /tmp/railway-start.sh && exec sh /tmp/railway-start.sh'`
- **Health check:** /health
- **Public domain:** Yes

## Documentation

# Deploy and Host Invoice Ninja on Railway

Invoice Ninja is an open-source invoicing and billing app for freelancers and small businesses. It creates quotes, invoices, recurring invoices and credits, tracks expenses, time and payments, and gives each client a portal where they can view, download and pay invoices. This template runs the self-hosted v5 edition.

## About Hosting Invoice Ninja

Upstream's Docker setup runs the PHP app in one container and nginx in another, and the two share folders. Railway volumes can't be shared between services, so this template runs everything in one service built from the official image. A short start script adds the Caddy web server next to PHP-FPM, the queue workers and the scheduler, all under the image's own supervisor. On first boot the image migrates the database and creates your admin account from the deploy variables, so the setup wizard is never left open. MySQL holds the data, and a volume keeps uploads, logos and generated files. PDFs are rendered by the Chrome build bundled in the image.

## Common Use Cases

* Sending branded invoices and quotes, and collecting payments through gateways such as Stripe or PayPal
* Recurring billing for retainers, subscriptions and hosting clients
* Giving clients a self-service portal to view, download and pay their invoices

## Dependencies for Invoice Ninja Hosting

* Invoice Ninja 5.13.53 (official `invoiceninja/invoiceninja-debian:5.13.53` image, pinned by digest)
* MySQL 8.4 (`mysql:8.4.13`, pinned by digest) with a volume

### Deployment Dependencies

* [Invoice Ninja source code](https://github.com/invoiceninja/invoiceninja) and [v5.13.53 release notes](https://github.com/invoiceninja/invoiceninja/releases/tag/v5.13.53)
* [Official Docker image](https://github.com/invoiceninja/dockerfiles/tree/debian) and [self-hosting documentation](https://invoiceninja.github.io/en/self-host-installation/)
* [Start script used by this template](https://github.com/aalfath/invoice-ninja-railway-template)

### Implementation Details

* **Sign in:** open your Railway domain and sign in with the email you entered as `IN_USER_EMAIL`. The password is in the Invoice Ninja service's `IN_PASSWORD` variable. Both are read only on the first boot, so change the password under Settings &gt; User Details afterwards.
* **Email:** until you set `MAIL_HOST`, `MAIL_PORT`, `MAIL_USERNAME` and `MAIL_PASSWORD` for an SMTP provider, emails are written to the log and not sent. `MAIL_FROM_ADDRESS` defaults to the admin email. The client-portal links work without email.
* **Background work:** two queue workers and the scheduler run in the same service, with the queue stored in MySQL. Redis isn't needed.
* **Custom domain:** after adding one, change `APP_URL` to `https://your-domain` and redeploy, so links and PDFs use it.
* **Upgrades:** change the image tag. Migrations run on every start.

## Why Deploy Invoice Ninja 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 Invoice Ninja 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

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/invoice-ninja-2
