The migration is not complex. It has been executed at scale — 164 domains in a single day — using the tools below. All open. All documented. All yours.
The migration sequence
1. Create Fly.io app (free tier, shared machine)
2. Deploy routing script — reads Host: header, proxies to your platform
3. Add health check endpoint to proxy (/health returns 200 JSON)
4. Set autostop = "suspend" — 2s resume vs 30s cold boot
5. Create second machine in a second region (East Coast + West Coast)
6. Note Fly.io shared IP address
7. Create Bunny DNS zone for first domain (API call)
8. Add A record → Fly.io IP
9. Update Porkbun nameservers → kiki.bunny.net / coco.bunny.net
10. Wait 15–30 min, verify TLS + site loads cleanly
11. Confirm: no Cloudflare in response headers
12. Script Bunny DNS zone creation via API for all remaining domains
13. Script Porkbun nameserver updates via API (bulk endpoint available)
14. Run status checker — domains turn green when DNS propagates
⚡
The health check is not optional. Without it, Fly.io cannot detect when your proxy enters a broken state and will not auto-restart it. A machine that looks "started" can silently stop routing traffic. The health check is what converts a human-dependent recovery into an automatic one.
Submit Your Cloudflare Incident →