Skip to content

Docker

docker-compose up -d        # Start
docker-compose logs -f      # View logs
docker-compose down         # Stop (data persists)

For NAS users (Synology, TrueNAS, Unraid, etc.), see the NAS deployment guide for a step-by-step setup guide including bind mounts and permission configuration.

Custom paths and ports

Copy the provided template and edit the values you need:

cp .env.example .env

Key variables (full list in .env.example):

Variable Default Description
VIBRAVID_PORT 8000 Host port exposed by the container
VIBRAVID_VIDEO_DIR named volume Where downloads land on the host (e.g. /volume2/Movies)
VIBRAVID_DB_DIR named volume Host path for the SQLite database
VIBRAVID_CONFIG_DIR named volume Host path for config.json / login.json
VIBRAVID_LOGS_DIR named volume Host path for application logs
ALLOWED_HOSTS localhost,127.0.0.1 Comma-separated hostnames Django accepts
CSRF_TRUSTED_ORIGINS http://localhost:8000,... Origins for CSRF validation

NAS example — store downloads on a NAS share, expose on port 9000:

VIBRAVID_PORT=9000
VIBRAVID_VIDEO_DIR=/volume2/Movies
VIBRAVID_DB_DIR=/volume1/docker/vibravid/db
VIBRAVID_CONFIG_DIR=/volume1/docker/vibravid/conf
VIBRAVID_LOGS_DIR=/volume1/docker/vibravid/logs
ALLOWED_HOSTS=localhost,127.0.0.1,192.168.1.100
CSRF_TRUSTED_ORIGINS=http://192.168.1.100:9000

Then start normally:

docker-compose up -d

Private Network Deployment

Uncomment and edit the environment section in docker-compose.yml:

environment:
  DJANGO_DEBUG: "false"
  ALLOWED_HOSTS: "streaming.example.local,localhost,127.0.0.1,192.168.1.50"
  CSRF_TRUSTED_ORIGINS: "https://streaming.example.local"
  USE_X_FORWARDED_HOST: "true"
  SECURE_PROXY_SSL_HEADER_ENABLED: "true"
  CSRF_COOKIE_SECURE: "true"
  SESSION_COOKIE_SECURE: "true"
  DJANGO_SECRET_KEY: "your-secure-secret-key-here"

ARR-related variables can be added to the same environment block:

environment:
  USE_ARR_SERVICES: "true"
  SONARR_URL: "http://sonarr:8989"
  SONARR_API_KEY: "your-sonarr-api-key"
  RADARR_URL: "http://radarr:7878"
  RADARR_API_KEY: "your-radarr-api-key"
  SEERR_WEBHOOK_SECRET: "your-seerr-secret"
  SONARR_WEBHOOK_SECRET: "your-sonarr-secret"
  RADARR_WEBHOOK_SECRET: "your-radarr-secret"

Manual Docker Build

docker build -t vibravid .

docker run -d \
  --name vibravid \
  -p 8000:8000 \
  -v vibravid_db:/app/data \
  -v vibravid_videos:/app/Video \
  -v vibravid_logs:/app/logs \
  -v vibravid_config:/app/Conf \
  --restart unless-stopped \
  vibravid

Binding Local Folders

# Linux/macOS
docker run -d --name vibravid -p 8000:8000 \
  -v ~/Downloads/Videos:/app/Video \
  vibravid

# Windows (PowerShell)
docker run -d --name vibravid -p 8000:8000 `
  -v "D:\Video:/app/Video" `
  vibravid

Updating (Docker)

When a new version is released, VibraVid shows an update banner in the web UI. Click Update now to update in place.

One-click update requires the Docker socket to be mounted (it is in the default docker-compose.yml):

volumes:
  - /var/run/docker.sock:/var/run/docker.sock

With the socket mounted, Update now drives the host Docker daemon directly: it launches a short-lived helper container that runs docker compose pull && docker compose up -d, pulling the published image (ghcr.io/astraelabs/vibravid:latest) and recreating the container. No host-side script is required.

Security note

Mounting the Docker socket grants the container control of the host Docker daemon. If you'd rather not, comment out the socket volume — the button will then tell you to update manually.

Manual update (always works, socket or not):

docker compose pull
docker compose up -d