Execute Fly.io production deployment checklist with health checks, auto-scaling, monitoring, and rollback procedures. Trigger: "fly.io production", "fly.io go-live", "fly.io prod checklist".
Fly.io runs applications on edge infrastructure across 30+ regions with Machines, Volumes, and managed Postgres. A production deployment requires multi-region redundancy, proper secret management, health checks, and rollback procedures. Misconfigured auto-scaling means cold starts; missing volume backups mean data loss. This checklist ensures your Fly.io app is production-hardened.
FLY_API_TOKEN stored in CI secrets (never in fly.toml or source)fly secrets (not [env] block)https://<app>.fly.devforce_https = true in fly.toml http_servicemin_machines_running = 1 to avoid cold startssoft_limit/hard_limit per workload)fly releases rollback <N>fly logs streaming configured for centralized loggingfly machine statushttps://status.flyio.netfly scale show)async function checkFlyioReadiness(): Promise<void> {
const checks: { name: string; pass: boolean; detail: string }[] = [];
// Fly.io API connectivity
try {
const res = await fetch('https://api.machines.dev/v1/apps', {
headers: { Authorization: `Bearer ${process.env.FLY_API_TOKEN}` },
});
checks.push({ name: 'Fly API', pass: res.ok, detail: res.ok ? 'Connected' : `HTTP ${res.status}` });
} catch (e: any) { checks.push({ name: 'Fly API', pass: false, detail: e.message }); }
// Token present
checks.push({ name: 'API Token Set', pass: !!process.env.FLY_API_TOKEN, detail: process.env.FLY_API_TOKEN ? 'Present' : 'MISSING' });
// Platform status
try {
const res = await fetch('https://status.flyio.net/api/v2/status.json');
const data = await res.json();
const status = data?.status?.indicator || 'unknown';
checks.push({ name: 'Platform Status', pass: status === 'none', detail: status === 'none' ? 'Operational' : status });
} catch (e: any) { checks.push({ name: 'Platform Status', pass: false, detail: e.message }); }
for (const c of checks) console.log(`[${c.pass ? 'PASS' : 'FAIL'}] ${c.name}: ${c.detail}`);
}
checkFlyioReadiness();
| Check | Risk if Skipped | Priority |
|---|---|---|
| Multi-region deployment | Single region outage = full downtime | P1 |
| Volume backups | Data loss on machine replacement | P1 |
| Health check config | Dead machines receive traffic | P2 |
| SIGTERM handling | Dropped requests during deploys | P2 |
| Rollback procedure | Stuck on broken release | P3 |
See flyio-security-basics for network policies and secret management.