mirror of
https://github.com/RWejlgaard/pez-infra.git
synced 2026-07-04 15:46:16 +00:00
127 lines
4.1 KiB
Markdown
127 lines
4.1 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 | ~87 TB raw / ~64 TB usable (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, 4 drives each (12 drives total).
|
||
|
||
| Metric | Value |
|
||
|---|---|
|
||
| Used | ~61 TB |
|
||
| Free | ~26 TB |
|
||
| Total | ~87 TB raw |
|
||
| Usage | ~70% |
|
||
| Scrub | Weekly (Sundays at 12:00, cron `/sbin/zpool scrub hdd`) |
|
||
|
||
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.
|
||
|
||
**Roadmap:** the long-term plan is to gradually replace the 8 TB drives with 24 TB drives and grow the pool toward 24 drives / ~0.5 PB raw.
|
||
|
||
## 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 |
|
||
| Overseerr (snap) | 5056 | jellyfin-requests.pez.sh |
|
||
|
||
### Other
|
||
|
||
| Service | Port | URL |
|
||
|---------|------|-----|
|
||
| Nextcloud AIO | 11000 | cloud.pez.sh (internal) |
|
||
| Miniflux | 8181 | rss.pez.sh |
|
||
| slskd (Soulseek) | 5030 | soulseek.pez.sh |
|
||
| Syncthing (`syncthing@pez`) | 8384 | (LAN / Tailscale) |
|
||
| Ollama | 11434 | (Tailscale) |
|
||
| smartctl_exporter | 9633 | (Alloy scrape) |
|
||
| prom-plex-exporter | 9594 | (Alloy 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 |
|
||
| Syncthing | syncthing@pez | Package-managed, user instance |
|
||
| vsftpd | vsftpd | FTP server for /hdd/ftp |
|
||
| systemd_exporter | systemd_exporter | Ansible-managed |
|
||
| node_exporter | prometheus-node-exporter | apt-managed |
|
||
| Alloy | alloy | Grafana Alloy, fleet-managed config |
|
||
|
||
Docker services: Nextcloud AIO, Jellyseerr, Navidrome, slskd, Miniflux (with postgres sidecar), smartctl-exporter, plex-exporter.
|
||
|
||
Snap: Overseerr (`latest/beta` channel).
|
||
|
||
### 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 Backblaze B2) |
|
||
| Sundays 12:00 | `/sbin/zpool scrub hdd` |
|
||
|
||
### Samba Shares
|
||
|
||
| Share | Path | Access |
|
||
|-------|------|--------|
|
||
| HDD | /hdd | pez, root (rw) |
|
||
| Movies | /hdd/movies | public (ro) |
|
||
| TV Shows | /hdd/tv | public (ro) |
|
||
| pve | /hdd/pve | london-a Proxmox (rw) — ISO/template/backup storage |
|
||
|
||
Media is served directly from the ZFS pool. Docker root (`/hdd/docker`) and PVE storage (`/hdd/pve`) live on the pool too.
|
||
|
||
## Networking
|
||
|
||
Connected via Cat 5 to the Ubiquiti switch in the utility closet. 1 Gbit LAN connection.
|