De cero a producción: FastAPI en Fly.io y GitHub Actions
Subes código a main. Se ejecutan las pruebas. Tu API entra en funcionamiento unos minutos después.
Así es como se construye un pipeline de despliegue profesional. No necesitas una base de datos ni Redis para esta configuración. Solo necesitas una aplicación FastAPI, una imagen de Docker, una configuración YAML y un flujo de trabajo de GitHub Actions.
El flujo de trabajo es el siguiente: git push → GitHub Actions → ejecutar pruebas → construir imagen → desplegar en Fly.io → en vivo
Este sistema consta de tres partes:
- Tu aplicación FastAPI. La empaquetas en una imagen de Docker para que se ejecute de la misma manera en cualquier lugar.
- Fly.io. Ejecuta tu imagen en máquinas pequeñas. Se encarga del enrutamiento y de los health checks por ti.
- GitHub Actions. Vigila tu código y despliega automáticamente con cada push.
Para que esto sea seguro, utiliza un token de despliegue con alcance limitado (scoped deploy token). No utilices tu token personal de la API de Fly. Crea un token que solo tenga permiso para interactuar con una aplicación específica. Guarda este token en GitHub Secrets como FLY_API_TOKEN.
Detalles técnicos clave para tu configuración:
- Usa un Dockerfile con un usuario que no sea root. Esto mejora la seguridad.
- Vincula tu aplicación a 0.0.0.0 en tu Dockerfile. Si usas 127.0.0.1, Fly no podrá acceder a tu aplicación.
- Usa un archivo fly.yaml. Este archivo es tu fuente de verdad. Define tu región, memoria y puerto.
- Configura un endpoint de health check en FastAPI. Fly lo utiliza para asegurarse de que tu aplicación esté funcionando antes de enviarle tráfico. Esto permite despliegues sin tiempo de inactividad (zero-downtime).
En tu flujo de trabajo de GitHub Actions, utiliza el comando "needs: test". Esto garantiza que tu aplicación solo se despliegue si las pruebas pasan. Si tu código tiene errores, el pipeline se detiene antes de llegar a producción.
Esta configuración escala contigo. Puedes añadir entornos de staging y producción utilizando diferentes archivos de configuración como fly.stg.yaml y fly.prod.yaml.
Deja de desplegar manualmente. Pasa del "funciona en mi portátil" al "se envía con cada merge".
Fuente: https://dev.to/devded/zero-to-production-fastapi-on-flyio-and-github-actions-1ejo
