carlos / platform Public

infra: tito operator queue + cutover checklist

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Paul Campbell 2ed6993c311b277028b02431bec570bf84d49b5a parent 6d5f117
1 file changed, +37 −0
  • infra/tito/README.md +37 −0
diff --git a/infra/tito/README.md b/infra/tito/README.md
new file mode 100644
index 000000000..467d290a6
--- /dev/null
+++ b/infra/tito/README.md
@@ -0,0 +1,37 @@
+# 🤖 Tito deployment — operator notes
+
+> 🤖 Written by an LLM (Claude), per factor X.
+
+AWS account **665106592142** (Tito's own; self-hosted deployment), profile
+`titogo`, eu-west-1 (IE) first. State: `s3://carlos-tfstate-665106592142/tito/`.
+
+## Operator queue
+
+1. **Apply the stack** (21 resources, plan reviewed — buckets, IE box,
+ svc/pdf Gotenberg, `ie.go.tito.io` alias; does NOT touch `go.tito.io`
+ or the wildcard):
+
+ ```
+ cd infra/tito && tofu apply plan.out
+ ```
+
+ (Re-plan first if stale. Everything is `carlos-tito-*` named; the
+ litestream bucket and Hetzner DNS are untouched.)
+
+2. **Set svc/pdf basic-auth** via SSM session: write a
+ `user bcrypt-hash` line to `/etc/caddy/pdf-basicauth` on the svc-pdf
+ box and `systemctl restart caddy`.
+
+## Hetzner cutover go/no-go checklist (Plan C task C4)
+
+- [ ] titogo canary green at `https://platform.ie.go.tito.io`
+ (full canary checklist: magic-link sign-in, seeded event, checkout)
+- [ ] Fleet restore rehearsed from `titogo-litestream-…/hetzner/`;
+ duration recorded (= freeze window)
+- [ ] `carlos ops restore-verify` green against `carlos-tito-ie-…/titogo/`
+- [ ] Rollback rehearsed: Route53 `go.tito.io` + `*.go.tito.io` back to
+ 62.238.45.61 + restart Hetzner units
+
+Cutover: stop `titogo-router` + `titogo@*` on Hetzner → final litestream
+delta restore on IE → start under carlos → smoke via `--resolve` → flip
+Route53 A records (TTL 60) → watch. Hetzner box frozen 30 days.