migration plan: state of play, for whoever runs the cutover
Written for a fresh session with none of the session history, because the person starting the migration asked whether the CLI had this context. It does not: memory and skills carry over, and the reasoning does not. This records what changed on 2026-11-01/02 that is not obvious from the rest of the plan: inbound 25 confirmed open so outbound 25 needs no ticket; Scaleway TEM proven by real headers (spf, dkim under the UUID selector, dmarc pass at p=reject); and the trap that Listmonk still sends through the Cloudron mail app, so a newsletter must not be assumed to route through the relay. Plus the DNS wildcard shape, the credential confirmations, what remains undone, the duplicate-Synapse caution, and the steward's own fallback route.
This commit is contained in:
1 parent
267db1fddd
commit
70c1208047
1 file changed
+64
@@ -339,3 +339,67 @@ by pre-cutover DNS plus port 25 — the point is that no *unexplained* failure a
|
|||||||
and writing it into this runbook as "the TTL" was wrong — the configured TTL was 3600 s
|
and writing it into this runbook as "the TTL" was wrong — the configured TTL was 3600 s
|
||||||
all along. Query the zone at the registrar (or trust a fresh authoritative answer) for
|
all along. Query the zone at the registrar (or trust a fresh authoritative answer) for
|
||||||
planning numbers.
|
planning numbers.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# STATE OF PLAY — 2026-11-02 (read this first)
|
||||||
|
|
||||||
|
Written for whoever picks this up next, including a fresh agent session with none of the history.
|
||||||
|
|
||||||
|
## Mail: receiving on the box, sending through a relay
|
||||||
|
|
||||||
|
- **Inbound port 25 is OPEN** (operator confirmed in the Infomaniak portal, 2026-11-01). 465/587/993/995
|
||||||
|
were opened too; 4190 is not offered and is not needed. **Outbound 25 is not required** — do not spend
|
||||||
|
a support ticket on it.
|
||||||
|
- **Scaleway Transactional Email is proven working.** A real message relayed through it produced:
|
||||||
|
`spf=pass`, `dkim=pass … header.s=ede94f37-204c-41ee-b388-e940520316d1` (the UUID selector in the DNS
|
||||||
|
sheet — 2048-bit), `dmarc=pass policy.published-domain-policy=reject`, and
|
||||||
|
`iprev=pass (phan-van4.scw-tem.cloud)`. SPF carries `include:_spf.tem.scaleway.com`.
|
||||||
|
- **BUT the newsletter does NOT use it yet.** Listmonk is still configured `host=mail, port=2465` — the
|
||||||
|
Cloudron mail app. It is in "copy settings from Cloudron" mode, so its own SMTP settings are overwritten
|
||||||
|
and the host keeps reverting (its `msg_retry_delay` does persist, which is a useful tell). **Do not
|
||||||
|
assume a newsletter sent through Scaleway; check the host before relying on it.**
|
||||||
|
- The **portal** also still sends through the Cloudron mail addon (`CLOUDRON_MAIL_*`). Moving it to the
|
||||||
|
relay needs its own SMTP env vars plus a code change, deliberately not done yet.
|
||||||
|
- **Consequence for the window:** the newsletter and the portal can only send **before** the box goes down
|
||||||
|
or **after** it comes back. Not during.
|
||||||
|
|
||||||
|
## DNS: 11 records, two of them wildcards
|
||||||
|
|
||||||
|
See `dns-change-sheet.md`, rebuilt 2026-11-01 from the registrar's panel. The important shape:
|
||||||
|
|
||||||
|
- Only **11 records exist**. `*.inference.coop` A and AAAA carry **every application hostname** — chat,
|
||||||
|
portal, panel, dashboard, newsletter, gateway, vault, git, registry, files, forum, email, docs, my,
|
||||||
|
status. They are NOT individual records. **Move the wildcards or every app stays behind.**
|
||||||
|
- `server.inference.coop` is an A record nothing documents. Identify before moving.
|
||||||
|
- TTL is 3600 everywhere; lower it before the window.
|
||||||
|
- **Never read a timeout from the agent host as "blocked"** (see the port-25 lesson in §7). The agent host
|
||||||
|
cannot observe outbound 25 at all.
|
||||||
|
|
||||||
|
## Credentials: all off-box, all confirmed
|
||||||
|
|
||||||
|
Cloudron backup passphrase, Infomaniak S3 `secretAccessKey`, and the Vault passwords are held externally
|
||||||
|
by the operator (confirmed 2026-11-01). A restore is unreadable without the first two.
|
||||||
|
|
||||||
|
## Not done yet
|
||||||
|
|
||||||
|
- Cloudron **setup wizard on the new box** — still unsubmitted.
|
||||||
|
- **No snapshot** on the new box (the tier includes one — free rollback point).
|
||||||
|
- **No restore rehearsal** has been attempted.
|
||||||
|
- `verify-restore.py` is fixed (both blind spots) and the baseline is fresh as of `267db1f`, committed to
|
||||||
|
this repo. Run it after any restore; its two remaining FAILs pre-cutover are the expected
|
||||||
|
"not migrated yet" signature.
|
||||||
|
|
||||||
|
## CAUTION: two Matrix identities
|
||||||
|
|
||||||
|
The backup contains Synapse **and its signing key**. Restore it and the new box becomes a second
|
||||||
|
homeserver claiming the same server name as the old one, signing with the same key. Federation peers see
|
||||||
|
one identity behaving as two. **Keep the restored apps stopped except while actively testing.**
|
||||||
|
|
||||||
|
## The agent running this
|
||||||
|
|
||||||
|
The steward bot runs on a **third machine** (`179.237.103.165`) — neither the old nor the new Cloudron
|
||||||
|
box — so it stays up throughout. Its **primary model route goes through the gateway on the old box**
|
||||||
|
(`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.
|
||||||
Reference in new issue
Block a user