Infrastructure configuration for my personal home media server.
The stack is deployed with Docker Compose and provisioned via Ansible. See ansible/README.md for setup instructions.
| Service | Purpose |
|---|---|
| Jellyfin | Media server |
| Radarr | Movie collection manager |
| Sonarr | TV series collection manager |
| Prowlarr | Indexer manager |
| Seerr | Media request management |
| SABnzbd | Usenet downloader |
| qBittorrent | Torrent downloader |
| Gluetun | VPN client (WireGuard) |
| Pi-hole | DNS and DHCP server |
| nginx-proxy-manager | Reverse proxy |
| Homepage | Dashboard |
| Glance | Self-hosted start page |
| FreshRSS | Self-hosted RSS Reader |
| RomM | Self-hosted ROM Manager |
| Kiwix | Offline ZIM archive server (Wikipedia, etc.) |
| Tailscale | WireGuard-based VPN for remote LAN access |
| Navidrome | Subsonic-compatible music streaming server |
| Service | Purpose | Notes |
|---|---|---|
| Tdarr / Fileflows / Unmanic | Automated media transcoding — add AAC audio tracks | Evaluate which fits workflow best |
| Restic + Restic REST Server | Automated backups | Back up Jellyfin db, *arr databases, config dirs |
- UPS — protect the media server and router from power loss; prevents database corruption on unclean shutdown
- Secondary Pi-hole — run a second Pi-hole instance on another device (e.g. a Raspberry Pi) and configure it as the backup DNS server in Pi-hole's DHCP settings; prevents full network DNS outage if the media server goes down