Zero to Production: FastAPI on Fly.io and GitHub Actions
Você faz o push do código para a main. Os testes são executados. Sua API entra no ar poucos minutos depois.
É assim que você constrói um pipeline de deploy profissional. Você não precisa de um banco de dados ou Redis para esta configuração. Você só precisa de um app FastAPI, uma imagem Docker, uma configuração YAML e um workflow do GitHub Actions.
O workflow funciona assim: git push → GitHub Actions → executar testes → build da imagem → deploy para o Fly.io → no ar
Este sistema possui três partes:
- Seu app FastAPI. Você o empacota em uma imagem Docker para que ele rode da mesma forma em qualquer lugar.
- Fly.io. Ele executa sua imagem em máquinas pequenas. Ele cuida do roteamento e dos health checks para você.
- GitHub Actions. Ele monitora seu código e faz o deploy automaticamente a cada push.
Para tornar isso seguro, use um token de deploy com escopo limitado (scoped deploy token). Não use seu token pessoal da API do Fly. Crie um token que tenha permissão apenas para acessar um app específico. Armazene este token no GitHub Secrets como FLY_API_TOKEN.
Detalhes técnicos importantes para sua configuração:
- Use um Dockerfile com um usuário não-root. Isso melhora a segurança.
- Faça o bind do seu app em 0.0.0.0 no seu Dockerfile. Se você usar 127.0.0.1, o Fly não conseguirá alcançar seu app.
- Use um arquivo fly.yaml. Este arquivo é a sua fonte de verdade (source of truth). Ele define sua região, memória e porta.
- Configure um endpoint de health check no FastAPI. O Fly usa isso para garantir que seu app esteja rodando antes de enviar tráfego para ele. Isso permite deploys com zero downtime.
No seu workflow do GitHub Actions, use o comando "needs: test". Isso garante que seu app só seja implantado se os testes passarem. Se o seu código estiver quebrado, o pipeline para antes de chegar à produção.
Esta configuração escala com você. Você pode adicionar ambientes de staging e produção usando diferentes arquivos de configuração, como fly.stg.yaml e fly.prod.yaml.
Pare de fazer deploy manualmente. Saia do "roda no meu notebook" para o "é enviado a cada merge".
Source: https://dev.to/devded/zero-to-production-fastapi-on-flyio-and-github-actions-1ejo
