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
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) |
| Radio Chicken & Icecast | 5000 / 8000 |
Gepersonaliseerd radiostation, Icecast audio/video streams, live web-UI en clip downloader |
🏛️ 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
htpcnamespace.
🚀 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:
# 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-pathop/datadisk/infra/pv). - Mediaopslag: HostPath
/datadiskgemount op/datadisk(voor films in/datadisk/htpc/Filmsen downloads in/datadisk/upload). - Netwerk & Ingress: Luistert op poort
7878(zowel via ClusterIP als HostPort7878op10.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-pathop/datadisk/infra/pv), gemigreerd vanuit/var/www/.config/transmission-daemonmet behoud van alle torrents, resume-bestanden en instellingen. - Mediaopslag: HostPath
/datadisken/mnt/mp3zodat/datadisk/upload/finisheden/datadisk/upload/incompleteidentiek zijn voor Transmission, Radarr, Sonarr en Lidarr. - Netwerk: Web UI / RPC op poort
9091(ClusterIP + HostPort9091) en BitTorrent peer-poort53662(TCP & UDP, ClusterIP + HostPort53662).
slskd
De Soulseek daemon (slskd) draait als pod in de htpc namespace:
- Dataopslag: PersistentVolumeClaim
slskd-config(10Gi,local-pathop/datadisk/infra/pv), gemigreerd vanuit/var/www/.local/share/slskdvia een init-container (inclusiefslskd.yml, SQLite databases en state). - Mediaopslag: HostPath
/datadiskgemount op/datadisk(voor/datadisk/upload/slskd,/datadisk/upload/incompleteen/datadisk/htpc/mp3) en/mnt/mp3gemount op/mnt/mp3. - Netwerk: Web UI op poort
5030(ClusterIP + HostPort5030), optioneel HTTPS op poort5031en Soulseek listen poort50300(ClusterIP + HostPort50300). - Migratie & Opruimen:
# 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-pathop/datadisk/infra/pv), gemigreerd vanuit/home/bart/.config/Jackettvia init-container (inclusief alle indexers enServerConfig.json). - Mediaopslag: HostPath
/datadiskgemount op/datadisk. - Netwerk & Ingress: Luistert op poort
9117(ClusterIP + HostPort9117). De Apache reverse proxy routeerthttps://thuus.bnhmeijer.nl/jackett/naadloos door naar127.0.0.1:9117. - Migratie & Opruimen:
# 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-pathop/datadisk/infra/pv), gemigreerd vanuit/etc/jellyfinen/var/lib/jellyfinvia init-container (inclusief alle databases, metadata en plugins). - Mediaopslag: HostPath
/datadiskgemount op/datadisken/mnt/mp3gemount op/mnt/mp3zodat alle bibliotheekpaden en symlinks exact behouden blijven. - Hardware Transcoding: Directe hardware-acceleratie via VA-API met AMD Phoenix2 iGPU (
/dev/drihostPath gemount in container metprivileged: true). - Netwerk & Ingress: Luistert op poort
8096(ClusterIP + HostPort8096). De Apache reverse proxy routeerthttps://thuus.bnhmeijer.nl/jellyfinenwss://.../jellyfin/socketnaadloos door naar127.0.0.1:8096. - Migratie, Terugrol & Opruimen:
# 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
Radio Chicken & Icecast
Het Radio Chicken streamingplatform en Icecast server draaien als multi-container pod (radio-chicken) in de htpc namespace:
- Containers in pod:
icecast(moul/icecast:latest): Luistert op poort8000(ClusterIP + HostPort8000) voor audio (/chicken) en live webm video (/chicken_video.webm).radio-chicken(git.bnhmeijer.nl/bart/radio-chicken:latest): Flask web-UI, stemsynthese, live ffmpeg hardware transcoding en streaming naar Icecast op poort5000(ClusterIP + HostPort5000).autoplacer(git.bnhmeijer.nl/bart/radio-chicken-autoplacer:latest): Achtergrond-worker die nummers in Jellyfin analyseert en in playlists plaatst.mv-downloader(git.bnhmeijer.nl/bart/radio-chicken-mv-downloader:latest): Achtergrond-worker die ontbrekende videoclips van favoriete nummers automatisch downloadt via YouTube naar/music_videos.
- Dataopslag: PersistentVolumeClaim
radio-chicken-data(10Gi,local-pathop/datadisk/infra/pv), gemigreerd vanuit/home/bart/jellyfinradio/dataenwebrootvia init-container. - Mediaopslag: HostPath
/datadisk/htpc/music_videogemount op/music_videos. - Hardware Transcoding: Directe hardware-acceleratie via VA-API met AMD Phoenix2 iGPU (
/dev/drihostPath gemount metprivileged: true). - Netwerk & Ingress: Luistert op poort
5000en8000. De Apache reverse proxy routeert/radio/live,/radio/voteen/radio/direct door naar127.0.0.1:5000en127.0.0.1:8000. - Migratie, Terugrol & Opruimen:
# Migratie uitvoeren (maakt backup, sync video's, stopt host containers, start pod): ./migrate_radio_chicken_to_cluster.sh # Terugrollen naar standalone host containers indien gewenst: ./rollback_radio_chicken_migration.sh # Oude host containers opruimen: ./cleanup_old_radio_chicken.sh