docs: wildcard DNS — new instances skip the per-subdomain DNS step
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 file changed,
+12
−3
CLAUDE.md+12 −3
diff --git a/CLAUDE.md b/CLAUDE.md| index ef913df..d4ca391 100644 |
| --- a/CLAUDE.md |
| +++ b/CLAUDE.md |
| @@ -95,11 +95,20 @@ Add tests as you go. Go handler tests use `newTestServer(t)` which returns |
| ## Deploy |
| -Hosted on a Hetzner box via **Miren**, cluster `luanchat`. Five fully-isolated |
| -instances (each its own app, disk, admin token, subdomain): `lchat` |
| -(group.luan.chat), `test`, `paja`, `paulandciara`, `miren`. |
| +Hosted on a Hetzner box via **Miren**, cluster `luanchat`. Each chat is a |
| +fully-isolated instance — its own Miren app, disk, admin token, and subdomain |
| +(e.g. `lchat`→group.luan.chat, plus `test`/`paja`/`paulandciara`/`miren`/`gav`/…). |
| +`miren app list -C luanchat` is the source of truth for what's live. |
| + |
| +DNS is a **wildcard** `*.luan.chat → <server IP>`, so a new instance needs no DNS |
| +step and gets TLS in seconds (Miren completes ACME on route-set since the name |
| +already resolves). Point a subdomain elsewhere with a specific record (it beats |
| +the wildcard). |
| ```sh |
| +# New instance — wildcard DNS covers it; this is the whole thing. |
| +./deploy-instance.sh <name> <name>.luan.chat # then add a 1Password token item |
| + |
| # Update an existing instance — DATA-SAFE. Reuse its token; never mint a new one. |
| TOK="$(miren env get LCHAT_ADMIN_TOKEN -u -a <app> -C luanchat)" |
| ./deploy-instance.sh <app> <host> "$TOK" |