Production deployments require a few additions beyond a local test install: pinned image versions, external access through a reverse proxy, media server integration with correct mount propagation, and a backup routine for your PostgreSQL database. This guide walks through each concern in order.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/rivenmedia/riven-ts/llms.txt
Use this file to discover all available pages before exploring further.
Requirements
Linux + FUSE
A Linux host with FUSE support and
/dev/fuse available. Riven uses FUSE to mount its virtual file system and cannot run without SYS_ADMIN capability.Docker Engine 24+
Docker Engine 24 or later with Compose V2. The
docker compose (V2) command is required — the legacy docker-compose binary is not supported.PostgreSQL 17
PostgreSQL 17 holds your entire library: media items, item requests, streams, and VFS file entries. Data loss here means re-scraping everything.
Redis 8
Redis 8 stores in-flight queue state. It is ephemeral by design — losing Redis data only interrupts active jobs, not your library.
Host Mount Setup
Riven mounts its VFS inside the container using FUSE, then shares that mount back to the host usingrshared propagation. The host mount point must be configured with shared propagation before Docker starts, or the FUSE mount will not be visible outside the container.
A systemd unit is the most reliable way to guarantee this survives reboots:
Media Server Integration
Add your media server to the samedocker-compose.yml. Riven publishes its FUSE mount with rshared; consumers (Plex, Jellyfin) subscribe to it with rslave.
Reverse Proxy Setup
Riven serves its GraphQL API on port 3000. Before putting a proxy in front of it, you must bind the server to all interfaces:gqlHost defaults to localhost and the API only listens on the loopback interface inside the container, so every proxied request is refused.
Version Pinning
The:main tag tracks the latest build of the default branch and can change under you at any docker compose pull. For production, pin a specific release:
docker-compose.yml
latest tag.
Complete Production Compose File
A full production-readydocker-compose.yml with PostgreSQL and Redis health checks:
docker-compose.yml
Updating Riven
PostgreSQL Backups
PostgreSQL holds your entire library — media items, requests, streams, and VFS file entries. Back it up regularly.Keep your
.env.riven file and the generated ranking config (./docker-data/riven/riven-ranking-config.json) backed up alongside your database dumps. Logs are disposable and Redis only holds transient queue state — neither needs to be backed up.Health Checks and Monitoring
GraphQL endpoint check
Confirm the API is responding after each deployment:
Container status
Check that all three containers are healthy:All services should show
healthy in the STATUS column.Log tailing
Stream Riven’s logs in real time:Set
RIVEN_SETTING__logLevel="warn" in production to reduce noise.Mount verification
Verify the VFS is mounted and serving files: