What a server needs
- Docker Engine with Compose. Any host that runs Linux containers.
- Three containers: the database (PostgreSQL 17), the engine and a web container.
- Two ports, on the web container only: 80 and 443. Other numbers are set with
WEB_HTTP_PORTandWEB_HTTPS_PORT.
| Idle | After a 2,000-record import | |
|---|---|---|
| Memory, database | 69 MiB | 177 MiB |
| Memory, engine | 192 MiB | 257 MiB |
| Memory, web | 13 MiB | 16 MiB |
| Disk, images | 3.2 GB | |
| Disk, data | 56 MB | 128 MB |
Measured once on a MacBook Pro (Apple M1 Pro, 32 GB), Docker Engine 28.4.0, 2026-11-06, with the reference compose.yml. Not a sizing guarantee: the guide does not state production sizing. Size a real server from your own data and load.
Five steps
- Choose the address people openMake its DNS name reach the host. It is PUBLIC_URL, the address your sign-in is bound to. Changing its host later signs everyone out.
- Fill .envCopy .env.example to .env and fill it in: PUBLIC_URL, then the three secrets with the commands the file gives. Keep .env beside your backups.
- Provide HTTPSPut your certificate and key in certs/ as fullchain.pem and privkey.pem. On a public name, add -f compose.yml -f compose.acme.yml for certificates that renew themselves. Behind a load balancer that ends HTTPS, use WEB_TLS=proxy.
- Start itdocker compose up -d --build. The engine creates and migrates the database at start; docker compose ps shows the three containers healthy.
- Create the first administratorRun the create_admin command above. It asks for the password. Everyone else is added in the application.
What runs
Three containers: the database (PostgreSQL 17), the engine and a web container. Only the web container is published.
Upgrade and back up
Back up first. Upgrading is docker compose up -d --build, and the engine migrates the database at start.
How stable it is
refiroo is before 1.0. From 0.12, the APIs, webhooks and sign-in change only by adding: anything replaced keeps working beside its successor for at least 12 months and two minor releases. The database, the code and the screens may change in any release, and security fixes go to the latest minor release only. The compatibility commitment
To develop instead, the README has the steps without Docker. README on GitHub