Vaze
Getting Started

Configuration

Environment variables and persistent storage

Vaze is configured entirely through environment variables and a single mounted volume.

If you used the quick install, all of this lives in the .env next to your compose.prod.yaml (./vaze/.env by default). Edit it and apply with docker compose -f compose.prod.yaml up -d.

Environment variables

VariableRequiredDescription
BASE_URLYesThe public base URL of your Vaze instance, e.g. https://files.example.com. Used by authentication and for building absolute URLs.
AUTH_SECRETYesA long random string used to sign session tokens. Keep it secret and stable — rotating it invalidates existing sessions.
VAZE_PORTNo (3000)Host port the container is published on. Compose-only — it maps to port 3000 inside the container.
VAZE_BIND_ADDRNo (0.0.0.0)Host address the port is bound to. Set 127.0.0.1 when a reverse proxy fronts Vaze, so the container isn't reachable directly.
VAZE_VERSIONNo (latest)Image tag to run. Pin it (e.g. 2.2.0) if you want upgrades to be a deliberate step.
TZNo (UTC)Timezone used inside the container.
PORTNo (3000)The port the server listens on inside the container.

Generate a strong secret with:

openssl rand -base64 32

AUTH_SECRET is the one value worth backing up. The installer generates it once and never overwrites it, but if you rebuild the .env by hand with a new secret, every session is invalidated and users have to log in again.

Persistent storage

Inside the container, Vaze keeps everything under /app/data:

  • uploads/ — all uploaded files and folders, stored as plain files on disk.
  • the SQLite database with file metadata, users, and API keys.

compose.prod.yaml mounts a named Docker volume there:

volumes:
  - vaze_data:/app/data

Named volumes are the safer default — SQLite's locking is unreliable on bind mounts backed by network filesystems. If you want the data at a specific path on the host, swap it for a bind mount:

volumes:
  - /srv/vaze:/app/data

To back up the named volume:

docker run --rm -v vaze_vaze_data:/data -v "$PWD:/backup" alpine \
  tar czf /backup/vaze-backup.tar.gz -C /data .

Upgrading never touches this volume. The installer and docker compose -f compose.prod.yaml up -d both replace only the container.

Without a volume mounted at /app/data, all files and accounts are lost when the container is removed.

Health checks

The image exposes GET /api/health, and compose.prod.yaml uses it as the container healthcheck. Check the current state with:

docker compose -f compose.prod.yaml ps

Reverse proxy

If you put Vaze behind a reverse proxy (nginx, Caddy, Traefik, …), set BASE_URL to the public URL served by the proxy — for example https://files.example.com — so login and generated file URLs use the right origin.

Also set VAZE_BIND_ADDR=127.0.0.1 so the container is only reachable through the proxy instead of being exposed on every interface:

.env
BASE_URL=https://files.example.com
VAZE_BIND_ADDR=127.0.0.1

Remember to raise your proxy's request body size limit if you plan to upload large files (e.g. client_max_body_size in nginx).

On this page