Deploy on the spare laptop (the always-on home)
Goal: the Aquila stack (manager + gateway + bots) moves from the dev machine to your spare laptop, which stays on 24×7. The relay VPS stays a dumb TLS pipe — all data lives on the laptop.
Why a relay at all (your question, answered)
DNS needs a public address. The laptop is behind NAT (its 10.10.10.23 is private; Tailscale
addresses are private too). So: *.aquila.exaflair.com → relay VPS public IP → Caddy → a tunnel
the laptop itself opens outbound → laptop's manager. The relay never stores anything; it's a
doorbell, not a house.
What's needed from you
- The laptop online with Tailscale up. Right now I can't reach it:
10.10.10.23times out andtailscale statusdoesn't listcnsku-18(I seecnsku-19-1,node-b,node-b2). Check on the laptop:tailscale status→ if it's not listed/logged in, runtailscale up. Then tell me its tailnet name or IP (e.g.cnsku-18-1 100.x.y.z). - Docker + compose installed (same as we used here). Check:
docker --version && docker compose version. - Sudo for installing one systemd unit (the tunnel) — or you run one command I'll paste.
What I do then (30–45 minutes, no further asks)
- Copy the repo +
.envover Tailscale;docker compose build && up -d. - Build the core image; create your first real bot; wire the tunnel:
laptop → relay:127.0.0.1:8090(autossh systemd unit, restricted key on the relay). - Add the wildcard DNS (2-min guide) and watch the first
<number>.aquila.exaflair.comcertificate issue itself. - Run the full smoke: welcome → OTP → bot chat → routine delivery, from your phone.
Safety notes
- The relay currently runs only Caddy (added today, additive-only: ports 80/443; k3s on that machine untouched — verified).
- The tunnel key is restricted (
restrict,port-forwarding,permitlisten="8090") so it can only forward that one port and can't run commands on the relay.