Von Null auf Produktion: FastAPI auf Fly.io und GitHub Actions
Du pushst Code in den main-Branch. Tests werden ausgeführt. Deine API geht wenige Minuten später live.
So baust du eine professionelle Deployment-Pipeline auf. Für dieses Setup benötigst du weder eine Datenbank noch Redis. Du brauchst lediglich eine FastAPI-App, ein Docker-Image, eine YAML-Konfiguration und einen GitHub Actions Workflow.
Der Workflow sieht so aus: git push → GitHub Actions → Tests ausführen → Image bauen → auf Fly.io deployen → live
Dieses System besteht aus drei Teilen:
- Deine FastAPI-App. Du verpackst sie in ein Docker-Image, damit sie überall auf die gleiche Weise läuft.
- Fly.io. Es führt dein Image auf kleinen Instanzen aus. Es übernimmt das Routing und die Health Checks für dich.
- GitHub Actions. Es überwacht deinen Code und deployt bei jedem Push automatisch.
Um dies sicher zu gestalten, verwende einen Scoped Deploy Token. Nutze nicht deinen persönlichen Fly API Token. Erstelle einen Token, der nur die Berechtigung hat, eine spezifische App zu verwalten. Speichere diesen Token in den GitHub Secrets als FLY_API_TOKEN.
Wichtige technische Details für dein Setup:
- Verwende ein Dockerfile mit einem Non-Root-User. Das erhöht die Sicherheit.
- Binde deine App in deinem Dockerfile an
0.0.0.0. Wenn du127.0.0.1verwendest, kann Fly deine App nicht erreichen. - Verwende eine
fly.yaml-Datei. Diese Datei ist deine „Source of Truth“. Sie definiert deine Region, den Arbeitsspeicher und den Port. - Richte einen Health-Check-Endpoint in FastAPI ein. Fly nutzt diesen, um sicherzustellen, dass deine App läuft, bevor Traffic an sie gesendet wird. Dies ermöglicht Zero-Downtime-Deployments.
Verwende in deinem GitHub Actions Workflow den Befehl needs: test. Dies stellt sicher, dass deine App nur deployt wird, wenn deine Tests erfolgreich durchlaufen. Wenn dein Code fehlerhaft ist, stoppt die Pipeline, bevor sie die Produktion erreicht.
Dieses Setup skaliert mit dir mit. Du kannst Staging- und Produktionsumgebungen hinzufügen, indem du verschiedene Konfigurationsdateien wie fly.stg.yaml und fly.prod.yaml verwendest.
Hör auf, manuell zu deployen. Wechsle von „läuft auf meinem Laptop“ zu „wird bei jedem Merge ausgeliefert“.
Quelle: https://dev.to/devded/zero-to-production-fastapi-on-flyio-and-github-actions-1ejo
