summaryrefslogtreecommitdiff
path: root/jellyfin/README.md
blob: 7f64c6d97eaaecc8d423cea4db396c429321b3f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# Jellyfin + *arr Stack

Media server stack consisting of:
- **Jellyfin** — Media server (movies, TV, music, books)
- **Sonarr** — TV show management
- **Radarr** — Movie management
- **Prowlarr** — Indexer management
- **FlareSolverr** — Cloudflare bypass for indexers
- **Unpackerr** — Auto-extract downloaded archives
- **Recyclarr** — Automatic TRaSH-Guide sync for Sonarr/Radarr quality profiles

## Setup

### 1. Create the media user

Run the setup script to create a dedicated `media` user (UID 1001) and set correct permissions:
```
bash setup-media-user.sh
```

This script:
- Creates a `media` user/group with UID/GID 1001
- Fixes ownership on config directories
- Sets group permissions on `/srv/` media directories

### 2. Configure environment

Copy `.env.example` to `.env` and set your API keys:
```
cp .env.example .env
```

Get your API keys from Sonarr (Settings > General) and Radarr (Settings > General).

### 3. Start

```
docker compose up -d
```

## Access

| Service      | URL                     |
|-------------|--------------------------|
| Jellyfin     | `http://<host>:5000`    |
| Sonarr       | `http://<host>:8989`    |
| Radarr       | `http://<host>:7878`    |
| Prowlarr     | `http://<host>:9696`    |
| FlareSolverr | `http://<host>:8191`    |

## What to Configure

- **User/group IDs** — All services run as UID 1001/GID 1001. Change `user:`, `PUID`, and `PGID` throughout if your media user differs.
- **Time zone** — Replace `TZ=America/Los_Angeles` throughout with your timezone.
- **Media volumes** — All services mount `/srv:/data`. Your media root should be `/srv/` with subdirectories like `vids/`, `mus/`, etc. Adjust the host path if your storage layout differs.
- **Fonts** — Jellyfin mounts `/usr/local/share/fonts/` for custom fonts. Remove if not needed.
- **Hardware transcoding** — Jellyfin has `/dev/dri` passed through for VAAPI. Remove or adjust for your GPU setup.
- **API keys** — Set `SONARR_API_KEY` and `RADARR_API_KEY` in `.env` for Unpackerr. You also need to configure these keys inside Unpackerr's web UI on first run.
- **Recyclarr** — Configure `recyclarr-config/recyclarr.yml` to sync TRaSH-Guide profiles. Runs daily at 4 AM.