Skip to content

Arrstack

Docker VM hosting the arr stack media management services, running on proxfold.

VM details

Property Value
VM ID 101
Hostname arrstack
IP 192.168.1.252
OS Debian 12
Memory 8192 MB
Cores 2
Storage 16G root disk
Management Portainer

Services

Service Image Purpose Port
Sonarr linuxserver/sonarr TV show management 8989
Radarr linuxserver/radarr Movie management 7878
Prowlarr linuxserver/prowlarr Indexer manager 9696
qBittorrent linuxserver/qbittorrent Download client 8080
Overseerr sctx/overseerr Request management 5055
Portainer portainer/portainer-ce Docker management UI 9000
Homepage gethomepage/homepage Dashboard
Flaresolverr flaresolverr/flaresolverr Cloudflare bypass proxy 8191
Watchtower containrrr/watchtower Automatic image updates

Note

Portainer, Homepage, Flaresolverr, and Watchtower run as standalone containers outside the Portainer stack.

Request and download pipeline

User request                Indexer search           Download              Import & organise
┌──────────┐  request   ┌──────────┐  search   ┌──────────┐  torrent  ┌──────────────────┐
│ Overseerr │ ────────> │  Sonarr  │ ────────> │ Prowlarr │ ───────> │   qBittorrent    │
│           │           │  Radarr  │ <──────── │          │          │                  │
└──────────┘           └──────────┘           └──────────┘          └────────┬─────────┘
                             │                                               │
                             │  move/rename completed file                   │
                             │ <─────────────────────────────────────────────┘
                    ┌─────────────────┐         ┌──────────┐
                    │  ZFS Storage    │ ──────> │   Plex   │
                    │  /media/Movies  │         │          │
                    │  /media/TV Shows│         │ streams  │
                    └─────────────────┘         └──────────┘
  1. Overseerr — Users submit requests for movies or TV shows
  2. Sonarr / Radarr — Receives the request and searches for releases via Prowlarr
  3. Prowlarr — Queries configured indexers and returns results to Sonarr/Radarr
  4. Flaresolverr — Assists Prowlarr with indexer sites behind Cloudflare
  5. qBittorrent — Downloads the selected release to /media/Downloads
  6. Sonarr / Radarr — Detects the completed download, moves/renames the file to the library
  7. Plex — Detects the new file and makes it available for streaming

Docker Compose

Services are deployed as a Portainer stack. App configs are stored under /opt/mediaserver/ on the arrstack VM.

version: "3"
networks:
  default:
    name: arr
    external: true
services:
  prowlarr:
    image: linuxserver/prowlarr:latest
    container_name: prowlarr
    environment:
      - PUID=0
      - PGID=0
      - TZ=Etc/UTC
    volumes:
      - /opt/mediaserver/prowlarr:/config
    ports:
      - 9696:9696
    restart: unless-stopped
  radarr:
    image: linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=0
      - PGID=0
      - TZ=Etc/UTC
    volumes:
      - /opt/mediaserver/radarr:/config
      - /stash/rodneystash/Movies:/media/Movies
      - /stash/rodneystash/Downloads:/media/Downloads
    ports:
      - 7878:7878
    restart: unless-stopped
  sonarr:
    image: linuxserver/sonarr:latest
    container_name: sonarr
    environment:
      - PUID=0
      - PGID=0
      - TZ=Etc/UTC
    volumes:
      - /opt/mediaserver/sonarr:/config
      - /stash/rodneystash/TV Shows:/media/TV Shows
      - /stash/rodneystash/Downloads:/media/Downloads
    ports:
      - 8989:8989
    restart: unless-stopped
  overseerr:
    image: sctx/overseerr:latest
    container_name: overseerr
    environment:
      - LOG_LEVEL=debug
    volumes:
      - /opt/mediaserver/overseerr/config:/app/config
    ports:
      - 5055:5055
    restart: unless-stopped
  qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:latest
    container_name: qbittorrent
    environment:
      - PUID=0
      - PGID=0
      - TZ=Etc/UTC
      - WEBUI_PORT=8080
    volumes:
      - /opt/mediaserver/qbittorrent/config:/config
      - /stash/rodneystash/Downloads:/media/Downloads
    ports:
      - 8080:8080
      - 6881:6881
      - 6881:6881/udp
    restart: unless-stopped

Volume mounts

Container Container Path Host Path Purpose
Sonarr /config /opt/mediaserver/sonarr Config and database
Sonarr /media/TV Shows /stash/rodneystash/TV Shows TV library (ZFS)
Sonarr /media/Downloads /stash/rodneystash/Downloads Download import path
Radarr /config /opt/mediaserver/radarr Config and database
Radarr /media/Movies /stash/rodneystash/Movies Movie library (ZFS)
Radarr /media/Downloads /stash/rodneystash/Downloads Download import path
qBittorrent /config /opt/mediaserver/qbittorrent/config Config
qBittorrent /media/Downloads /stash/rodneystash/Downloads Download destination
Prowlarr /config /opt/mediaserver/prowlarr Config
Overseerr /app/config /opt/mediaserver/overseerr/config Config

Permissions

All Linuxserver.io containers run with PUID=0 and PGID=0 (root). Files created on the ZFS pool are owned by root:root with 755/644 permissions. Plex (uid 999) has read access via world-readable permissions.

Adding a new service

  1. Add the service to the Portainer stack compose file
  2. Map config to /opt/mediaserver/<service>/config:/config
  3. If it needs media access, mount paths from /stash/rodneystash/ at the paths the app expects
  4. Redeploy the stack via Portainer

Retired components

Component Purpose Status
LXC 103 (stash) SMB bridge from ZFS to Docker Shut down, onboot: 0
NAS CIFS mount in Plex Previous media source systemd unit disabled
rodneystash Docker volume CIFS mount to NAS Removed
/opt/mediaserver/data/ Original empty media directories Unused, can be deleted
Plex Docker container Was in compose, LXC is active Removed from compose
Bazarr Subtitle manager, not deployed Removed from compose