mirror of
https://github.com/RWejlgaard/pez-infra.git
synced 2026-05-06 04:14:43 +00:00
Add the full media automation stack (sonarr, radarr, prowlarr, lidarr, readarr, whisparr), media servers (jellyfin, plex), and supporting services (transmission, samba, ollama, promtail, cloudflared, vsftpd) to the repo as a media_stack Ansible role. Includes: - Custom systemd unit files for non-package-managed services - Config files for promtail, samba, transmission, vsftpd - Cron jobs for movie-rename-fix, sonarr/radarr midnight restarts - Updated deploy.yml to wire the role into london-b's stage - Updated london-b docs with full service inventory Backup script (backup.sh) already covered by the existing backup role. Node/systemd exporters already covered by existing monitoring roles. Closes PESO-92
117 lines
3.5 KiB
Markdown
117 lines
3.5 KiB
Markdown
# london-b
|
||
|
||
Primary storage and media server. The workhorse of the fleet.
|
||
|
||
## Overview
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Location** | London (NW9) |
|
||
| **OS** | Ubuntu 24.04 |
|
||
| **Tailscale IP** | 100.84.65.101 |
|
||
| **Role** | Storage, media serving, Docker services |
|
||
|
||
## Hardware
|
||
|
||
| Component | Spec |
|
||
|---|---|
|
||
| CPU | AMD Threadripper 3970X (64 threads) |
|
||
| Memory | 64 GB |
|
||
| GPU | Nvidia GTX 980 |
|
||
| Boot disk | 500 GB |
|
||
| Storage pool | ~64 TB (ZFS) |
|
||
|
||
This machine is ridiculously overpowered as a media server. It's my old gaming/workstation PC repurposed into server duty. The GPU helps with Plex transcoding but the CPU can handle it fine on its own.
|
||
|
||
## Storage
|
||
|
||
ZFS pool `hdd`: 3× RAIDZ1 vdevs, 8 drives total.
|
||
|
||
| Metric | Value |
|
||
|---|---|
|
||
| Used | 46 TB |
|
||
| Free | 18 TB |
|
||
| Total | ~64 TB |
|
||
| Usage | 72% |
|
||
| Scrub | Weekly (Sundays) |
|
||
|
||
RAIDZ1 tolerates one drive failure per vdev. With this many drives and this much data, ZFS checksumming is essential — silent data corruption on spinning disks is real and you don't want to find out about it years later.
|
||
|
||
## Services
|
||
|
||
### Media Servers
|
||
|
||
| Service | Port | URL |
|
||
|---------|------|-----|
|
||
| Plex | 32400 | plex.pez.sh |
|
||
| Jellyfin | 8096 | jellyfin.pez.sh |
|
||
| Navidrome | 4533 | music.pez.sh |
|
||
|
||
### Media Automation
|
||
|
||
| Service | Port | URL |
|
||
|---------|------|-----|
|
||
| Radarr | 7878 | radarr.pez.sh |
|
||
| Sonarr | 8989 | sonarr.pez.sh |
|
||
| Lidarr | 8686 | lidarr.pez.sh |
|
||
| Readarr | 8787 | readarr.pez.sh |
|
||
| Prowlarr | 9696 | prowlarr.pez.sh |
|
||
| Transmission | 9091 | download.pez.sh |
|
||
| Jellyseerr | 5055 | request.pez.sh |
|
||
|
||
### Other
|
||
|
||
| Service | Port | URL |
|
||
|---------|------|-----|
|
||
| Nextcloud AIO | 11000 | cloud.pez.sh |
|
||
| slskd (Soulseek) | 5030 | soulseek.pez.sh |
|
||
| smartctl_exporter | 9633 | (Prometheus scrape) |
|
||
| prom-plex-exporter | — | (Prometheus scrape) |
|
||
|
||
### Systemd Services (non-Docker)
|
||
|
||
The media automation suite and several supporting services run as native systemd units, not in Docker:
|
||
|
||
| Service | Unit Name | Notes |
|
||
|---------|-----------|-------|
|
||
| Sonarr | sonarr | Package-managed (mono) |
|
||
| Radarr | radarr | /opt/Radarr, custom unit |
|
||
| Prowlarr | prowlarr | /opt/Prowlarr, custom unit |
|
||
| Lidarr | lidarr | /opt/Lidarr, custom unit |
|
||
| Readarr | readarr | /opt/Readarr, custom unit |
|
||
| Whisparr | whisparr | /opt/Whisparr, custom unit (disabled) |
|
||
| Plex | plexmediaserver | Package-managed |
|
||
| Jellyfin | jellyfin | Package-managed |
|
||
| Transmission | transmission-daemon | Package-managed |
|
||
| Samba | smbd | Package-managed |
|
||
| Ollama | ollama | /usr/local/bin, custom unit |
|
||
| Promtail | promtail | Custom unit, ships logs to Loki |
|
||
| Cloudflared | cloudflared | Tunnel to Cloudflare |
|
||
| vsftpd | vsftpd | FTP server for /hdd/ftp |
|
||
| systemd_exporter | systemd_exporter | Ansible-managed |
|
||
| node_exporter | node_exporter | Ansible-managed |
|
||
|
||
Docker services: Nextcloud AIO, Jellyseerr, Navidrome, slskd, Miniflux, smartctl-exporter, plex-exporter.
|
||
|
||
### Cron Jobs
|
||
|
||
| Schedule | Job |
|
||
|----------|-----|
|
||
| Every hour | `/root/scripts/movie-rename-fix.fish` |
|
||
| Midnight daily | `systemctl restart radarr` |
|
||
| Midnight daily | `systemctl restart sonarr` |
|
||
| 22:00 daily | `/root/scripts/backup.sh` (rclone to B2) |
|
||
|
||
### Samba Shares
|
||
|
||
| Share | Path | Access |
|
||
|-------|------|--------|
|
||
| HDD | /hdd | pez, root (rw) |
|
||
| Movies | /hdd/movies | public (ro) |
|
||
| TV Shows | /hdd/tv | public (ro) |
|
||
|
||
Media is served directly from the ZFS pool.
|
||
|
||
## Networking
|
||
|
||
Connected via Cat 5 to the Ubiquiti switch in the utility closet. 1 Gbit LAN connection.
|