Getting started
Configuration
All environment variables of Annuva with their defaults. Every variable is optional.
Annuva is configured with environment variables – in compose.yaml, with docker run -e or in a .env file during development. Every variable is optional: without any configuration Annuva starts as a single-tenant instance with SQLite in the data folder.
Invalid values stop the server at start with a message that names the variable.
Application
| Variable | Default | Description |
|---|---|---|
APP_MODE |
single |
single: self-hosted with setup wizard. multi: several tenants with self-registration (prepared). |
APP_NAME |
Annuva |
Name shown in the UI and in e-mails. |
APP_URL |
– | Public URL. Only needed for links in e-mails sent without a request; otherwise it is taken from the request. |
HOSTNAME |
0.0.0.0 |
Listen address. |
PORT |
40100 |
Listen port. |
DATA_DIR |
./data |
Database (SQLite), uploaded files, invoice PDFs and generated secrets. In the image: /var/www/data. |
DEFAULT_LOCALE |
en |
Language for new users when the browser language is not supported (de, en). |
DEFAULT_TIMEZONE |
Europe/Berlin |
Time zone for new users. |
UPLOAD_MAX_SIZE |
20MB |
Maximum upload size (B, KB, MB, GB). |
GRAVATAR_ENABLED |
true |
Use Gravatar when a user has no profile picture. |
LOG_LEVEL |
info |
debug, info, warn or error. |
Database
| Variable | Default | Description |
|---|---|---|
DB_DRIVER |
sqlite |
sqlite, mysql or postgres. |
DB_SQLITE_FILE |
annuva.sqlite |
SQLite file, relative to DATA_DIR. |
DB_HOST |
localhost |
MySQL/Postgres host. |
DB_PORT |
3306 / 5432 |
MySQL/Postgres port. |
DB_NAME |
annuva |
Database name. |
DB_USER |
annuva |
Database user. |
DB_PASSWORD |
– | Database password. |
DATABASE_URL |
– | Alternative to the DB_* values, e.g. postgres://user:pass@host/db. |
Security
| Variable | Default | Description |
|---|---|---|
AUTH_SECRET |
generated | Secret for session and token hashes. Generated into DATA_DIR/.auth-secret when empty. |
SETUP_TOKEN |
generated | Protects the setup wizard. Generated and printed to the log when empty. |
SESSION_MAX_AGE_DAYS |
30 |
Lifetime of a login session. |
If you set
AUTH_SECRETyourself, keep it stable: changing it signs everyone out and invalidates all API tokens.
Without SMTP_HOST no e-mails are sent – password reset, sending invoices and reminders are disabled in the UI.
| Variable | Default | Description |
|---|---|---|
SMTP_HOST |
– | SMTP server. |
SMTP_PORT |
587 |
SMTP port. |
SMTP_SECURE |
false |
true for implicit TLS (port 465). |
SMTP_USER |
– | SMTP user. |
SMTP_PASSWORD |
– | SMTP password. |
MAIL_FROM |
– | Sender address. Mails go out as "<Company> via Annuva" <MAIL_FROM> with the company e-mail as Reply-To. |
Example
environment:
TZ: Europe/Berlin
DEFAULT_LOCALE: de
SMTP_HOST: smtp.example.com
SMTP_PORT: 587
SMTP_USER: annuva@example.com
SMTP_PASSWORD: secret
MAIL_FROM: annuva@example.com