Files
network/plex.md
T
dohertj2 14cc4faa28 Delete the Plex VM disks
Completes section 9 step 3. govc vm.destroy Plex removed the inventory
entry and the [NVME_1] Plex/ folder; datastore free space went
1,619.8 -> 1,756.1 GB (+136.3 GB). 10.100.0.24 / 10.50.0.31 and MACs
00:0c:29:4a:ef:3d / 00:0c:29:4a:ef:47 are now free for reuse.

Done on 2026-09-17 rather than the planned ~2026-10-15. Checking the
plan's own Veeam precondition inverted its assumption: the Backup VMs
job has EnableDeletedVmDataRetention set to False with Simple retention
of 7 restore points, so a VM removed from the job has its points pruned
as the remaining VMs roll the chain - Plex's are due to age out around
2026-09-24, about three weeks before the disks were scheduled for
deletion. Deleting while a good restore point still existed (2026-09-17
03:01, consistent) was safer than deleting later with none.

Recovery position is now: Veeam image restore until ~2026-09-24, then
only the pre-migration library DB at
/mnt/share/backups/plex-migration-2026-09-16/, which rebuilds a Plex
install but not the VM.

veeam.md gains the retention gotcha, since it applies to any future
decommission and the 30-day DeletedVmsDataRetentionPeriodDays value is
misleading while the toggle is off.

Also flags in esxi.md that its VM tables are incomplete: the host has 10
VMs, WW_DEV_VM / Rockwell_Win10 / TCBSD are absent, and DevVM is powered
off rather than on. Left the tables themselves alone as out of scope.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 12:12:20 -04:00

61 lines
3.8 KiB
Markdown

# Plex Media Server
> **Migrated to Docker 2026-09-16; old VM deleted 2026-09-17.** Plex ran on a dedicated Debian 11 VM at 10.100.0.24 until that OS reached LTS EOL (2026-08-31). It now runs as a container on the [Docker host](docker.md).
>
> The old VM has been **destroyed** — `govc vm.destroy Plex` removed the inventory entry and the `[NVME_1] Plex/` folder, reclaiming 136 GB. There is no VM to roll back to. The surviving artifacts are the Veeam restore points in the `Backup VMs` chain (newest 2026-09-17 03:01, **expiring ~2026-09-24** — the job has `EnableDeletedVmDataRetention: False`) and the pre-migration library DB at `/mnt/share/backups/plex-migration-2026-09-16/`. After that date, recovery means a fresh Plex install restored from that DB, not a VM restore. Full procedure: [plex-docker-migration.md](plex-docker-migration.md).
## Access
- **Host**: DOCKER (10.100.0.35), container `plex`
- **Web UI (LAN)**: http://10.100.0.35:32400/web
- **Remote access**: WAN TCP 32400 port-forwarded on UDM Pro → **10.100.0.35**:32400 (rule `PLEX`, id `67ebfaef41b7da3e559ab08d`). Public IP 208.161.27.232. Also reachable at https://plex.dohertylan.com (Traefik + Authelia SSO), but Plex does not advertise that URL (`customConnections` unset), so clients use the `:32400` path.
- **Shell**: `docker exec -it plex bash` (no separate SSH host any more)
## Container
- **Image**: `lscr.io/linuxserver/plex:latest` (running `1.43.4.10903-e5521bd8c-ls324`)
- **Compose**: `/opt/plex/docker-compose.yml`, rendered by the `plex` Ansible role
- **Networking**: `network_mode: host` — needed for GDM discovery (32410-32414/udp) and real client source IPs, so LAN clients are not misclassified as remote
- **PUID/PGID**: 1000/1000
- **`VERSION=docker`**: pins Plex to the image tag and disables the in-container self-updater
### Volumes
| Host | Container | Notes |
|---|---|---|
| `/opt/plex/config` | `/config` | 32 GB library (metadata, thumbnails, DBs) |
| `/opt/plex/transcode` | `/transcode` | Local-disk scratch, never NFS |
| `/mnt/share/Media/Movies` | `/mnt/nfs/Movies` | Legacy path — matches the library DB |
| `/mnt/share/Media/TV` | `/mnt/nfs/TV` | ″ |
| `/mnt/share/Media/Anime` | `/mnt/nfs/Anime` | ″ |
> **Why the `/mnt/nfs/*` container paths look odd:** the Plex library DB stores 32,262 absolute media paths from the old VM. Mounting the media at those exact paths inside the container meant the migration touched zero DB rows and could not trigger a library rematch. Do not "tidy" these to `/data/*` without rewriting `section_locations`, `media_parts` **and** `media_streams`.
## Identity
- **MachineIdentifier**: `7aa65063599874eac3d9a2f62df74c1816400c88` (preserved across the migration — Tautulli, seerr and all clients kept working)
- **No Plex Pass** (`PlexOnlineHome="0"`) — software transcoding only; there is no usable hardware encoder on this host (VMware SVGA / `vmwgfx`)
## Libraries
| ID | Name | Root path | Items (2026-09-16) |
|---|---|---|---|
| 1 | Movies | `/mnt/nfs/Movies` | 1,959 |
| 2 | TV Shows | `/mnt/nfs/TV` | 421 |
| 4 | Anime | `/mnt/nfs/Anime` | 146 |
## Updates
Managed by Ansible, not by Plex. `ansible-playbook update.yml -e only=plex` pulls the latest image and recreates the container; the full `update.yml` pass includes it. The in-container updater is disabled via `VERSION=docker`.
## Integrations pointing at this server
| Service | Where configured |
|---|---|
| Sonarr / Radarr | "Plex Media Server" connection (id 2), `updateLibrary: true` — stored in `sonarr.db`/`radarr.db`, **not** templated by Ansible |
| Tautulli | `/opt/tautulli/config.ini` (`pms_ip`, `pms_url`) |
| seerr | `/opt/seerr/settings.json` (`plex.ip`) |
| Uptime Kuma | monitor id 17 in `/opt/uptime_kuma/data/kuma.db` |
| Homepage | `/opt/homepage/config/services.yaml` |
| Traefik | `/opt/traefik/traefik/rules/external-services.yml` (file provider) |