Skip to content

๐Ÿดโ€โ˜ ๏ธ ARR-Stack

Host: Homelab ยท Compose: Homelab/ARR-Stack/compose.yaml
Stack name: arr-stack

1. Overview

The ARR-Stack is the media automation backbone of the homelab. It orchestrates the full pipeline from content discovery through to final delivery into Jellyfin/Plex โ€” covering TV, movies, music, and subtitles. All *arr apps share a common PostgreSQL database for performance and centralised backups.


2. Architecture & Services

Service Image Port Role
arr-stack-db 11notes/postgres:17@sha256:6860d92d13eabd73703220ebc9ee401c12922d4eb7715e70adf3b2041768a486 5432 Shared PostgreSQL database backend for all *arr apps
bazarr ghcr.io/hotio/bazarr:release-v1.6.1 6767 Subtitle fetching and management
cleanuparr ghcr.io/cleanuparr/cleanuparr:2.10.6 11011 Automated queue cleanup for stalled/unwanted downloads
gatus_auto_pirate twinproduction/gatus:v5.36.0 8081 Health monitoring for ARR services
lidarr linuxserver/lidarr:3.0.1-develop 8686 Music library management and download automation
prowlarr 11notes/prowlarr:2.6.5 9696 Indexer aggregator (syncs to all *arr apps)
pulsarr lakker/pulsarr:0.19.2 3003 Plex/Jellyfin watchlist โ†’ Radarr/Sonarr bridge
radarr 11notes/radarr:6.4.4 7878 Movie download automation
seerr ghcr.io/seerr-team/seerr:v3.4.1 5055 Media request portal (Jellyseerr fork)
socket-proxy 11notes/socket-proxy:2.1.7 2375 Secure Docker socket proxy (used by other services)
sonarr 11notes/sonarr:4.0.20 8989 TV show download automation
sonobarr ghcr.io/dodelidoo-labs/sonobarr:0.13.0 5000 Sonarr โ†” Lidarr concert/soundtrack bridge
traefik-kop_ap ghcr.io/jittering/traefik-kop:0.20.1 โ€” Publishes Traefik labels to Redis for the primary Traefik instance

3. Networking

  • auto_pirate โ€” Internal bridge network connecting all *arr apps to each other and the database.
  • database โ€” External network shared with the main services stack for PostgreSQL access.
  • db โ€” โ€”
  • gatus-net โ€” External network connecting the local Gatus health monitor to the main Gatus aggregator.
  • traefik โ€” External network shared with the Traefik reverse proxy. Services labelled with traefik.enable=true are automatically discovered.

4. Persistent Storage

| Container | Host Path / Volume | Description | |---|---|---|| | arr-stack-db | /backup/auto-pirate/database | Automated DB backups | | arr-stack-db | /docker/data/autopirate/database/etc | PostgreSQL config | | arr-stack-db | /docker/data/autopirate/database/var | PostgreSQL data | | bazarr | /docker/data/autopirate/bazarr/config | Bazarr config | | bazarr | /nfs/media | NFS-mounted media library (shared) | | cleanuparr | /docker/data/autopirate/cleanuparr | Cleanuparr config | | gatus_auto_pirate | /docker/data/autopirate/gatus | Gatus config | | lidarr | /docker/data/autopirate/lidarr | Lidarr config | | lidarr | /nfs/media/Downloads | โ€” | | lidarr | /nfs/media/Music | โ€” | | prowlarr | /docker/data/autopirate/prowlarr | Prowlarr config | | pulsarr | /docker/data/autopirate/pulsarr/data | Pulsarr data | | radarr | /docker/data/autopirate/radarr | Radarr config | | radarr | /nfs/media | NFS-mounted media library (shared) | | radarr | /nfs/media/Downloads | โ€” | | radarr | /nfs/media/Movies | โ€” | | seerr | /docker/data/autopirate/seerr | โ€” | | socket-proxy | /run/docker.sock | โ€” | | socket-proxy | socket-proxy | โ€” | | sonarr | /docker/data/autopirate/sonarr | Sonarr config | | sonarr | /nfs/media | NFS-mounted media library (shared) | | sonarr | /nfs/media/Downloads | โ€” | | sonobarr | /docker/data/autopirate/sonobarr | Sonobarr config | | sonobarr | /etc/localtime | โ€” | | sonobarr | /nfs/media/Music | โ€” | | traefik-kop_ap | /var/run/docker.sock | โ€” |


5. Environment Variables

Variable Service Description
POSTGRES_BACKUP_RETENTION arr-stack-db Number of backups to retain
POSTGRES_BACKUP_SCHEDULE arr-stack-db Cron schedule for DB backups (0 */2 * * *)
POSTGRES_PASSWORD arr-stack-db Database root password (set in compose)
TZ arr-stack-db Australia/Sydney
PGID bazarr โ€”
PUID bazarr โ€”
TZ bazarr Australia/Sydney
BASE_PATH cleanuparr โ€”
PGID cleanuparr โ€”
PORT cleanuparr โ€”
PUID cleanuparr โ€”
TZ cleanuparr Australia/Sydney
UMASK cleanuparr โ€”
PGID lidarr โ€”
PUID lidarr โ€”
TZ lidarr Australia/Sydney
TZ prowlarr Australia/Sydney
TZ pulsarr Australia/Sydney
baseUrl pulsarr Host IP where Pulsarr is reachable by Sonarr/Radarr
port pulsarr โ€”
TZ radarr Australia/Sydney
LOG_LEVEL seerr โ€”
PGID seerr โ€”
PORT seerr โ€”
PUID seerr โ€”
TZ seerr Australia/Sydney
TZ sonarr Australia/Sydney
REDIS_ADDR traefik-kop_ap Redis address for Traefik label sync
SKIP_REPLACE traefik-kop_ap โ€”

6. Access & Usage

Service URL
Sonarr https://sonarr.home-lab.micky.id.au
Radarr https://radarr.home-lab.micky.id.au
Lidarr https://lidarr.home-lab.micky.id.au
Prowlarr https://prowlarr.home-lab.micky.id.au
Bazarr https://bazarr.home-lab.micky.id.au
Cleanuparr https://cleanuparr.home-lab.micky.id.au
Pulsarr https://pulsarr.home-lab.micky.id.au
Sonobarr https://sonobarr.home-lab.micky.id.au
# Start the stack
docker compose -f Homelab/ARR-Stack/compose.yaml up -d

# View logs
docker compose -f Homelab/ARR-Stack/compose.yaml logs -f sonarr

# Health check
curl -f http://localhost:11011/health   # cleanuparr

7. Maintenance & Backup

# Update all images
docker compose -f Homelab/ARR-Stack/compose.yaml pull
docker compose -f Homelab/ARR-Stack/compose.yaml up -d

# Manual DB backup (triggered automatically by cron)
docker exec arr-stack-db pg_dump ...

# Backup paths
/backup/auto-pirate/database   # PostgreSQL backups (auto, every 2h)
/docker/data/autopirate/       # Config directories โ€” back up with rsync or Velld

[!TIP] The arr-stack-db container runs automated compressed backups every 2 hours to /backup/auto-pirate/database and retains 24 copies. Pair with off-site sync for disaster recovery.