From 97f6aeb5389bb4413010d68fd01941983f5194e2 Mon Sep 17 00:00:00 2001 From: mr-forust Date: Thu, 27 Nov 2025 01:46:25 +0100 Subject: [PATCH 01/14] feat: basic jellyfin service --- streaming/.env.example | 1 + streaming/compose.yaml | 14 ++++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 streaming/.env.example create mode 100644 streaming/compose.yaml diff --git a/streaming/.env.example b/streaming/.env.example new file mode 100644 index 0000000..779b734 --- /dev/null +++ b/streaming/.env.example @@ -0,0 +1 @@ +TZ=Europe/Moscow \ No newline at end of file diff --git a/streaming/compose.yaml b/streaming/compose.yaml new file mode 100644 index 0000000..ca1ddc0 --- /dev/null +++ b/streaming/compose.yaml @@ -0,0 +1,14 @@ +services: + jellyfin: + image: lscr.io/linuxserver/jellyfin:latest + container_name: jellyfin + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TZ} + volumes: + - ./jellyfin/config:/config + - ./jellyfin/media:/data/media + networks: + - proxy + restart: unless-stopped \ No newline at end of file From fd72b415c54fbd3435b6355de57107fcfbaf0be1 Mon Sep 17 00:00:00 2001 From: mr-forust Date: Thu, 27 Nov 2025 01:47:56 +0100 Subject: [PATCH 02/14] fix: add traefik-proxy network for jellyfin --- streaming/compose.yaml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/streaming/compose.yaml b/streaming/compose.yaml index ca1ddc0..3d3f7ee 100644 --- a/streaming/compose.yaml +++ b/streaming/compose.yaml @@ -10,5 +10,8 @@ services: - ./jellyfin/config:/config - ./jellyfin/media:/data/media networks: - - proxy - restart: unless-stopped \ No newline at end of file + - traefik-proxy + restart: unless-stopped +networks: + traefik-proxy: + external: true \ No newline at end of file From bbd374590efe17dfcf8db81ae39e43bbc14688d6 Mon Sep 17 00:00:00 2001 From: mr-forust Date: Thu, 27 Nov 2025 01:51:20 +0100 Subject: [PATCH 03/14] chore: gitingore jellyfin's config files --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index f29520c..e390eee 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,9 @@ metube/MeTube_downloads uptime-kuma/data/ termix/termix-data/* +# Steaming services files +streaming/jellyfin/* + # Homepage homepage/files/assets/images/team/* From a3c12855fe4d8115bc15bf1ccb05be433ee166bb Mon Sep 17 00:00:00 2001 From: mr-forust Date: Thu, 27 Nov 2025 01:56:38 +0100 Subject: [PATCH 04/14] chore: volumes best-practices for jellyfin, ports for pre-traefik debugging --- streaming/compose.yaml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/streaming/compose.yaml b/streaming/compose.yaml index 3d3f7ee..269caf8 100644 --- a/streaming/compose.yaml +++ b/streaming/compose.yaml @@ -6,9 +6,14 @@ services: - PUID=1000 - PGID=1000 - TZ=${TZ} + ports: + - 8096:8096/tcp + - 7359:7359/udp volumes: - ./jellyfin/config:/config - - ./jellyfin/media:/data/media + - type: bind + source: .jellyfin/media + target: /media networks: - traefik-proxy restart: unless-stopped From b381c7b01280272b00f6a24664d7014a833d882d Mon Sep 17 00:00:00 2001 From: mr-forust Date: Thu, 27 Nov 2025 11:57:08 +0100 Subject: [PATCH 05/14] feat: jellyseerr service --- .gitignore | 1 + streaming/compose.yaml | 29 +++++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index e390eee..88c6f81 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ termix/termix-data/* # Steaming services files streaming/jellyfin/* +streaming/jellyseerr/* # Homepage homepage/files/assets/images/team/* diff --git a/streaming/compose.yaml b/streaming/compose.yaml index 269caf8..d09078e 100644 --- a/streaming/compose.yaml +++ b/streaming/compose.yaml @@ -12,11 +12,36 @@ services: volumes: - ./jellyfin/config:/config - type: bind - source: .jellyfin/media + source: ./jellyfin/media target: /media networks: - traefik-proxy + - streaming restart: unless-stopped + jellyseerr: + image: ghcr.io/fallenbagel/jellyseerr:latest + init: true + container_name: jellyseerr + environment: + - LOG_LEVEL=debug + - TZ=${TZ:-Europe/Moscow} + - PORT=5055 + ports: + - 5055:5055 + volumes: + - ./jellyseerr:/app/config + healthcheck: + test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1 + start_period: 20s + timeout: 3s + interval: 15s + retries: 3 + restart: unless-stopped + networks: + - traefik-proxy + - streaming + networks: traefik-proxy: - external: true \ No newline at end of file + external: true + streaming: \ No newline at end of file From 6c72acc59ebf0f96070fd5ed85c425b8da6de4bb Mon Sep 17 00:00:00 2001 From: mr-forust Date: Thu, 27 Nov 2025 20:12:17 +0100 Subject: [PATCH 06/14] refactor: change directory mappings, readability --- streaming/compose.yaml | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/streaming/compose.yaml b/streaming/compose.yaml index d09078e..9dcd80a 100644 --- a/streaming/compose.yaml +++ b/streaming/compose.yaml @@ -5,18 +5,16 @@ services: environment: - PUID=1000 - PGID=1000 - - TZ=${TZ} + - TZ=${TZ:-Europe/Moscow} ports: - - 8096:8096/tcp - - 7359:7359/udp + - "8096:8096/tcp" + - "7359:7359/udp" volumes: - ./jellyfin/config:/config - - type: bind - source: ./jellyfin/media - target: /media + - ./data/media:/media + - ./data/downloads:/downloads networks: - traefik-proxy - - streaming restart: unless-stopped jellyseerr: image: ghcr.io/fallenbagel/jellyseerr:latest @@ -27,11 +25,11 @@ services: - TZ=${TZ:-Europe/Moscow} - PORT=5055 ports: - - 5055:5055 + - "5055:5055" volumes: - ./jellyseerr:/app/config healthcheck: - test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1 + test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1"] start_period: 20s timeout: 3s interval: 15s @@ -39,9 +37,7 @@ services: restart: unless-stopped networks: - traefik-proxy - - streaming networks: traefik-proxy: - external: true - streaming: \ No newline at end of file + external: true \ No newline at end of file From 682a5b949fa6a6d1e2a087dc8c7999fdfe52d2ba Mon Sep 17 00:00:00 2001 From: mr-forust Date: Thu, 27 Nov 2025 20:12:41 +0100 Subject: [PATCH 07/14] chore: ignore sonarr, radarr, data files --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 88c6f81..14c0fd2 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,9 @@ termix/termix-data/* # Steaming services files streaming/jellyfin/* streaming/jellyseerr/* +streaming/sonarr/* +streaming/radarr/* +streaming/data/* # Homepage homepage/files/assets/images/team/* From ddb755e7e50d82fffd6ca9b5fba59a012067d222 Mon Sep 17 00:00:00 2001 From: mr-forust Date: Thu, 27 Nov 2025 20:14:11 +0100 Subject: [PATCH 08/14] feat: sonarr service --- streaming/compose.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/streaming/compose.yaml b/streaming/compose.yaml index 9dcd80a..b326a2a 100644 --- a/streaming/compose.yaml +++ b/streaming/compose.yaml @@ -37,6 +37,24 @@ services: restart: unless-stopped networks: - traefik-proxy + sonarr: + image: ghcr.io/hotio/sonarr:latest + container_name: sonarr + environment: + - PUID=1000 + - PGID=1000 + - UMASK=002 + - TZ=${TZ:-Europe/Moscow} + ports: + - "8989:8989" + volumes: + - ./sonarr/config:/config + - ./data/media/tv:/tv + - ./data/downloads:/downloads + networks: + - traefik-proxy + restart: unless-stopped + networks: traefik-proxy: From ce43b34ce01afc040563fb0bf538b79d9be003b9 Mon Sep 17 00:00:00 2001 From: mr-forust Date: Thu, 27 Nov 2025 20:17:52 +0100 Subject: [PATCH 09/14] chore: better readability --- streaming/compose.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/streaming/compose.yaml b/streaming/compose.yaml index b326a2a..1578a98 100644 --- a/streaming/compose.yaml +++ b/streaming/compose.yaml @@ -16,6 +16,7 @@ services: networks: - traefik-proxy restart: unless-stopped + jellyseerr: image: ghcr.io/fallenbagel/jellyseerr:latest init: true @@ -37,6 +38,7 @@ services: restart: unless-stopped networks: - traefik-proxy + sonarr: image: ghcr.io/hotio/sonarr:latest container_name: sonarr From f5313934818c9c19f5d3da08ff07b19dc9d16718 Mon Sep 17 00:00:00 2001 From: mr-forust Date: Thu, 27 Nov 2025 22:21:51 +0100 Subject: [PATCH 10/14] feat: qbittorrent --- .gitignore | 1 + streaming/compose.yaml | 26 +++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 14c0fd2..d9289af 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ streaming/jellyseerr/* streaming/sonarr/* streaming/radarr/* streaming/data/* +streaming/qbittorrent/* # Homepage homepage/files/assets/images/team/* diff --git a/streaming/compose.yaml b/streaming/compose.yaml index 1578a98..85625fb 100644 --- a/streaming/compose.yaml +++ b/streaming/compose.yaml @@ -15,6 +15,7 @@ services: - ./data/downloads:/downloads networks: - traefik-proxy + - streaming restart: unless-stopped jellyseerr: @@ -38,6 +39,7 @@ services: restart: unless-stopped networks: - traefik-proxy + - streaming sonarr: image: ghcr.io/hotio/sonarr:latest @@ -55,9 +57,31 @@ services: - ./data/downloads:/downloads networks: - traefik-proxy + - streaming restart: unless-stopped + depends_on: + - qbittorrent + qbittorrent: + image: ghcr.io/hotio/qbittorrent:latest + container_name: qbittorrent + environment: + - PUID=1000 + - PGID=1000 + - UMASK=002 + - TZ=Europe/Moscow + ports: + - "8181:8080" + - "6881:6881/udp" + volumes: + - ./qbittorrent:/config + - ./data:/data + restart: unless-stopped + networks: + - streaming networks: traefik-proxy: - external: true \ No newline at end of file + external: true + streaming: + driver: bridge \ No newline at end of file From 8cd122d50d1084ca5521331ad75f208564b1a0e2 Mon Sep 17 00:00:00 2001 From: mr-forust Date: Thu, 27 Nov 2025 22:50:21 +0100 Subject: [PATCH 11/14] feat: prowlarr service --- .gitignore | 1 + streaming/compose.yaml | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/.gitignore b/.gitignore index d9289af..ed6da58 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ streaming/sonarr/* streaming/radarr/* streaming/data/* streaming/qbittorrent/* +streaming/prowlarr/* # Homepage homepage/files/assets/images/team/* diff --git a/streaming/compose.yaml b/streaming/compose.yaml index 85625fb..62644c8 100644 --- a/streaming/compose.yaml +++ b/streaming/compose.yaml @@ -61,6 +61,7 @@ services: restart: unless-stopped depends_on: - qbittorrent + - prowlarr qbittorrent: image: ghcr.io/hotio/qbittorrent:latest @@ -79,6 +80,22 @@ services: restart: unless-stopped networks: - streaming + + prowlarr: + image: ghcr.io/hotio/prowlarr:latest + container_name: prowlarr + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TZ:-Europe/Moscow} + ports: + - "9696:9696" + volumes: + - ./prowlarr/config:/config + networks: + - traefik-proxy + - streaming + restart: unless-stopped networks: traefik-proxy: From 8d665a7f34519b6365a00c6f58204b377a82fa2f Mon Sep 17 00:00:00 2001 From: mr-forust Date: Mon, 19 Jan 2026 20:13:16 +0100 Subject: [PATCH 12/14] feat: jellyfin (starting from scratch) --- streaming/compose.yaml | 118 ++++++++++------------------------------- 1 file changed, 28 insertions(+), 90 deletions(-) diff --git a/streaming/compose.yaml b/streaming/compose.yaml index 62644c8..0b324fd 100644 --- a/streaming/compose.yaml +++ b/streaming/compose.yaml @@ -2,103 +2,41 @@ services: jellyfin: image: lscr.io/linuxserver/jellyfin:latest container_name: jellyfin - environment: - - PUID=1000 - - PGID=1000 - - TZ=${TZ:-Europe/Moscow} ports: - "8096:8096/tcp" - "7359:7359/udp" volumes: - - ./jellyfin/config:/config - - ./data/media:/media - - ./data/downloads:/downloads + # HACK: Binding while bootstrapping, testing + # - jellyfin-cfg:/config + - ./config/jellyfin:/config + - /mnt/mediaserver/media/Movies:/media/Movies + - /mnt/mediaserver/media/Shows:/media/Shows + devices: + - /dev/dri:/dev/dri + labels: + - "traefik.enable=true" + - "traefik.docker.network=proxy" + - "traefik.http.services.jellyfin.loadbalancer.server.port=8096" + # Prod Router + - "traefik.http.routers.jellyfin.rule=Host(`media.forust.xyz`)" + - "traefik.http.routers.jellyfin.entrypoints=websecure" + - "traefik.http.routers.jellyfin.tls=true" + # Local Router + - "traefik.http.routers.jellyfin-local.rule=Host(`media.workstation.internal`) || Host(`ms.internal`)" + - "traefik.http.routers.jellyfin-local.entrypoints=websecure" + - "traefik.http.routers.jellyfin-local.tls=true" + # Dev Router + - "traefik.http.routers.jellyfin-dev.rule=Host(`media.gigaforust.internal`)" + - "traefik.http.routers.jellyfin-dev.entrypoints=websecure" + - "traefik.http.routers.jellyfin-dev.tls=true" networks: - - traefik-proxy + - proxy - streaming restart: unless-stopped - - jellyseerr: - image: ghcr.io/fallenbagel/jellyseerr:latest - init: true - container_name: jellyseerr - environment: - - LOG_LEVEL=debug - - TZ=${TZ:-Europe/Moscow} - - PORT=5055 - ports: - - "5055:5055" - volumes: - - ./jellyseerr:/app/config - healthcheck: - test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1"] - start_period: 20s - timeout: 3s - interval: 15s - retries: 3 - restart: unless-stopped - networks: - - traefik-proxy - - streaming - - sonarr: - image: ghcr.io/hotio/sonarr:latest - container_name: sonarr - environment: - - PUID=1000 - - PGID=1000 - - UMASK=002 - - TZ=${TZ:-Europe/Moscow} - ports: - - "8989:8989" - volumes: - - ./sonarr/config:/config - - ./data/media/tv:/tv - - ./data/downloads:/downloads - networks: - - traefik-proxy - - streaming - restart: unless-stopped - depends_on: - - qbittorrent - - prowlarr - - qbittorrent: - image: ghcr.io/hotio/qbittorrent:latest - container_name: qbittorrent - environment: - - PUID=1000 - - PGID=1000 - - UMASK=002 - - TZ=Europe/Moscow - ports: - - "8181:8080" - - "6881:6881/udp" - volumes: - - ./qbittorrent:/config - - ./data:/data - restart: unless-stopped - networks: - - streaming - - prowlarr: - image: ghcr.io/hotio/prowlarr:latest - container_name: prowlarr - environment: - - PUID=1000 - - PGID=1000 - - TZ=${TZ:-Europe/Moscow} - ports: - - "9696:9696" - volumes: - - ./prowlarr/config:/config - networks: - - traefik-proxy - - streaming - restart: unless-stopped - +volumes: + jellyfin-cfg: networks: - traefik-proxy: + proxy: external: true streaming: - driver: bridge \ No newline at end of file + name: streaming \ No newline at end of file From e952c8161ae96cd52cea083e8bd5ba05940b4ba0 Mon Sep 17 00:00:00 2001 From: mr-forust Date: Mon, 19 Jan 2026 20:39:29 +0100 Subject: [PATCH 13/14] feat: add qbittorrent --- .gitignore | 8 +------- streaming/compose.yaml | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index c01ee8c..19947d9 100644 --- a/.gitignore +++ b/.gitignore @@ -23,13 +23,7 @@ headscale/config/* headscale/data/* # Steaming services files -streaming/jellyfin/* -streaming/jellyseerr/* -streaming/sonarr/* -streaming/radarr/* -streaming/data/* -streaming/qbittorrent/* -streaming/prowlarr/* +streaming/config/* # Steaming services files streaming/jellyfin/* diff --git a/streaming/compose.yaml b/streaming/compose.yaml index 0b324fd..5a312f6 100644 --- a/streaming/compose.yaml +++ b/streaming/compose.yaml @@ -2,6 +2,7 @@ services: jellyfin: image: lscr.io/linuxserver/jellyfin:latest container_name: jellyfin + restart: unless-stopped ports: - "8096:8096/tcp" - "7359:7359/udp" @@ -32,9 +33,26 @@ services: networks: - proxy - streaming + qbittorrent: + image: lscr.io/linuxserver/qbittorrent:latest + container_name: qbittorrent restart: unless-stopped + environment: + - WEBUI_PORT=8080 + volumes: + # HACK: Binding while bootstrapping, testing + # - qbittorrent-cfg:/config + - ./config/qbittorrent:/config + - /mnt/mediaserver/downloads:/downloads + ports: + - 8080:8080 + - 6881:6881 + - 6881:6881/udp + networks: + - streaming volumes: jellyfin-cfg: + qbittorrent-cfg: networks: proxy: external: true From 3be9556eb43aeda952c073c4fa3f3c95c5ab515d Mon Sep 17 00:00:00 2001 From: mr-forust Date: Mon, 19 Jan 2026 20:50:08 +0100 Subject: [PATCH 14/14] feat: add radarr --- streaming/compose.yaml | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/streaming/compose.yaml b/streaming/compose.yaml index 5a312f6..4163508 100644 --- a/streaming/compose.yaml +++ b/streaming/compose.yaml @@ -10,8 +10,8 @@ services: # HACK: Binding while bootstrapping, testing # - jellyfin-cfg:/config - ./config/jellyfin:/config - - /mnt/mediaserver/media/Movies:/media/Movies - - /mnt/mediaserver/media/Shows:/media/Shows + - /mnt/mediaserver/media/movies:/media/movies + - /mnt/mediaserver/media/movies:/media/movies devices: - /dev/dri:/dev/dri labels: @@ -50,6 +50,20 @@ services: - 6881:6881/udp networks: - streaming + radarr: + image: lscr.io/linuxserver/radarr:latest + container_name: radarr + restart: unless-stopped + ports: + - 7878:7878 + volumes: + # HACK: Binding while bootstrapping, testing + # - radarr-cfg:/config + - ./config/radarr:/config + - /mnt/mediaserver/downloads:/downloads + - /mnt/mediaserver/movies:/movies + networks: + - streaming volumes: jellyfin-cfg: qbittorrent-cfg: