How to install Mavri on CasaOS or ZimaOS.
Run self-hosted invoicing on your home server in a few clicks, with your data in your own AppData folder.
http://<your-server>:8473 and create the owner account.Before you start
- A server running CasaOS or ZimaOS (Docker is built in), reachable from your browser.
- An amd64 or arm64 machine. Both are listed in the app manifest.
- Port 8473 free on the server.
- Internet access on the server for the first install, so it can pull the container images.
Step 1. Get the compose file
Download docker-compose.yml from the Mavri repository. On the server (or any computer):
curl -fsSLO https://raw.githubusercontent.com/Raktim94/mavri/main/casaos/docker-compose.ymlOr open the file in your browser and save it. You will also see this file in the repository as casaos/docker-compose.yml.
Step 2. Import it into CasaOS
- Open the CasaOS dashboard and go to the App Store.
- Choose Custom Install, then Import.
- Upload the compose file (or paste its contents).
- Review the settings it fills in, then press Install.
The file defines two containers: Mavri itself, and a small updater that powers the in-app Update now button.
Step 3. Open Mavri
http://<your-server-ip>:8473The first visit asks you to create the owner account (an email and a password of at least 8 characters with letters and numbers). A short guided setup follows. After that, see How to use Mavri.
What the install sets up
| Setting | Value |
|---|---|
| Web address | http://<server>:8473 (container port 3001) |
| Your data | /DATA/AppData/nodedr-invoice/data: the SQLite database, session secret and encryption key. Back this up. |
COOKIE_SECURE | false for plain LAN use. Set true only behind real HTTPS. |
TRUST_PROXY | 0 for direct LAN use. Set 1 behind a reverse proxy or Cloudflare Tunnel. |
| Updater | A second container that needs the Docker socket and only acts when you press Update now. |
Updating
Open Settings → Updates and press Update now. With the bundled updater, Mavri pulls the newer image and recreates the Mavri container, and your data in /DATA/AppData is untouched. Download a backup first. If you don’t want the updater to have Docker socket access, remove that container and update manually.
Backups
Use Settings → Backup for a one-file export of your records, and also copy /DATA/AppData/nodedr-invoice/data to another disk or machine. The folder includes the keys that protect store secrets, which the backup file does not. See how to back up Mavri.
HTTPS and remote access
Put Mavri behind a reverse proxy or a Cloudflare Tunnel for HTTPS, then edit the app’s environment: COOKIE_SECURE=true and TRUST_PROXY=1. Leave them at their defaults for LAN-only use.
Troubleshooting
- The image will not pull. This route pulls published container images from GitHub Container Registry. If the pull fails, use the Docker Compose route, which builds Mavri from source.
- Port already in use. Change the published port in the compose file before importing.
- Cannot open the page. Check the server’s IP address, the port, and any firewall in between.
- Sign-in loops behind HTTPS. Check
COOKIE_SECUREandTRUST_PROXYas above.