Skip to content

Docker Compose ​

Torsher is one container described in one docker-compose.yml. This page sets it up on a single disk or across several, and explains each line you may want to change.

What you'll get

Torsher running on your server, its data in a folder you chose, and the control panel open in your browser.

Before you start ​

  • Docker with the Compose plugin: Docker Engine on Linux, or Docker Desktop on Windows and macOS. Check with docker compose version.
  • Linux gets every feature. Docker Desktop runs Torsher with transcoding on the CPU only, and its file sharing may not keep hard links; see Docker Desktop.
  • The commands on this page are for Linux and macOS.
  • Disk space for what you watch and keep. See Requirements.

1. Get the install file ​

bash
mkdir torsher && cd torsher
curl -fsSL https://github.com/torsher-app/torsher/releases/latest/download/docker-compose.yml -o docker-compose.yml

This is the whole file. Lines starting with # are optional and stay off until you remove the #:

yaml
# Copy to docker-compose.yml and adjust the values below.
#
#   docker compose up -d                        # Torsher only
#   docker compose --profile prowlarr up -d     # Torsher and Prowlarr
#
# Then open http://<host>:8080/panel/ to create the owner account.

services:
  torsher:
    image: ghcr.io/torsher-app/torsher:latest
    container_name: torsher
    restart: unless-stopped
    ports:
      - '8080:8080'
    environment:
      # Owner of the files in /data on the host (`id -u` and `id -g`)
      PUID: 1000
      PGID: 1000
      TZ: Etc/UTC
      # Optional: key that encrypts indexer API keys in the database.
      # Without it a key file is created in /data/db. Keep it with your backups
      # TORSHER_SECRET: change-me
      # Optional: your own TMDB API Read Access Token for the catalog instead
      # of the app key built into the image
      # TMDB_ACCESS_TOKEN:
      # Behind a reverse proxy: its address or subnet, so that sign-in
      # attempt limits see real client addresses. Don't set it without a proxy
      # TRUST_PROXY: 172.18.0.0/16
    volumes:
      # One disk (recommended): database, keys, downloads (/data/torrents)
      # and the library (/data/library) in one volume. Files you keep are
      # hard-linked from downloads to the library and take no extra space
      - ./data:/data
      # Several disks: keep /data above for the database, mount the big disk
      # once and choose /storage/torrents and /storage/library in
      # Settings → Storage. Keep both folders in this one volume: two
      # volumes, even on one disk, turn hard links into copies
      # - /mnt/big:/storage
      # Optional: your existing media folders, read-only
      # - /path/to/movies:/media/movies:ro
    # Optional: hardware transcoding on Intel or AMD graphics (VAAPI)
    # devices:
    #   - /dev/dri:/dev/dri
    # Optional: hardware transcoding on an NVIDIA GPU (NVENC). Needs the
    # NVIDIA driver and the NVIDIA Container Toolkit on the host
    # runtime: nvidia
    # deploy:
    #   resources:
    #     reservations:
    #       devices:
    #         - driver: nvidia
    #           count: all
    #           capabilities: [gpu]

  # Optional: any Torznab indexer works. Prowlarr starts empty: you add
  # the indexers you are allowed to use. The Torsher setup wizard finds it
  # at http://prowlarr:9696 and asks only for its API key
  prowlarr:
    image: lscr.io/linuxserver/prowlarr:latest
    container_name: prowlarr
    restart: unless-stopped
    profiles: [prowlarr]
    ports:
      - '9696:9696'
    environment:
      PUID: 1000
      PGID: 1000
      TZ: Etc/UTC
    volumes:
      - ./prowlarr:/config

2. Set the file owner ​

Torsher writes files as the user in PUID and PGID. Find your IDs:

bash
id -u && id -g

If they are not 1000 and 1000, change PUID and PGID in docker-compose.yml. Use the same values for Prowlarr.

Set TZ to your time zone, for example Europe/Berlin, so schedules and logs show your local time.

3. Choose where data lives ​

One disk ​

The default is fine for most setups: everything lives in ./data next to docker-compose.yml.

yaml
volumes:
  - ./data:/data

Inside, Torsher creates:

FolderWhat's inside
/data/dbThe database, the key files secret.key and session.key, and the log. Back this up
/data/torrentsDownloads: the watch cache and what is still downloading
/data/libraryWhat you keep, laid out by title so Jellyfin, Plex and Kodi can read it too

Several disks ​

Keep /data on the system disk for the database, and mount the big disk once more as its own volume:

yaml
volumes:
  # Database and keys, on the system disk
  - ./data:/data
  # The big disk: downloads and the library together
  - /mnt/big:/storage
  # Movies and series you already have, read-only
  - /mnt/media/movies:/media/movies:ro

After the first start, choose the folders in the panel under Settings → Storage, card Folders (the setup wizard shows the same card): /storage/torrents for Downloads and /storage/library for Library. The folder browser shows free space and whether hard links work between the two.

Add the read-only folders under Library, then Add library, with the path inside the container, for example /media/movies. Torsher indexes them in place and never writes there.

Keep downloads and the library in one volume

Put both folders inside the same mounted volume, as /storage above. Two volumes, even on the same disk, block hard links: every kept file is copied and takes space twice. The folder browser and the storage settings warn when this happens.

When a folder already holds data, the panel asks whether to send only new files to the new folder or move everything there in the background.

4. Start ​

Torsher alone:

bash
docker compose up -d

Or Torsher with Prowlarr, if you don't run an indexer yet. See Indexers.

bash
docker compose --profile prowlarr up -d

5. Check that it works ​

bash
docker compose ps

The torsher container should be running, and within a minute healthy. Then open http://<server-address>:8080/panel/ in a browser. The address of the server in your network, on Linux:

bash
hostname -I

On the machine itself, http://localhost:8080/panel/ works too.

The panel asks you to create the owner account and starts the setup wizard.

Update ​

When a new version is out, the panel shows it on Overview and under Settings → About. To update, run in the folder with docker-compose.yml:

bash
docker compose pull
bash
docker compose up -d

Settings, the library and the watch history stay. Before an update that changes the database, the server makes a backup of it first. Details: Update and roll back.

If something went wrong ​

  • The container restarts. Read the log: docker compose logs torsher.
  • The data folder is not writable. PUID and PGID don't match the owner of the folder on the host. Fix them and run docker compose up -d again.
  • Port 8080 is taken. Change the left side of the port mapping, for example '8081:8080', and open the panel on that port.

More: Troubleshooting.

Next ​

Released under the AGPL-3.0 license. This product uses the TMDB API but is not endorsed or certified by TMDB.
Torsher includes no content: you choose your sources and are responsible for them. Privacy Policy