Skip to content

Commit 03efe22

Browse files
authored
Merge pull request #34 from joshdev8/feat/add-prowlarr-portainer-bazarr
Add Prowlarr, Portainer, and Bazarr as default services
2 parents 88711d6 + 14335f2 commit 03efe22

3 files changed

Lines changed: 67 additions & 10 deletions

File tree

CLAUDE.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@ There is no test suite. After changing `docker-compose.yml`, always run `docker
2323

2424
**Network isolation matters.** Services are split across four bridge networks and one host-mode service. A service can only reach another if they share a network — adding a new service requires picking the right one (or declaring multiple):
2525

26-
- `monitoring_network` — tautulli, grafana, telegraf, watchtower
27-
- `media_network` — seerr, radarr, sonarr
26+
- `monitoring_network` — tautulli, grafana, telegraf, watchtower, portainer
27+
- `media_network` — seerr, radarr, sonarr, prowlarr, bazarr
2828
- `download_network` — transmission, watchlistarr, cleanarr, requestrr, radarr, sonarr
2929
- `tracearr-network` — tracearr, timescale (PostgreSQL), redis
3030
- **host network** — plex only (required for proper streaming/discovery)
3131

32-
Radarr and Sonarr are deliberately on both `media_network` (so Seerr can submit requests) and `download_network` (so Watchlistarr/Transmission can reach them).
32+
Radarr and Sonarr are deliberately on both `media_network` (so Seerr, Prowlarr, and Bazarr can reach them) and `download_network` (so Watchlistarr/Transmission can reach them). Prowlarr and Bazarr only need `media_network` because their only inbound/outbound peers are the *arr APIs.
33+
34+
**Portainer mounts the Docker socket.** `portainer/portainer-ce` binds `/var/run/docker.sock` read-write, which is root-equivalent access to the host. If a user reports security concerns, this is the relevant exposure — flag it before recommending Portainer-based workflows.
3335

3436
**Tracearr is the only "app" in the stack.** Everything else is a single off-the-shelf container. Tracearr is a three-container subsystem (app + TimescaleDB + Redis) with healthcheck-gated `depends_on`, and it is the only service whose env vars use the `${VAR:?must be set}` fail-fast form — `DB_PASSWORD`, `JWT_SECRET`, and `COOKIE_SECRET` are required or the stack will refuse to start. Its external port is `3001` mapped to internal `3000` because Grafana already owns `3000` on the host.
3537

README.md

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,13 @@ flowchart LR
7979
Seerr -->|submits to| Sonarr
8080
Watchlistarr -->|drives| Radarr
8181
Watchlistarr -->|drives| Sonarr
82+
Prowlarr -->|provides indexers to| Radarr
83+
Prowlarr -->|provides indexers to| Sonarr
8284
8385
Radarr -->|sends torrents| Transmission
8486
Sonarr -->|sends torrents| Transmission
8587
Transmission -->|completed files| Plex
88+
Bazarr -->|fetches subtitles for| Plex
8689
8790
Plex -->|stream activity| Tautulli
8891
Plex -->|stream activity| Tracearr
@@ -121,6 +124,8 @@ A ready-to-use [Kometa](https://kometa.wiki/) (Plex Meta Manager) configuration
121124
| [Seerr](https://github.com/seerr-team/seerr) | Content request and management interface | `5055` |
122125
| [Radarr](https://radarr.video/) | Movie management and downloading | `7878` |
123126
| [Sonarr](https://sonarr.tv/) | TV show management and downloading | `8989` |
127+
| [Prowlarr](https://prowlarr.com/) | Indexer manager that feeds Radarr/Sonarr | `9696` |
128+
| [Bazarr](https://www.bazarr.media/) | Subtitle management for Radarr/Sonarr libraries | `6767` |
124129
| [Watchlistarr](https://github.com/nylonee/watchlistarr) | Syncs Plex watchlist to Radarr/Sonarr | N/A |
125130
| [Cleanarr](https://github.com/se1exin/Cleanarr) | Finds and removes duplicate content | N/A |
126131
| [Requestrr](https://github.com/darkalfx/requestrr) | Discord bot for content requests | `4545` |
@@ -139,6 +144,7 @@ A ready-to-use [Kometa](https://kometa.wiki/) (Plex Meta Manager) configuration
139144
| [Grafana](https://grafana.com/) | Metrics visualization | `3000` |
140145
| [Telegraf](https://www.influxdata.com/time-series-platform/telegraf/) | Metrics collection agent | N/A |
141146
| [Tracearr](https://github.com/connorgallopo/tracearr) | Stream tracking and account sharing detection | `3001` |
147+
| [Portainer](https://www.portainer.io/) | Docker management UI ([note on socket access](#a-note-on-portainer)) | `9000` |
142148

143149
### Infrastructure
144150

@@ -153,21 +159,22 @@ A ready-to-use [Kometa](https://kometa.wiki/) (Plex Meta Manager) configuration
153159
These services pair well with this stack but are not included in the default `docker-compose.yml`. See their respective docs to add them:
154160

155161
- **[Lidarr](https://lidarr.audio/)** - Music management and downloading
156-
- **[Bazarr](https://www.bazarr.media/)** - Subtitle management
157-
- **[Prowlarr](https://prowlarr.com/)** - Indexer management for Radarr/Sonarr
158-
- **[Jackett](https://github.com/Jackett/Jackett)** - Torrent indexer aggregator
159-
- **[Portainer](https://www.portainer.io/)** - Docker management UI
162+
- **[Jackett](https://github.com/Jackett/Jackett)** - Torrent indexer aggregator (Prowlarr covers most use cases)
160163

161164
## Network Architecture
162165

163166
Services are isolated into separate Docker networks:
164167

165-
- **`monitoring_network`** - Tautulli, Grafana, Telegraf, Watchtower
166-
- **`media_network`** - Seerr, Radarr, Sonarr
168+
- **`monitoring_network`** - Tautulli, Grafana, Telegraf, Watchtower, Portainer
169+
- **`media_network`** - Seerr, Radarr, Sonarr, Prowlarr, Bazarr
167170
- **`download_network`** - Transmission, Watchlistarr, Cleanarr, Requestrr, Radarr, Sonarr
168171
- **`tracearr-network`** - Tracearr, TimescaleDB, Redis
169172

170-
Plex runs in host network mode for optimal streaming performance. Radarr and Sonarr are attached to both `media_network` (so Seerr can submit requests to them) and `download_network` (so Watchlistarr and Transmission can reach them).
173+
Plex runs in host network mode for optimal streaming performance. Radarr and Sonarr are attached to both `media_network` (so Seerr, Prowlarr, and Bazarr can reach them) and `download_network` (so Watchlistarr and Transmission can reach them).
174+
175+
### A note on Portainer
176+
177+
Portainer mounts the host's Docker socket (`/var/run/docker.sock`) so it can manage every container. **This grants the Portainer UI root-equivalent access to the host** — anyone who logs in can stop, restart, or exec into any container, including those handling secrets. Set a strong admin password on first launch and don't expose port `9000` to the public internet.
171178

172179
## Kometa Configuration
173180

docker-compose.yml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,20 @@ services:
6767
- /var/run/docker.sock:/var/run/docker.sock
6868
restart: unless-stopped
6969

70+
portainer:
71+
container_name: portainer
72+
image: portainer/portainer-ce:latest
73+
networks:
74+
- monitoring_network
75+
ports:
76+
- "9000:9000"
77+
environment:
78+
- TZ=${TZ}
79+
volumes:
80+
- /var/run/docker.sock:/var/run/docker.sock
81+
- portainer_data:/data
82+
restart: unless-stopped
83+
7084
# ============ MEDIA MANAGEMENT ============
7185
seerr:
7286
image: ghcr.io/seerr-team/seerr:latest
@@ -122,6 +136,37 @@ services:
122136
- ${USERDIR}/plex/media:/media
123137
restart: unless-stopped
124138

139+
prowlarr:
140+
container_name: prowlarr
141+
image: linuxserver/prowlarr
142+
networks:
143+
- media_network
144+
ports:
145+
- "9696:9696"
146+
environment:
147+
- PUID=${PUID}
148+
- PGID=${PGID}
149+
- TZ=${TZ}
150+
volumes:
151+
- ${USERDIR}/prowlarr/config:/config
152+
restart: unless-stopped
153+
154+
bazarr:
155+
container_name: bazarr
156+
image: linuxserver/bazarr
157+
networks:
158+
- media_network
159+
ports:
160+
- "6767:6767"
161+
environment:
162+
- PUID=${PUID}
163+
- PGID=${PGID}
164+
- TZ=${TZ}
165+
volumes:
166+
- ${USERDIR}/bazarr/config:/config
167+
- ${USERDIR}/plex/media:/media
168+
restart: unless-stopped
169+
125170
# ============ MEDIA CENTER ============
126171
watchlistarr:
127172
container_name: watchlistarr
@@ -252,5 +297,8 @@ volumes:
252297
transmission:
253298
radarr:
254299
sonarr:
300+
prowlarr:
301+
bazarr:
302+
portainer_data:
255303
timescale_data:
256304
redis_data:

0 commit comments

Comments
 (0)