Docker
Recommended: Docker Compose
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