# HTPC & Media Services Platform Beheert de configuratie, deployment en automatisering van de HTPC (Home Theater PC) en media-stack voor `bnhmeijer.nl` op `vmserver` (`10.2.0.4`). --- ## 🧭 Inhoudsopgave - [Overzicht](#-overzicht) - [Applicaties & Services](#-applicaties--services) - [Architectuur & Ingress](#-architectuur--ingress) - [Opslag & Mounts](#-opslag--mounts) - [GitOps & Deployment](#-gitops--deployment) --- ## 📌 Overzicht Deze repository bevat de Kubernetes manifests, configuraties en eventuele hulpscripts voor de HTPC mediadiensten. De workloads worden beheerd via GitOps (Gitea Actions en ArgoCD) binnen het homelab cluster. --- ## 🎬 Applicaties & Services De HTPC omgeving omvat onder andere de volgende diensten: | Service | Poort | Beschrijving | | :--- | :--- | :--- | | **Jellyfin** | `8096` | Media streaming en playback server voor films, series en muziek | | **Sonarr** | `8989` | Automatisch beheer en downloaden van tv-series | | **Radarr** | `7878` | Automatisch beheer en downloaden van speelfilms | | **Lidarr** | `8686` | Automatisch beheer en downloaden van muziek | | **Bazarr** | `6767` | Ondertitelbeheer en synchronisatie | | **Jackett / Prowlarr** | `9117` / `9696` | Torrent- en usenet indexer proxy | | **SABnzbd / Transmission** | `8080` / `9091` | Downloadclients voor media-acquisitie (BitTorrent peer-poort `53662`) | | **slskd** | `5030` / `50300` | Soulseek peer-to-peer client en web daemon (HTTP: `5030`, Soulseek listen: `50300`) | --- ## 🏛️ Architectuur & Ingress - **SSL & Reverse Proxy**: Inkomend verkeer verloopt via de centrale Apache reverse proxy op `thuus.bnhmeijer.nl`. - **Authenticatie**: Beveiligd via Keycloak OIDC of ingebouwde service-authenticatie. - **Interne routering**: Envoy Gateway HTTPRoutes routeren verkeer direct naar de betreffende Kubernetes pods in de `htpc` namespace. --- ## 🚀 Migratie van Host Services naar Kubernetes ### Radarr Voor het migreren van de standalone `radarr.service` op `10.2.0.4` naar de Kubernetes pod is een geautomatiseerd script beschikbaar: ```bash # Migratie uitvoeren (stopt host service, synct /storage/var/lib/radarr naar K8s PVC, start pod): ./migrate_radarr_to_cluster.sh # Terugrollen naar standalone service indien gewenst: ./rollback_radarr_migration.sh ``` - **Dataopslag**: PersistentVolumeClaim `radarr-config` (10Gi, `local-path` op `/datadisk/infra/pv`). - **Mediaopslag**: HostPath `/datadisk` gemount op `/datadisk` (voor films in `/datadisk/htpc/Films` en downloads in `/datadisk/upload`). - **Netwerk & Ingress**: Luistert op poort `7878` (zowel via ClusterIP als HostPort `7878` op `10.2.0.4`), waardoor de bestaande Apache reverse proxy rule (`ProxyPass /radarr http://127.0.0.1:7878/radarr`) naadloos blijft functioneren. ### Transmission De BitTorrent daemon (`transmission`) draait als pod in de `htpc` namespace: - **Dataopslag**: PersistentVolumeClaim `transmission-config` (10Gi, `local-path` op `/datadisk/infra/pv`), gemigreerd vanuit `/var/www/.config/transmission-daemon` met behoud van alle torrents, resume-bestanden en instellingen. - **Mediaopslag**: HostPath `/datadisk` en `/mnt/mp3` zodat `/datadisk/upload/finished` en `/datadisk/upload/incomplete` identiek zijn voor Transmission, Radarr, Sonarr en Lidarr. - **Netwerk**: Web UI / RPC op poort `9091` (ClusterIP + HostPort `9091`) en BitTorrent peer-poort `53662` (TCP & UDP, ClusterIP + HostPort `53662`). ### slskd De Soulseek daemon (`slskd`) draait als pod in de `htpc` namespace: - **Dataopslag**: PersistentVolumeClaim `slskd-config` (10Gi, `local-path` op `/datadisk/infra/pv`), gemigreerd vanuit `/var/www/.local/share/slskd` via een init-container (inclusief `slskd.yml`, SQLite databases en state). - **Mediaopslag**: HostPath `/datadisk` gemount op `/datadisk` (voor `/datadisk/upload/slskd`, `/datadisk/upload/incomplete` en `/datadisk/htpc/mp3`) en `/mnt/mp3` gemount op `/mnt/mp3`. - **Netwerk**: Web UI op poort `5030` (ClusterIP + HostPort `5030`), optioneel HTTPS op poort `5031` en Soulseek listen poort `50300` (ClusterIP + HostPort `50300`). - **Migratie & Opruimen**: ```bash # Migratie uitvoeren (maakt backup in /storage/backups/, stopt host service, start pod): ./migrate_slskd_to_cluster.sh # Oude host bestanden en service opruimen: ./cleanup_old_slskd.sh ``` ### Jackett De torrent indexer proxy (`jackett`) draait als pod in de `htpc` namespace: - **Dataopslag**: PersistentVolumeClaim `jackett-config` (10Gi, `local-path` op `/datadisk/infra/pv`), gemigreerd vanuit `/home/bart/.config/Jackett` via init-container (inclusief alle indexers en `ServerConfig.json`). - **Mediaopslag**: HostPath `/datadisk` gemount op `/datadisk`. - **Netwerk & Ingress**: Luistert op poort `9117` (ClusterIP + HostPort `9117`). De Apache reverse proxy routeert `https://thuus.bnhmeijer.nl/jackett/` naadloos door naar `127.0.0.1:9117`. - **Migratie & Opruimen**: ```bash # Migratie uitvoeren (maakt backup in /storage/backups/, stopt host service, start pod): ./migrate_jackett_to_cluster.sh # Oude host bestanden en service opruimen: ./cleanup_old_jackett.sh ``` ### Jellyfin De Jellyfin media server (`jellyfin`) draait als pod in de `htpc` namespace: - **Dataopslag**: PersistentVolumeClaim `jellyfin-config` (30Gi, `local-path` op `/datadisk/infra/pv`), gemigreerd vanuit `/etc/jellyfin` en `/var/lib/jellyfin` via init-container (inclusief alle databases, metadata en plugins). - **Mediaopslag**: HostPath `/datadisk` gemount op `/datadisk` en `/mnt/mp3` gemount op `/mnt/mp3` zodat alle bibliotheekpaden en symlinks exact behouden blijven. - **Hardware Transcoding**: Directe hardware-acceleratie via VA-API met AMD Phoenix2 iGPU (`/dev/dri` hostPath gemount in container met `privileged: true`). - **Netwerk & Ingress**: Luistert op poort `8096` (ClusterIP + HostPort `8096`). De Apache reverse proxy routeert `https://thuus.bnhmeijer.nl/jellyfin` en `wss://.../jellyfin/socket` naadloos door naar `127.0.0.1:8096`. - **Migratie, Terugrol & Opruimen**: ```bash # Migratie uitvoeren (maakt backup in /storage/backups/, stopt host service, synct data, start pod): ./migrate_jellyfin_to_cluster.sh # Terugrollen naar standalone host service indien gewenst: ./rollback_jellyfin_migration.sh # Oude host bestanden en service opruimen: ./cleanup_old_jellyfin.sh ```