Files
codeandClaude Opus 5.5 60e5197760 prowlarr: add FlareSolverr, promote from _dev
Add a FlareSolverr service on an internal network so Prowlarr can
get past Cloudflare challenges on tagged indexers, and document the
indexer proxy setup. Rename prowlarr_dev to prowlarr.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 17:10:40 +00:00

122 lines
6.0 KiB
Markdown

# Prowlarr
## Overview
Prowlarr is an indexer manager and proxy for the *arr ecosystem. It centralizes your torrent tracker and Usenet indexer configuration — add them once in Prowlarr and they sync automatically to Sonarr, Radarr, Lidarr, and Readarr. It's a modern replacement for Jackett with a unified API and built-in sync.
## Project Details
- **Project Repository:** [https://prowlarr.com/](https://prowlarr.com/)
- **Container Image:** [ghcr.io/hotio/prowlarr](https://hotio.dev/containers/prowlarr/)
- **Reverse Proxy Port:** `9696`
## Getting Started
Open http://localhost:9696 in your browser.
1. **Create the admin account** — on first boot Prowlarr shows an *Authentication Required* dialog. Set:
- **Authentication Method:** `Forms (Login Page)`
- **Authentication Required:** `Enabled` (or `Disabled for Local Addresses` if you trust your LAN)
- **Username / Password:** your admin credentials
Click **Save**. You'll be sent to the login page — sign in with the account you just created.
2. **Add an indexer** — go to **Indexers → Add Indexer** (the `+` button):
1. Filter the list by **Protocol** (torrent / usenet), **Language**, or **Privacy** (public / semi-private / private), or type the tracker name into the search box
2. Click the indexer to open its settings
3. **Public trackers** (e.g. 1337x, The Pirate Bay, YTS) usually need no extra settings
4. **Private trackers** need credentials from your account on that site — typically an **API key**, **passkey**, or **cookie / username + password** (the form tells you which field it needs; the tracker's profile/security page has the value)
5. **Usenet indexers** (e.g. NZBgeek, DrunkenSlug) need the **API key** from your indexer account page. Usenet providers (the server you download from) are *not* added here — they go in SABnzbd/NZBGet
6. Leave **Sync Profile** as `Standard` and **Tags** empty unless you need them
7. Click **Test** — a green check means Prowlarr can reach and authenticate with the indexer — then **Save**
Repeat for each indexer. If a tracker is behind Cloudflare and the test fails with a Cloudflare/challenge error, set up FlareSolverr (step 3) and tag that indexer with `flaresolverr`.
3. **Add FlareSolverr as an indexer proxy** — this stack runs a FlareSolverr container that solves Cloudflare challenges for Prowlarr. Go to **Settings → Indexers → `+` → FlareSolverr**:
- **Name:** `FlareSolverr`
- **Tags:** `flaresolverr` (only indexers with this tag are routed through it)
- **Host:** `http://flaresolverr:8191/`
- **Request Timeout:** `60`
Click **Test**, then **Save**. Then edit each Cloudflare-protected indexer, add the `flaresolverr` tag, and **Test** again.
4. **Connect your *arr apps** — go to **Settings → Apps → `+`** and pick Sonarr, Radarr, Lidarr, etc.:
- **Prowlarr Server:** how the *arr app reaches Prowlarr, e.g. `http://prowlarr:9696`
- **Sonarr/Radarr Server:** how Prowlarr reaches the app, e.g. `http://sonarr:8989` / `http://radarr:7878` (container names work since they share the `proxy` network)
- **API Key:** from the *arr app under **Settings → General → Security**
- **Sync Level:** `Full Sync` (Prowlarr adds, updates, and removes indexers in the app)
Click **Test**, then **Save**. Prowlarr pushes all configured indexers to the app automatically — don't add indexers directly in Sonarr/Radarr.
5. **Verify** — use **Search** in Prowlarr to run a test query across all indexers, and check **System → Status** for indexer health warnings.
### Download flow
Prowlarr does not handle downloads. It only provides indexer search results to your *arr apps — they in turn send downloads to qBittorrent, SABnzbd, etc.
## Environment Variable Notes
| Variable | Description |
|---|---|
| `PROWLARR_IMAGE` | Container image (default: `ghcr.io/hotio/prowlarr:release`) |
| `PROWLARR_RESTART` | Restart policy (default: `unless-stopped`) |
| `PROWLARR_PORT` | Published port for the web UI (default: `9696`) |
| `FLARESOLVERR_IMAGE` | FlareSolverr image (default: `ghcr.io/flaresolverr/flaresolverr:latest`) |
| `FLARESOLVERR_RESTART` | FlareSolverr restart policy (default: `unless-stopped`) |
| `FLARESOLVERR_LOG_LEVEL` | FlareSolverr log level (default: `info`; use `debug` when troubleshooting) |
| `TZ` | Timezone for FlareSolverr (default: `America/Vancouver`) |
| `VOL_PATH` | Base path for persistent data volumes (default: `/data`) |
## Volume Notes
| Volume | Purpose |
|---|---|
| `${VOL_PATH}/prowlarr/config` | Indexer configurations, app sync settings, database |
## Network Notes
Requires an external `proxy` network. Create it once with:
```bash
docker network create proxy
```
FlareSolverr sits on the stack's `internal` network only — it is not published to the host or the proxy network. Prowlarr joins both and reaches it at `http://flaresolverr:8191/`.
## Docker Run
```bash
docker network create prowlarr-internal
docker run -d \
--name=flaresolverr \
-e LOG_LEVEL=info \
-e TZ=America/Vancouver \
--network prowlarr-internal \
--restart unless-stopped \
ghcr.io/flaresolverr/flaresolverr:latest
docker run -d \
--name=prowlarr \
-e PUID=1000 \
-e PGID=1000 \
-e UMASK=002 \
-p 9696:9696 \
-v ${VOL_PATH:-/data}/prowlarr/config:/config \
--network proxy \
--restart unless-stopped \
ghcr.io/hotio/prowlarr:release
docker network connect prowlarr-internal prowlarr
```
## Additional Notes / Gotchas
- **FlareSolverr only helps tagged indexers** — untagged indexers bypass it. Don't tag everything; it's slow (spins up a headless Chromium per request).
- **Some challenges still fail** — Cloudflare changes often. If tests keep failing, pull the latest FlareSolverr image and set `FLARESOLVERR_LOG_LEVEL=debug` to see why.
## Dockhand Stack, Deploy from Git
- **Cookbooks Repository**
- **stackname:** prowlarr
- **Compose file path:** prowlarr/compose.yaml
- **Additional env file (optional):** prowlarr/sample.env
Load `prowlarr/sample.env` into the Environment variables in Dockhand, then create the Stack.