๐ดโโ ๏ธ 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 withtraefik.enable=trueare 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-dbcontainer runs automated compressed backups every 2 hours to/backup/auto-pirate/databaseand retains 24 copies. Pair with off-site sync for disaster recovery.