Deployment
Running Riven TS in production.
This page covers what changes once Riven is more than a test install. For the initial setup, see Getting Started.
Requirements
- Linux host with FUSE support
- Docker Engine 24+ with Compose V2
- PostgreSQL 17 and Redis 8
Media Server Integration
Add your media server to the same compose file. Riven's container uses
rshared propagation to publish its FUSE mount; consumers use rslave to
receive it:
jellyfin:
image: jellyfin/jellyfin:latest
ports:
- 8096:8096
volumes:
- jellyfin_config:/config
- /mnt/riven:/mount:rslave,z
depends_on:
riven:
condition: service_startedThe media server must start after Riven has mounted the VFS. If it scans an empty mount it will mark the library as unavailable.
Reverse Proxy
Riven serves GraphQL on port 3000. Make sure
RIVEN_SETTING__gqlHost="0.0.0.0" is set, or the proxy will get connection
refused.
labels:
- traefik.enable=true
- traefik.http.routers.riven.rule=Host(`riven.example.com`)
- traefik.http.routers.riven.entrypoints=websecure
- traefik.http.routers.riven.tls=true
- traefik.http.routers.riven.tls.certresolver=leresolver
- traefik.http.services.riven.loadbalancer.server.port=3000server {
server_name riven.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}The GraphQL API currently has no authentication. Do not expose it to the internet without putting auth in front of it.
Pinning a Version
:main tracks the latest build of the default branch and can change under you.
For production, pin a release instead:
image: ghcr.io/rivenmedia/riven-ts:1.2.3Available tags are on the
package page.
There is no latest tag.
Updating
docker compose pull
docker compose up -dDatabase migrations run automatically on startup.
Backups
PostgreSQL holds your library — media items, requests, streams, and the VFS file entries. Back it up:
docker compose exec postgres pg_dump -U riven riven | gzip > riven-backup.sql.gzKeep your .env and the generated ranking config (./data) too. Logs are
disposable, and Redis only holds in-flight queue state.