--- name: deploy-arr-summary description: Use when deploying Arr Summary (Media Centre), restarting the arr-summary container on Unraid, confirming a deploy landed, or troubleshooting the Nginx Proxy Manager reverse proxy / TLS certs for hippofam.com. Covers the Forgejo push-to-deploy pipeline, manual container restarts, and the DNS-01/Cox port-80 constraints. --- ## Deployment **Target:** Unraid server, container path `/mnt/user/appdata/greendale` (note the directory name differs from the container/repo name), built from `Dockerfile`/`docker-compose.yml` in this repo. Container name `arr-summary`, port `5055` (overridable via `HOST_PORT`) → container port `5000`. **Deploy mechanism: Forgejo push-to-deploy**, same pattern as the other three projects on this box — see `card-grader`'s `CLAUDE.md` for the full pipeline mechanics. Push to `main` on the `forgejo` remote (`https://git.hippofam.com/ninja_hippo/arr-summary.git`) triggers `.forgejo/workflows/deploy.yml`, which syncs into `/mnt/user/appdata/greendale` (excluding `.git`, `.env`, `data/`) and runs `docker compose up -d --build`. **Restarting the container manually: use Compose, not the Unraid Docker UI.** Every deploy recreates the container with a new Docker ID (same name, `arr-summary`). Unraid's Docker tab caches the old ID, so hitting Restart there after a deploy throws "No such container" — harmless, but confusing. From the Unraid terminal: ```bash cd /mnt/user/appdata/greendale && docker compose restart ``` `docker compose up -d --force-recreate` for a guaranteed-clean recreate; `docker ps --filter name=arr-summary` to check real state regardless of what the Unraid UI shows. **Confirming a deploy actually landed:** the dashboard footer renders `v · ` from constants near the top of `app.py` (both env-overridable, injected into every template by the `inject_version` context processor). Bump them when cutting a deploy — loading the page is then the quickest honest check that the new build is live, without trusting the Unraid Docker tab's cached container IDs. ## Reverse proxy (Nginx Proxy Manager) Two NPM proxy hosts front this app and `git.hippofam.com`, both using Let's Encrypt certs issued via **DNS-01 through Porkbun** — required, not optional: **Cox blocks inbound port 80** on this connection, so HTTP-01 challenges (and plain `http://` requests generally) can never work here. `http://hippofam.com` will always time out from outside the LAN; only `https://` resolves. Both proxy hosts have Force SSL on. `hippofam.com` → `http://192.168.86.33:5055` (the Unraid box, this container's port). Verify the destination IP/port here before assuming an outage is DNS or app-level — it has drifted to the wrong host before. On 2026-08-26 the apex host's own cert (issued Aug 2025) went dark: NPM's UI still showed it "In Use" with a valid, unexpired date, but nginx presented no certificate at all for `hippofam.com` (TLS alert 112, "unrecognized name") — the on-disk cert files had rotted independently of the DB record NPM's UI reads from. `git.hippofam.com`, on a newer cert from the same account, was unaffected. Fixed by pointing the proxy host at the `*.hippofam.com` + `hippofam.com` wildcard cert already issued and sitting unused, which forced NPM to regenerate the nginx config with known-good cert files. If `hippofam.com` ever throws a TLS handshake error again with NPM's UI reporting all green, suspect this same on-disk/DB drift before anything else — check with: ```bash openssl s_client -connect :443 -servername hippofam.com