blumeops/docs/how-to/operations
Erich Blume 14ca0160ba Migrate devpi from minikube to indri (launchd) (#341)
## Summary

Devpi was crash-looping under memory pressure on the minikube StatefulSet, breaking the Python toolchain across the repo (`mise run docs-mikado`, `prek`, every `uv pip install`). It moves to indri as a native LaunchAgent.

## What changed

- **New ansible role** `ansible/roles/devpi/`: installs `devpi-server` + `devpi-web` into a uv-managed venv, initializes the server-dir on first run via 1Password root password, runs as a LaunchAgent (`mcquack.eblume.devpi`) bound to `127.0.0.1:3141`. Bootstraps from upstream PyPI (so devpi can install itself on a fresh box).
- **Caddy**: `pypi.ops.eblu.me` now proxies to `http://localhost:3141`.
- **Playbook**: `indri.yml` gains pre_tasks for the root password and the new role.
- **service-versions.yaml**: devpi flipped from `type: argocd` to `type: ansible`.
- **ArgoCD**: removed `apps/devpi.yaml` and `manifests/devpi/`. The in-cluster Application, namespace, and PVC have been deleted.
- **Docs**: new how-to `docs/how-to/operations/devpi-on-indri.md`; `restart-indri.md` lists devpi in the LaunchAgent stop list.

## Already deployed (live on indri)

- Service running: `launchctl list mcquack.eblume.devpi` → PID 53888
- `curl https://pypi.ops.eblu.me/+api` returns 200 
- `mise run docs-mikado` works again 
- 1.0G of cached PyPI data was migrated from the PVC to `~erichblume/devpi/server-dir/`
- Minikube namespace and PVC fully reclaimed

## Test plan

- [ ] `mise run services-check` (after merge)
- [ ] CI workflows that use devpi succeed
- [ ] No regressions in tools that depend on `pypi.ops.eblu.me` (prek, uv-script tasks, dagger pipelines)

## Context

This is the C1 prelude to a planned C2 chain (`mikado/retire-minikube-indri`) to retire minikube on indri entirely. Doing devpi as a standalone C1 was the right call because (a) it was urgent — it was breaking the toolchain — and (b) it shakes out the migration recipe before we commit to a multi-leaf chain.

Reviewed-on: #341
2026-04-29 13:38:36 -07:00
..
connect-to-postgres.md Review gandi-operations doc and reorganize how-to guides (#200) 2026-02-17 07:29:33 -08:00
deploy-prowler.md Add Prowler IaC scanning of blumeops repo (Saturday 2am) 2026-03-24 16:49:38 -07:00
devpi-on-indri.md Migrate devpi from minikube to indri (launchd) (#341) 2026-04-29 13:38:36 -07:00
manage-flyio-proxy.md Update docs for Caddy routing and direct WireGuard peering 2026-04-18 09:57:30 -07:00
read-compliance-reports.md Add review-compliance-reports task and reorganize report storage 2026-04-06 10:16:46 -07:00
rebuild-minikube-cluster.md Migrate devpi from minikube to indri (launchd) (#341) 2026-04-29 13:38:36 -07:00
record-review-evidence.md Review single-user-cluster control and add evidence collection card 2026-04-01 22:01:57 -07:00
restart-indri.md Migrate devpi from minikube to indri (launchd) (#341) 2026-04-29 13:38:36 -07:00
restore-1password-backup.md Review restore-1password-backup doc: fix offsite TBD, clarify archive name, add BorgBase to backups 2026-03-15 10:13:07 -07:00
review-compensating-controls.md Review single-user-cluster control and add evidence collection card 2026-04-01 22:01:57 -07:00
run-1password-backup.md Review operations docs: add last-reviewed dates and improve troubleshooting 2026-03-16 07:38:02 -07:00
troubleshoot-sifaka-nfs.md Document sifaka NFS/Tailscale TUN troubleshooting 2026-03-28 09:12:00 -07:00
troubleshooting.md C0: docs — default argocd login to --sso; drop extraneous --grpc-web 2026-04-21 10:43:21 -07:00