Update README.md
This commit is contained in:
@@ -1 +1,188 @@
|
||||
# Arrs stack placeholder
|
||||
# Arr Stack
|
||||
|
||||
Self-hosted media automation stack running via individual Docker Compose files, organized per service.
|
||||
|
||||
---
|
||||
|
||||
## Repository Structure
|
||||
|
||||
```
|
||||
arr-stack/
|
||||
├── bazarr/ docker-compose.yaml
|
||||
├── ersatz/ docker-compose.yaml
|
||||
├── flaresolverr/ docker-compose.yaml
|
||||
├── kometa/ docker-compose.yaml
|
||||
├── lidarr/ docker-compose.yaml
|
||||
├── plexautolanguages/ docker-compose.yaml
|
||||
├── prowlarr/ docker-compose.yaml
|
||||
├── qbit-vpn/ docker-compose.yaml
|
||||
├── radarr/ docker-compose.yaml
|
||||
├── radarr4k/ docker-compose.yaml
|
||||
├── readarr/ docker-compose.yaml
|
||||
├── seerr/ docker-compose.yaml
|
||||
├── sonarr/ docker-compose.yaml
|
||||
├── sonarr4k/ docker-compose.yaml
|
||||
├── tautulli/ docker-compose.yaml
|
||||
├── refresh-radarr.sh
|
||||
├── refresh-radarr4k.sh
|
||||
├── refresh-sonarr.sh
|
||||
└── refresh-sonarr4k.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Services
|
||||
|
||||
| Service | Port | Purpose |
|
||||
|---------|------|---------|
|
||||
| [Prowlarr](https://github.com/Prowlarr/Prowlarr) | `9696` | Indexer manager - feeds all *arrs |
|
||||
| [Radarr](https://radarr.video/) | `7878` | Movie collection manager |
|
||||
| [Radarr 4K](https://radarr.video/) | `7879` | Movie collection manager (4K library) |
|
||||
| [Sonarr](https://sonarr.tv/) | `8989` | TV series collection manager |
|
||||
| [Sonarr 4K](https://sonarr.tv/) | `8990` | TV series collection manager (4K library) |
|
||||
| [Lidarr](https://lidarr.audio/) | `8686` | Music collection manager |
|
||||
| [Readarr](https://readarr.com/) | `8787` | Book/audiobook collection manager |
|
||||
| [Bazarr](https://www.bazarr.media/) | `6767` | Subtitle manager |
|
||||
| [FlareSolverr](https://github.com/FlareSolverr/FlareSolverr) | `8191` | Cloudflare bypass proxy for indexers |
|
||||
| [Seerr](https://github.com/seerr-team/seerr) | `5055` | Media request portal (Overseerr fork) |
|
||||
| [Tautulli](https://tautulli.com/) | `8181` | Plex stats and monitoring |
|
||||
| [Kometa](https://kometa.wiki/) | `-` | Plex metadata/collections manager (runs on schedule at 03:00) |
|
||||
| [PlexAutoLanguages](https://github.com/RemiRigal/Plex-Auto-Languages) | `-` | Auto-sets audio/subtitle language per user, set audio/subtitle language once for a show and all episodes will change |
|
||||
| [ErsatzTV](https://ersatztv.org/) | `8409` | Virtual live TV channels from local media (only works for Plex Media Server owner and those in owner's 'Plex Home') |
|
||||
| [qBittorrent + VPN](https://github.com/DyonR/docker-qbittorrentvpn) | `8080` / `8443` | Torrent client behind OpenVPN; HTTPS via sidecar Nginx |
|
||||
|
||||
---
|
||||
|
||||
## Data Layout
|
||||
|
||||
All services share a common volume structure on the host:
|
||||
|
||||
| Host Path | Purpose |
|
||||
|-----------|---------|
|
||||
| `/data` | Unified media root (movies, tv, music, books, downloads) |
|
||||
| `/arr/<service>/appdata` | Per-service config (most services) |
|
||||
| `/arr/<service>/config` | Per-service config (some services use `/config` naming) |
|
||||
|
||||
Having all services share `/data` means completed downloads are visible to the *arrs without cross-device moves.
|
||||
|
||||
---
|
||||
|
||||
## Refresh Scripts
|
||||
|
||||
The four refresh scripts hit their respective service's API to trigger a metadata refresh, missing media search, and RSS sync in sequence. Useful after library changes or to kick a stalled queue. NOTE: Arrs apps only search one time after adding a movie or tv-show. Manual refresh required if not using these scripts.
|
||||
|
||||
| Script | Target | Port |
|
||||
|--------|--------|------|
|
||||
| `refresh-radarr.sh` | Radarr | `7878` |
|
||||
| `refresh-radarr4k.sh` | Radarr 4K | `7879` |
|
||||
| `refresh-sonarr.sh` | Sonarr | `8989` |
|
||||
| `refresh-sonarr4k.sh` | Sonarr 4K | `8990` |
|
||||
|
||||
Before using, set `API_KEY` at the top of each script to the API key found under **Settings → General** in the respective service UI.
|
||||
|
||||
```bash
|
||||
chmod +x refresh-*.sh
|
||||
./refresh-radarr.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## qBittorrent + VPN
|
||||
|
||||
The `qbit-vpn` stack runs two containers: the torrent client behind OpenVPN (`dyonr/qbittorrentvpn`) and a sidecar Nginx that terminates HTTPS on port `8443` and proxies to the qBittorrent web UI. The VPN credentials are in the compose file - keep that file out of public repos.
|
||||
|
||||
Ports:
|
||||
- `8080` - qBittorrent web UI (HTTP, LAN only)
|
||||
- `8443` - qBittorrent web UI (HTTPS via Nginx sidecar)
|
||||
- `8999` / `8999/udp` - torrent peer traffic
|
||||
|
||||
SSL certs for Nginx are bind-mounted from `/arr/qbittorrent/ssl`. The Nginx config is at `/arr/qbittorrent/nginx.conf`.
|
||||
|
||||
---
|
||||
|
||||
## Starting / Stopping Services
|
||||
|
||||
Each service is independent. From its directory:
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
docker compose down
|
||||
docker compose pull && docker compose up -d # update
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
- All *arr services run as `PUID=0 / PGID=0` (root). This is due to how SMB shares are mounted to Proxmox LXCs, requiring 'PUID / PGID = 0'. If running in a VM (recommended), consider dropping to a dedicated `arr` user if hardening the host.
|
||||
- `readarr` uses the `develop` tag (no stable release exists yet).
|
||||
- `seerr` includes a healthcheck on `/api/v1/status` - useful for Uptime Kuma monitoring.
|
||||
- `kometa` runs with `network_mode: host` so it can reach other services on localhost.
|
||||
- FlareSolverr's port and log level are configurable via `.env` (`PORT`, `LOG_LEVEL`).
|
||||
|
||||
---
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Kometa Configuration (`kometa/config/config.yml`)
|
||||
|
||||
The Kometa config is templated - copy `config.yml.template` to `config.yml` and fill in credentials before first run.
|
||||
|
||||
### Active Libraries
|
||||
|
||||
| Library | Collections | Overlays |
|
||||
|---------|-------------|---------|
|
||||
| Movies | `basic`, `imdb` defaults | `media_info.yml`, `audience_rating.yml` |
|
||||
| TV Shows | `basic`, `imdb` defaults | `media_info.yml`, `audience_rating.yml` |
|
||||
| Music | `config/Music.yml` (local) | - |
|
||||
|
||||
4K Movies and 4K TV Shows libraries are defined but commented out. Uncomment and add to the `libraries:` block if/when those Plex libraries are active.
|
||||
|
||||
### Connected Services
|
||||
|
||||
| Service | Placeholder | Port |
|
||||
|---------|-------------|------|
|
||||
| Plex | `<YOUR_PLEX_IP>` | `32400` |
|
||||
| Tautulli | `<YOUR_TAUTULLI_IP>` | `8181` |
|
||||
| Radarr | `<YOUR_RADARR_IP>` | `7878` - root: `/data/media/movies` - profile: `HD - 720p/1080p` |
|
||||
| Radarr 4K | `<YOUR_RADARR_4K_IP>` | `7879` - root: `/data/media/4k_movies` - profile: `Ultra-HD` |
|
||||
| Sonarr | `<YOUR_SONARR_IP>` | `8989` - root: `/data/media/tv_shows` - profile: `HD - 720p/1080p` |
|
||||
| Sonarr 4K | `<YOUR_SONARR_4K_IP>` | `8990` - root: `/data/media/4ktv_shows` - profile: `Ultra-HD` |
|
||||
|
||||
### Credentials to Fill In
|
||||
|
||||
All of the following must be set in `config.yml` before Kometa will run. Find them in each service's UI under **Settings → General → API Key** (or equivalent):
|
||||
|
||||
| Placeholder | Where to get it |
|
||||
|-------------|----------------|
|
||||
| `<YOUR_PLEX_TOKEN>` | Plex → Account → [Get token](https://support.plex.tv/articles/204059436/) |
|
||||
| `<YOUR_TMDB_API_KEY>` | [TMDb API settings](https://www.themoviedb.org/settings/api) - **required** |
|
||||
| `<YOUR_TAUTULLI_API_KEY>` | Tautulli → Settings → Web Interface |
|
||||
| `<YOUR_RADARR_API_KEY>` | Radarr → Settings → General |
|
||||
| `<YOUR_RADARR_4K_API_KEY>` | Radarr 4K → Settings → General |
|
||||
| `<YOUR_SONARR_API_KEY>` | Sonarr → Settings → General |
|
||||
| `<YOUR_SONARR_4K_API_KEY>` | Sonarr 4K → Settings → General |
|
||||
| `github.token` | GitHub → Settings → Developer settings → Personal access tokens |
|
||||
| `omdb.apikey` | [OMDb API](https://www.omdbapi.com/apikey.aspx) |
|
||||
| `mdblist.apikey` | [MDBList](https://mdblist.com/preferences/) |
|
||||
| `trakt.client_id` / `client_secret` | [Trakt API apps](https://trakt.tv/oauth/applications) |
|
||||
|
||||
Notifiarr, Gotify, AniDB, and MAL are stubbed out but disabled - fill in only if you use them.
|
||||
|
||||
### Custom Overlays
|
||||
|
||||
Local overlay files are expected at:
|
||||
|
||||
```
|
||||
kometa/config/overlays/media_info.yml
|
||||
kometa/config/overlays/audience_rating.yml
|
||||
```
|
||||
|
||||
And the Music collection file at:
|
||||
|
||||
```
|
||||
kometa/config/Music.yml
|
||||
```
|
||||
|
||||
These are not included in this repo - create or source them separately.
|
||||
|
||||
Reference in New Issue
Block a user