Docker
Docker Compose is the recommended deployment method for most server and NAS installs. It keeps Scryer’s config and media mounts explicit, restarts the container automatically, and makes upgrades a two-command operation.
Save this as docker-compose.yml, replacing the /path/to/... entries with your folders:
services: scryer: image: ghcr.io/scryer-media/scryer:latest container_name: scryer restart: unless-stopped ports: - "8080:8080" volumes: - scryer-config:/config # one mount contains completed downloads and every media destination; # see Library Layout in the Guides before changing this - /path/to/media:/data
volumes: scryer-config:Optional: To run Weaver alongside Scryer, add the following service block inside the services: key and include the shared volumes: section at the end.
weaver: image: ghcr.io/scryer-media/weaver:latest container_name: weaver restart: unless-stopped ports: - "9090:9090" environment: WEAVER_INTERMEDIATE_DIR: /data/intermediate WEAVER_COMPLETE_DIR: /data/downloads volumes: - weaver-config:/config # use the same host path and container path as Scryer - /path/to/media:/data
volumes: scryer-config: weaver-config:Before starting a public-facing instance, add one of the first-time boot password configurations. These support a temporary password or Docker secret, a custom administrator name, and disabling the built-in admin.
Start the stack:
docker compose up -dOpen http://localhost:8080.
After the container starts, confirm the UI opens and the setup flow loads.
Behind A Reverse Proxy
Section titled “Behind A Reverse Proxy”When the browser reaches Scryer through a public hostname, add that browser-facing origin to the service environment so OAuth discovery never advertises the container’s internal HTTP address:
services: scryer: environment: SCRYER_PUBLIC_URL: "https://scryer.example.com"Use only the scheme, hostname, and optional port. Do not include a path. Follow Networking for complete root and subpath examples, required headers, WebSocket routing, TLS termination, and trusted-proxy configuration.
Path Layout And Hard Linking
Section titled “Path Layout And Hard Linking”Read Library Layout before you write your volumes: section. It is the most common thing to get wrong in a Docker install, and fixing it later means re-mapping every library.
The short version: hard links require the source and destination to be inside the same container mount. Merely placing separate Docker mounts on the same physical disk is not enough. Each volumes: entry creates a mount boundary that hard links cannot cross, so a layout with one mount per role turns every import into a full copy.
Use a single parent bind mount with subdirectories for each role:
volumes: - /host/media:/dataThen configure Scryer’s media roots and staging path as subdirectories under /data:
/data/movies/data/series/data/anime/data/downloadsConfigure the download client to place completed work in /data/downloads, and configure Scryer’s libraries under /data/movies, /data/series, and /data/anime. Both containers must see these paths through the same /path/to/media:/data mount.
Because completed downloads and media destinations share one mount, Scryer can hard-link files during import instead of copying them when hard-link import mode and ownership requirements permit it. If they use separate volume entries, even two bind mounts backed by the same host disk, Scryer must copy across the mount boundary. Split mounts only when downloads and media really live on different physical disks.
Within /data/movies, /data/series, and /data/anime, create one folder per library, such as Movies, Kids Movies, or Anime Movies. Library Layout explains how to choose those libraries, why splitting by quality profile should be a last resort, and how folders inside a library must be laid out.
Upgrading
Section titled “Upgrading”To upgrade a Docker install, pull the latest image and restart:
docker compose pulldocker compose up -dFor all install methods, see Upgrading.
Related Concepts
Section titled “Related Concepts”- Import — how Scryer moves completed local items into a managed library location; requires the correct path layout to hard-link instead of copy
- Library Scan — run this after confirming media roots are mounted correctly
- Upgrading — full upgrade reference for all install methods