---
title: "Deploy Akaunting | (Just Updated) QuickBooks Alternative Whose Recurring Invoices Actually Run"
description: "Books that actually run recurring invoices. Volumes, admin seeded."
category: "Other"
url: https://railway.com/deploy/akaunting-or-just-updated-quickbooks-alt
---

# Deploy Akaunting | (Just Updated) QuickBooks Alternative Whose Recurring Invoices Actually Run

Books that actually run recurring invoices. Volumes, admin seeded.

**[Deploy Akaunting | (Just Updated) QuickBooks Alternative Whose Recurring Invoices Actually Run on Railway](https://railway.com/template/akaunting-or-just-updated-quickbooks-alt)**

- **Creator:** SuperSlowSloth
- **Category:** Other

## Template content

### akaunting

- **Image:** ghcr.io/bon5co/akaunting-railway:3.1.21
- **Health check:** /healthz
- **Public domain:** Yes

### mariadb

- **Image:** ghcr.io/bon5co/akaunting-railway-mariadb:11.8.2

## Documentation

# Deploy and Host Akaunting on Railway

Akaunting is open-source accounting software for small businesses and freelancers:
invoicing, expenses, bills, banking, reporting and multi-company bookkeeping in the
browser. This template runs Akaunting 3.1.21 with MariaDB, on persistent volumes, with
the administrator account seeded before the public URL ever answers a request.

## About Hosting Akaunting

Two services: Akaunting (Apache + PHP, public HTTPS, volume at `/var/www/html`) and
MariaDB (private networking, volume at `/var/lib/mysql`). The application, its `.env`,
uploads and installed modules all live under the webroot, so the whole webroot is the
volume — the official `-v` image unpacks the release into it on first boot and reuses it
afterwards.

The scheduler runs **inside the application container**, next to Apache. That is not a
cost saving, it is a correctness requirement: `Console\Kernel::schedule()` returns early
unless `config('app.installed')` is true, and `APP_INSTALLED=true` is written by the
installer into `/var/www/html/.env` on the volume. A separate scheduler service that
cannot read that file registers **zero** Akaunting jobs — no recurring invoices, no
invoice or bill reminders, no temp-file cleanup, no pruning — and still exits 0 every
run, so nothing ever looks broken.

The installer runs exactly once, behind a marker on the volume. `php artisan install` is
not idempotent: it regenerates `APP_KEY` and creates a second company plus a duplicate
admin user, and the `users` unique index is `(email, deleted_at)`, so MySQL's distinct
NULLs let that duplicate through silently.

The administrator password is generated per deploy by Railway (`${{secret}}`) and the
container refuses to boot without one, so the instance is claimed before it is reachable.

## Common Use Cases

* Send invoices, track customer payments, and run recurring billing on a schedule.
* Record expenses, bills, banking activity and transfers for one or more companies.
* Keep books for a freelance or small-business entity with reports and tax summaries.

## Dependencies for Akaunting Hosting

* Akaunting 3.1.21, pinned to the official image digest.
* MariaDB 11.8.2 on Railway private networking.
* Persistent volumes for the webroot and the database.

### Deployment Dependencies

* [Akaunting source](https://github.com/akaunting/akaunting)
* [Official Akaunting Docker packaging](https://github.com/akaunting/docker)
* [Railway wrapper images](https://github.com/bon5co/akaunting-railway)
* [Akaunting documentation](https://akaunting.com/hc/docs/on-premise-app/install-update/)

### Implementation Details

Apache is re-pointed at Railway's injected `$PORT` on every boot, because Railway's HTTP
healthcheck dials the injected port rather than the domain's target port. Readiness is a
static `/healthz.html`; the root path redirects to `/auth/login`.

Sign in with the `ADMIN_EMAIL` shown in the Akaunting service variables (default
`admin@example.com`, change it in the app afterwards) and the generated `ADMIN_PASSWORD`.

Before updating, back up both volumes and read the Akaunting release notes: the app
migrates forward on boot and a downgrade is not supported.

This community template is maintained independently and is not affiliated with or
endorsed by Akaunting.

## Why Deploy Akaunting 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 Akaunting 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) — [Jul'26] 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/akaunting-or-just-updated-quickbooks-alt
