From 7ee4c069889e6bfdd523edc6be08124348019afe Mon Sep 17 00:00:00 2001 From: Yan Lin Date: Sun, 7 Sep 2025 04:01:02 +0200 Subject: [PATCH] Add media server stack --- modules/podman.nix | 131 ++++++++++++++++++++++++++++++++++++++++++++ modules/traefik.nix | 85 ++++++++++++++++++++++++++++ 2 files changed, 216 insertions(+) diff --git a/modules/podman.nix b/modules/podman.nix index ee1ce9b..843d480 100644 --- a/modules/podman.nix +++ b/modules/podman.nix @@ -114,6 +114,137 @@ autoStart = true; }; + + # Plex Media Server + containers.plex = { + image = "docker.io/linuxserver/plex:latest"; + + volumes = [ + "/home/yanlin/deploy/data/plex/config:/config" + "/mnt/storage/appbulk/plex-transcode:/transcode" + "/mnt/storage/Media:/data" + ]; + + environment = { + PUID = "1000"; + PGID = "100"; + TZ = "Europe/Copenhagen"; + VERSION = "docker"; + }; + + ports = [ + "32400:32400" + ]; + + extraOptions = [ + "--network=podman" + "--device=/dev/dri:/dev/dri" # Hardware acceleration + ]; + + autoStart = true; + }; + + # Sonarr TV show management + containers.sonarr = { + image = "docker.io/linuxserver/sonarr:latest"; + + volumes = [ + "/home/yanlin/deploy/data/sonarr/config:/config" + "/mnt/storage/Media:/data" + ]; + + environment = { + PUID = "1000"; + PGID = "100"; + TZ = "Europe/Copenhagen"; + }; + + ports = [ + "8989:8989" + ]; + + extraOptions = [ + "--network=podman" + ]; + + autoStart = true; + }; + + # Radarr movie management + containers.radarr = { + image = "docker.io/linuxserver/radarr:latest"; + + volumes = [ + "/home/yanlin/deploy/data/radarr/config:/config" + "/mnt/storage/Media:/data" + ]; + + environment = { + PUID = "1000"; + PGID = "100"; + TZ = "Europe/Copenhagen"; + }; + + ports = [ + "7878:7878" + ]; + + extraOptions = [ + "--network=podman" + ]; + + autoStart = true; + }; + + # Bazarr subtitle management + containers.bazarr = { + image = "docker.io/linuxserver/bazarr:latest"; + + volumes = [ + "/home/yanlin/deploy/data/bazarr/config:/config" + "/mnt/storage/Media:/data" + ]; + + environment = { + PUID = "1000"; + PGID = "100"; + TZ = "Europe/Copenhagen"; + }; + + ports = [ + "6767:6767" + ]; + + extraOptions = [ + "--network=podman" + ]; + + autoStart = true; + }; + + # qBittorrent torrent client with host networking + containers.qbittorrent = { + image = "docker.io/linuxserver/qbittorrent:4.6.7"; + + volumes = [ + "/home/yanlin/deploy/data/qbit/config:/config" + "/mnt/storage/Media:/data" + ]; + + environment = { + PUID = "1000"; + PGID = "100"; + TZ = "Europe/Copenhagen"; + TORRENTING_PORT = "41234"; + WEBUI_PORT = "8080"; + }; + + extraOptions = [ + "--network=host" # Use host networking as requested + ]; + + autoStart = true; + }; }; }; } \ No newline at end of file diff --git a/modules/traefik.nix b/modules/traefik.nix index cc16811..47c4ca3 100644 --- a/modules/traefik.nix +++ b/modules/traefik.nix @@ -91,6 +91,56 @@ }]; }; }; + plex = { + rule = "Host(`plex.hs.yanlincs.com`)"; + service = "plex"; + tls = { + certResolver = "cloudflare"; + domains = [{ + main = "*.hs.yanlincs.com"; + }]; + }; + }; + sonarr = { + rule = "Host(`sonarr.hs.yanlincs.com`)"; + service = "sonarr"; + tls = { + certResolver = "cloudflare"; + domains = [{ + main = "*.hs.yanlincs.com"; + }]; + }; + }; + radarr = { + rule = "Host(`radarr.hs.yanlincs.com`)"; + service = "radarr"; + tls = { + certResolver = "cloudflare"; + domains = [{ + main = "*.hs.yanlincs.com"; + }]; + }; + }; + bazarr = { + rule = "Host(`bazarr.hs.yanlincs.com`)"; + service = "bazarr"; + tls = { + certResolver = "cloudflare"; + domains = [{ + main = "*.hs.yanlincs.com"; + }]; + }; + }; + qbittorrent = { + rule = "Host(`qbit.hs.yanlincs.com`)"; + service = "qbittorrent"; + tls = { + certResolver = "cloudflare"; + domains = [{ + main = "*.hs.yanlincs.com"; + }]; + }; + }; }; services = { homeassistant = { @@ -114,6 +164,41 @@ }]; }; }; + plex = { + loadBalancer = { + servers = [{ + url = "http://localhost:32400"; + }]; + }; + }; + sonarr = { + loadBalancer = { + servers = [{ + url = "http://localhost:8989"; + }]; + }; + }; + radarr = { + loadBalancer = { + servers = [{ + url = "http://localhost:7878"; + }]; + }; + }; + bazarr = { + loadBalancer = { + servers = [{ + url = "http://localhost:6767"; + }]; + }; + }; + qbittorrent = { + loadBalancer = { + servers = [{ + url = "http://localhost:8080"; + }]; + }; + }; }; }; };