services: isputnik: image: ghcr.io/isputnikdotnet/isputnik.home:latest container_name: isputnik restart: unless-stopped # On `docker stop` the server finishes in-flight requests and stops its workers # between units (it gives itself 10 s); this leaves room before Docker SIGKILLs. stop_grace_period: 30s # The health check (GET /api/health) comes from the image. Keep the log bounded: # every request is logged, including range requests while streaming audio. logging: driver: json-file options: max-size: "10m" max-file: "5" ports: - "4000:4000" environment: # The server runs unprivileged as this user; the entrypoint chowns /config # to it on first start. Default 1000. Set both to the owner of your config # volume if it differs (on Unraid that is usually 99 / 100). PUID: 1000 PGID: 1000 # URL used to access the app — change to your server IP or domain APP_URL: http://localhost:4000 # auto: secure cookies follow APP_URL (on for https://, off for plain http). # Set "true"/"false" only to override. COOKIE_SECURE: auto # Set when exposing via a reverse proxy, so rate limits, auto-block, and trusted # zones see the real client IP, not the proxy. Preferred: the proxy's own IP or # CIDR (comma-separated for several) — forwarded headers are then only believed # when they come from it. Leave unset for direct LAN access. # See docs/users/exposing-to-the-internet.md # TRUST_PROXY: 172.18.0.0/16 # Older alternative when the proxy's IP isn't fixed: the number of proxies in # front (addresses win if both are set). # TRUST_PROXY_HOPS: 1 # Optional overrides # SESSION_DAYS: 14 # INVITE_DAYS: 7 # The games (ghcr.io/isputnikdotnet/isputnik.games), a second container on # the same compose network (compose creates one per project; outside compose # the two need a user-defined network, since Docker's default bridge does not # resolve container names), reached inside the app at /games. Set both, and # give the games container the same secret as GATEWAY_SECRET. # See docs/configuration.md → Games. # GAMES_URL: http://isputnik-games:4200 # GAMES_GATEWAY_SECRET: a-long-random-secret volumes: # App config, database, thumbnails (use appdata on Unraid) - /mnt/user/appdata/isputnik:/config # Primary media library (required). Mount :ro and set the library's Mode to # "External (read-only)" in the app when it's managed by Plex/Audiobookshelf, # so this app only views/streams it and never writes to it. - /path/to/library:/media:ro # Optional additional libraries — uncomment and set paths as needed # - /path/to/library2:/media2:ro # - /path/to/library3:/media3:ro