Da zero alla produzione: FastAPI su Fly.io e GitHub Actions
Fai il push del codice su main. I test vengono eseguiti. La tua API va online pochi minuti dopo.
Ecco come si costruisce una pipeline di deployment professionale. Per questa configurazione non hai bisogno di un database o di Redis. Ti servono solo un'app FastAPI, un'immagine Docker, una configurazione YAML e un workflow di GitHub Actions.
Il workflow è questo: git push → GitHub Actions → esecuzione test → build immagine → deploy su Fly.io → online
Questo sistema si compone di tre parti:
- La tua app FastAPI. La impacchetti in un'immagine Docker in modo che giri allo stesso modo ovunque.
- Fly.io. Esegue la tua immagine su piccole macchine. Gestisce il routing e gli health check per te.
- GitHub Actions. Monitora il tuo codice e effettua il deploy automaticamente ad ogni push.
Per rendere il tutto sicuro, usa un token di deploy con permessi limitati (scoped). Non usare il tuo token personale Fly API. Crea un token che abbia il permesso di interagire solo con un'app specifica. Salva questo token nei GitHub Secrets come FLY_API_TOKEN.
Dettagli tecnici chiave per la tua configurazione:
- Usa un Dockerfile con un utente non-root. Questo migliora la sicurezza.
- Collega la tua app a
0.0.0.0nel tuo Dockerfile. Se usi127.0.0.1, Fly non riuscirà a raggiungere la tua app. - Usa un file
fly.yaml. Questo file è la tua "fonte di verità". Definisce la regione, la memoria e la porta. - Configura un endpoint di health check in FastAPI. Fly lo usa per assicurarsi che la tua app sia in funzione prima di inviarle traffico. Questo permette deployment con zero downtime.
Nel tuo workflow di GitHub Actions, usa il comando needs: test. Questo assicura che la tua app venga deployata solo se i test superano. Se il codice è errato, la pipeline si ferma prima di raggiungere la produzione.
Questa configurazione scala con te. Puoi aggiungere ambienti di staging e produzione utilizzando diversi file di configurazione come fly.stg.yaml e fly.prod.yaml.
Smetti di fare il deploy manualmente. Passa da "gira sul mio laptop" a "viene rilasciato ad ogni merge".
Fonte: https://dev.to/devded/zero-to-production-fastapi-on-flyio-and-github-actions-1ejo
