Docker installation
Deploy VidArch from GHCR on the consistent Docker host and container port 2508.
VidArch uses port 2508 on the Docker host and 2508 inside the production container. Local source development remains separate on ports 2499 (interface) and 2498 (API).
Copy-ready Docker Compose
services:
vidarch:
image: ghcr.io/lucas-lepajollec/vidarch:latest
ports:
- "2508:2508"
env_file:
- path: .env
required: false
volumes:
- ./data:/app/data
- ./downloads:/app/downloads
init: true
restart: unless-stoppedThen start and verify the service:
mkdir -p data downloads
sudo chown -R 1000:1000 data downloads
docker compose pull
docker compose up -d --force-recreate
docker compose psThe first two commands prepare Linux bind mounts for the image's non-root UID/GID 1000:1000. Docker Desktop normally handles host-file sharing itself. For an existing shared media library, use the ACL method in Storage; never use chmod 777.
Open http://<server-ip>:2508 from the LAN, or http://localhost:2508 on the Docker host. No .env is required; the optional file is only for advanced startup overrides such as AUTH_PASSWORD. On first start, set a password in Settings → Security before making the service reachable outside a trusted LAN. The image already runs as the non-root node user and contains its own health check on port 2508; Compose does not repeat those settings.
The two mounts are not optional application clutter: data contains the database, sessions, configuration and cookies, while downloads contains the owned media library. Back them up together while VidArch is stopped.
Build from source
git clone https://github.com/lucas-lepajollec/vidarch.git
cd vidarch
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --buildThe overlay builds vidarch:local without changing port 2508 or the persistent directories. Never run docker compose down -v as part of a normal update. See First startup and Updates.