summaryrefslogtreecommitdiff
path: root/jellyfin/README.md
diff options
context:
space:
mode:
authorTyler Hoang <tyler@tylerhoang.xyz>2026-07-09 21:49:56 -0700
committerTyler Hoang <tyler@tylerhoang.xyz>2026-07-09 21:49:56 -0700
commit1d043702ef136e8f2e516c5304a57be5718f1f6f (patch)
tree9b3ad070f11dad5994c58acd41a15db8043745aa /jellyfin/README.md
Initial commit: docker compose files for all self-hosted servicesHEADmaster
12 services: adguard, ampache, azuracast, flood, glance, glances, grafana, immich, invidious, jellyfin, openwebui, watchtower Each service includes a docker-compose.yml, README.md with setup instructions, and .env.example where applicable.
Diffstat (limited to 'jellyfin/README.md')
-rw-r--r--jellyfin/README.md59
1 files changed, 59 insertions, 0 deletions
diff --git a/jellyfin/README.md b/jellyfin/README.md
new file mode 100644
index 0000000..7f64c6d
--- /dev/null
+++ b/jellyfin/README.md
@@ -0,0 +1,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.