Skip to main content

Deployment

The reference deployment is docker-compose.yml in the flixer repository.

ContainerImageInternal portNotes
apighcr.io/flixermedia/flixer8081Mounts media read-only plus avatar and image folders.
streamerghcr.io/flixermedia/flixer-streamer8091Media read-only; transcode cache.
indexerghcr.io/flixermedia/flixer-indexer8092Media read-write so artwork can be stored next to media (use :ro if every library uses cache image storage).
redisredis:7-alpine6379Append-only persistence.
webghcr.io/flixermedia/flixer-web80Static frontend.
proxybuilt from deploy/proxy80 (published as HTTP_PORT)nginx front door.

PostgreSQL is not part of the compose file; supply DATABASE_URL.

Proxy routing​

deploy/proxy/nginx.conf routes by path:

PathUpstreamNotes
/api/api120s read timeout.
/api/liveapiWebSocket upgrade, 1h timeout, no buffering.
/api/logs/streamapiWebSocket upgrade for the live log viewer.
/socket.io/apiWebSocket upgrade.
/stream/streamerRange requests, no buffering, 1h timeouts.
/hls/, /info/streamer
/lyrics/, /subtitles/streamer
/webEverything else.
caution

If you put your own reverse proxy in front, it must forward WebSocket upgrades for /api/live and /api/logs/stream, or the admin dashboard will not update live.

TLS​

The bundled proxy listens on plain HTTP. Terminate TLS in front of it and set FLIXER_PUBLIC_URL, APP_URL and PASSKEY_ORIGINS to the https:// address. Passkeys require a secure context.

Health checks​

api (TCP 8081), streamer (/healthz), web (HTTP /) and proxy (/healthz) have container health checks; the proxy waits for the first three.

Volumes​

VolumePurpose
redis-dataIndexer queue persistence.
indexer-cacheArtwork for libraries with cache image storage.
${AVATAR_PATH}, ${MEDIA_IMAGE_PATH}Avatars and images uploaded in the media editor.

SMB and observability overlays​

  • docker-compose.smb.yml adds mount support for network shares.
  • docker-compose.observability.yml adds Loki, Alloy and Grafana for logs.