Skip to content
Annuva
Documentation · Backups & updates

Operation

Backups & updates

What to back up, how to update and how to check that your instance is healthy.

What to back up

Everything worth keeping is in the data folder (DATA_DIR, in the container /var/www/data):

  • the SQLite database (annuva.sqlite)
  • uploaded files and generated invoice PDFs (files/)
  • generated secrets (.auth-secret)

Back up the whole folder. Without .auth-secret all sessions and API tokens become invalid after a restore (unless you set AUTH_SECRET yourself).

Consistent SQLite backups

While Annuva is running, use SQLite's backup command instead of copying the file:

bash
sqlite3 data/annuva.sqlite ".backup 'backup/annuva-$(date +%F).sqlite'"

Alternatively stop the container for a moment, copy the folder and start it again:

bash
docker compose stop annuva
tar czf "annuva-$(date +%F).tar.gz" data
docker compose start annuva

With MySQL or PostgreSQL back up the database with its usual tools (mysqldump, pg_dump) plus the data folder for the files.

Updates

bash
docker compose pull
docker compose up -d

Database migrations run automatically on start. The current version is shown in the user menu and at /api/health. The changelog lists what changed.

You can pin a version instead of latest – the image is tagged with the major (1), minor (1.3) and full version (1.3.0).

Health and logs

bash
curl https://annuva.example.com/api/health
# {"database":"ok","status":"ok","version":"1.3.0"}

docker compose logs -f annuva

The health endpoint answers 200 when the database is reachable and 503 otherwise; the Docker health check uses it. Set LOG_LEVEL=debug for more details.

Edit this page on GitHub