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 │
└─────────────────┘ └──────────┘
- Overseerr — Users submit requests for movies or TV shows
- Sonarr / Radarr — Receives the request and searches for releases via Prowlarr
- Prowlarr — Queries configured indexers and returns results to Sonarr/Radarr
- Flaresolverr — Assists Prowlarr with indexer sites behind Cloudflare
- qBittorrent — Downloads the selected release to
/media/Downloads - Sonarr / Radarr — Detects the completed download, moves/renames the file to the library
- 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¶
- Add the service to the Portainer stack compose file
- Map config to
/opt/mediaserver/<service>/config:/config - If it needs media access, mount paths from
/stash/rodneystash/at the paths the app expects - 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 |
Related¶
- Storage — ZFS pool and NFS export details
- Plex — media streaming end of the pipeline
- Network overview — service ports and IPs
- Backup & Restore runbook