Installation
Run Vaze with Docker in minutes
All you need to run Vaze is Docker with the Compose plugin, installed on your server.
Quick install
One command sets up everything — it checks Docker, downloads
compose.prod.yaml, generates your AUTH_SECRET into a .env, and starts the
container:
curl -fsSL https://raw.githubusercontent.com/darseen/vaze/main/scripts/install.sh | shIt asks which folder to install into, and the URL you'll open Vaze on (defaulting to this machine's LAN address). Pass the URL in to skip that prompt:
curl -fsSL https://raw.githubusercontent.com/darseen/vaze/main/scripts/install.sh \
| BASE_URL=https://files.example.com shPress Enter at the folder prompt to install into ./vaze, or type a folder such
as apps to install into ./apps/vaze (missing folders are created). It prints
your URL once the container reports healthy. Nothing else to configure.
Prefer to read a script before piping it to a shell? Download it first, or follow the manual steps below.
Options
| Flag / variable | Default | Description |
|---|---|---|
--dir=PATH | asked, ./vaze | Exact folder for compose.prod.yaml and .env; skips the folder prompt |
--no-start | — | Write the config but don't start the container |
BASE_URL | detected LAN address | The URL you open Vaze on |
VAZE_PORT | 3000 | Host port to publish |
VAZE_BIND_ADDR | 0.0.0.0 | Host address to bind to |
VAZE_VERSION | latest | Image tag to run |
Environment variables go before sh, flags after it:
curl -fsSL .../install.sh | VAZE_PORT=8080 sh -s -- --dir=/opt/vazeUpgrading
Re-run the installer from any folder:
curl -fsSL https://raw.githubusercontent.com/darseen/vaze/main/scripts/install.sh | shIt finds the existing install through its container, so it won't ask for a
folder again or set up a second copy elsewhere. If you've removed the container
with down, run it from the install folder or the one containing it instead.
It upgrades in place: refreshes compose.prod.yaml (keeping a .bak of the old
one), pulls the newer image, and recreates the container. It never overwrites a
value already in your .env, and never touches the volume holding your uploads
and database.
To pin a version instead of tracking latest, set VAZE_VERSION in your .env
and re-run docker compose -f compose.prod.yaml up -d.
Docker Compose
Prefer to set it up yourself? Download
compose.prod.yaml
and put a .env next to it:
AUTH_SECRET=generate-with-openssl-rand-base64-32
BASE_URL=http://your-server-ip-or-domain:3000
VAZE_PORT=3000
VAZE_VERSION=latestdocker compose -f compose.prod.yaml up -dBASE_URL and AUTH_SECRET are the only required values — Compose refuses to
start without them rather than booting a half-configured instance.
Docker run
Without Compose:
docker run -d \
-p 3000:3000 \
-v vaze_data:/var/lib/vaze \
-e BASE_URL="http://your-server-ip-or-domain:3000" \
-e AUTH_SECRET="$(openssl rand -base64 32)" \
--restart unless-stopped \
--name vaze \
ghcr.io/darseen/vaze:latest-p 3000:3000maps port 3000 on your host to the container's port 3000.-v vaze_data:/var/lib/vazekeeps uploads and the database in a Docker volume, so they persist across container updates and removals.BASE_URLandAUTH_SECRETconfigure the instance — see Configuration.
Managing your instance
Run these from your install directory:
docker compose -f compose.prod.yaml logs -f # follow logs
docker compose -f compose.prod.yaml ps # status and health
docker compose -f compose.prod.yaml restart # restart
docker compose -f compose.prod.yaml down # stop, keeping your datadocker compose -f compose.prod.yaml down -v also deletes the vaze_vaze_data
volume — every uploaded file and account goes with it.
Deploy on Railway
Prefer the cloud? Vaze ships as a one-click Railway template.
Next steps
Once the container is running, open the URL the installer printed and continue with First Steps.
Vaze