migration: cutover complete — DNS switch verified, baseline recaptured against the new box, server.inference.coop resolved; all-clear email drafted
This commit is contained in:
1 parent
70c1208047
commit
5de16b6537
3 files changed
+92
-8
No files matched your search
@@ -233,6 +233,31 @@ this repo recording *where* the break-glass copies are held — never the secret
|
||||
> data is being changed or removed — this is a move, not a rebuild. If anything still looks wrong
|
||||
> afterwards, reply here and we will sort it out.
|
||||
|
||||
## The all-clear email — drafted 2026-11-02, ready to paste into Listmonk
|
||||
|
||||
Sent from the usual identity (`Inference Cooperative <info@inference.coop>`). Send after DNS
|
||||
propagation completes (~08:00 UTC on switch day) so links in the email resolve for everyone.
|
||||
|
||||
> Hi all,
|
||||
>
|
||||
> Last night we promised to write as soon as the move was complete and everything checked out. This
|
||||
> is that email.
|
||||
>
|
||||
> The co-op's services now run entirely on our own infrastructure, hosted by Infomaniak in
|
||||
> Switzerland — the renewable energy, Swiss privacy, worker-owned, foundation-governed setup we
|
||||
> described when we warned you about downtime. Chat, the member portal, the dashboard, code hosting,
|
||||
> the vault, cloud storage and this newsletter all came back whole from the final backup, and we
|
||||
> verified them one by one before switching over the domain.
|
||||
>
|
||||
> We're sorry for the outage. A server move is a rare event for a small co-op — we don't expect
|
||||
> another one anytime soon — and the payoff is infrastructure that belongs to us, on our terms.
|
||||
>
|
||||
> If anything looks off in the next few days, reply here and we'll sort it out.
|
||||
>
|
||||
> We hope you enjoyed the AI-free Sunday night. Everything is back where you left it.
|
||||
>
|
||||
> — Inference Cooperative
|
||||
|
||||
## 4. Cutover, in order
|
||||
|
||||
1. **Freeze writes.** Pause the portal's `membership_sweep` and `rag_refresh`, hold
|
||||
@@ -403,3 +428,60 @@ box — so it stays up throughout. Its **primary model route goes through the ga
|
||||
(`gateway.inference.coop` → `179.199.135.72`) and will fail during the move; its **fallback is GreenPT
|
||||
direct** (`api.greenpt.ai`, `glm-5.3-flash`, `GREENPT_FALLBACK_API_KEY`), verified working 2026-11-02.
|
||||
Tooling that talks to `git.`, `gateway.` or `portal.inference.coop` will be unavailable mid-move.
|
||||
|
||||
---
|
||||
|
||||
# RESTORE COMPLETE — 2026-11-02 ~06:30 UTC
|
||||
|
||||
All 16 apps restored on the new box (179.237.86.116) via per-app restore from the final backup
|
||||
`box_v10.1.6_b4fd6c91` (03:57 UTC). Data verified per app, not per state flag:
|
||||
|
||||
- matrix 35 rooms / 28 users, original signing key `ed25519:a_jSIu` — identity preserved
|
||||
- portal members 91 / api_keys 74 / ledger 24; newsletter 91 subscribers, 8 campaigns
|
||||
- forum 89 users / 18 discussions / 348 comments; gitea `code` org 5/5 public repos
|
||||
- dashboard carries the post-baseline deploy (image 20261102-b352b1f, CREDIT_PACK_URL) — the
|
||||
baseline is stale here, not the restore
|
||||
|
||||
What the restore survived, in order: root disk too small (data moved to /mnt/data), docker store
|
||||
wiped to fix overlay2 (images re-pulled, `cloudron` network recreated, firewall refreshed by
|
||||
reboot), `cloudron-syslog` restart after the platformdata move, and `127.0.0.1
|
||||
registry.inference.coop` in the new box's /etc/hosts so custom images don't reach the dead box.
|
||||
|
||||
**Two lessons for next time, now in skill `cloudron-ops`:** (1) check which filesystem Cloudron
|
||||
actually uses, not the advertised disk size — nothing in the installer flags an unused 245 GB
|
||||
volume; (2) `repair` recreates containers but never restores data — the data path is per-app
|
||||
restore from the box backup entry. Never batch-parallel restores.
|
||||
|
||||
**Still open at time of writing:** DNS on the old box (apex, wildcard A/AAAA, `www` → 179.237.86.116
|
||||
/ 2001:1600:18:206::89; `server.inference.coop` untouched); TTLs still 3600; agent host has a
|
||||
temporary `/etc/hosts` override `my.inference.coop → 179.237.86.116` that MUST be removed after the
|
||||
DNS switch or verify-restore.py reports fiction; old box powered on, apps stopped, backup schedule
|
||||
disabled; first new-box backup expected 23:00 UTC — verify it is `normal` and expected size.
|
||||
|
||||
---
|
||||
|
||||
# CUTOVER COMPLETE — 2026-11-02 07:45 UTC
|
||||
|
||||
DNS switched ~06:30 UTC (apex + wildcard A/AAAA + www → 179.237.86.116 / 2001:1600:18:206::89;
|
||||
all TXT/MX untouched; no AAAA added for www — it has none). `server.inference.coop` (the one
|
||||
unidentified record) was also repointed to the new box — answered authoritatively 07:53 UTC — so the
|
||||
old box has **no remaining DNS references**. Agent-host override removed 06:44. Final verify-restore.py: **66 pass / 7 warn / 1 FAIL** — the single FAIL is
|
||||
the dashboard's stale baseline (post-baseline deploy, expected). Key sync (chat↔portal) healed 07:12
|
||||
after the new box's resolver cache expired; git push done via
|
||||
`git -c http.curloptResolve=git.inference.coop:443:179.237.86.116 push` (bypasses stale resolver —
|
||||
keep this trick). Baseline recaptured against the new box at 07:53 UTC (original in git history);
|
||||
verify-restore.py then reports **67 pass / 7 warn / 0 FAIL**.
|
||||
|
||||
**Mail required one more step:** after the docker-store wipe, the platform mail container is NOT
|
||||
recreated at boot, and every mail API route (and even the mail-domain list) dies on
|
||||
"Unable to find container mail" — the container lookup happens before any reconfigure. Fix:
|
||||
`cloudron-support --check-services` then `--recreate-containers` (sanctioned, no data loss); mail
|
||||
ports 465/587/993/995 reopened immediately; port 25 is untestable from the agent host (outbound 25
|
||||
blocked — the runbook's known blind spot). Member mailbox CONTENTS still need a real IMAP login to
|
||||
confirm (the runbook's long-standing unknown). All-clear email drafted as Listmonk campaign 18
|
||||
("All-clear after the move (draft)", Members list, status draft). chat-legacy (Open WebUI): member
|
||||
access removed 2026-11-02 — retirement begun; app restored and safe in backups.
|
||||
|
||||
**Outstanding:** tonight 23:00 UTC first backup (verify `normal`, ~4.9 GiB); Cloudron subscription
|
||||
page check on the new dashboard; my primary model route re-heals on its own (fallback worked all
|
||||
night); old box keep powered-on/apps-stopped/backups-disabled for a few days, then decommission.
|
||||
Reference in new issue
Block a user