Od zera do produkcji: FastAPI na Fly.io i GitHub Actions
Wypychasz kod do main. Testy się uruchamiają. Twoje API wchodzi na produkcję kilka minut później.
Tak właśnie buduje się profesjonalny potok wdrożeniowy. Do tej konfiguracji nie potrzebujesz bazy danych ani Redis. Potrzebujesz tylko jednej aplikacji FastAPI, jednego obrazu Docker, jednej konfiguracji YAML i jednego workflow w GitHub Actions.
Workflow wygląda następująco: git push → GitHub Actions → uruchomienie testów → budowa obrazu → wdrożenie na Fly.io → live
Ten system składa się z trzech części:
- Twoja aplikacja FastAPI. Pakujesz ją w obraz Docker, dzięki czemu działa tak samo w każdym środowisku.
- Fly.io. Uruchamia Twój obraz na małych maszynach. Zajmuje się routingiem i sprawdzaniem stanu aplikacji (health checks) za Ciebie.
- GitHub Actions. Monitoruje Twój kod i automatycznie wdraża zmiany przy każdym wypchnięciu (push).
Aby zapewnić bezpieczeństwo, użyj tokena wdrożeniowego o ograniczonym zakresie (scoped deploy token). Nie używaj swojego osobistego tokena Fly API. Utwórz token, który ma uprawnienia tylko do jednej, konkretnej aplikacji. Przechowuj ten token w GitHub Secrets jako FLY_API_TOKEN.
Kluczowe szczegóły techniczne Twojej konfiguracji:
- Użyj Dockerfile z użytkownikiem bez uprawnień roota (non-root user). Zwiększa to bezpieczeństwo.
- Przypisz swoją aplikację do 0.0.0.0 w Dockerfile. Jeśli użyjesz 127.0.0.1, Fly nie będzie mógł połączyć się z Twoją aplikacją.
- Użyj pliku fly.yaml. Jest on Twoim jedynym źródłem prawdy (source of truth). Definiuje on region, pamięć oraz port.
- Skonfiguruj endpoint do sprawdzania stanu (health check) w FastAPI. Fly używa go, aby upewnić się, że Twoja aplikacja działa, zanim skieruje do niej ruch. Pozwala to na wdrożenia bez przestojów (zero-downtime deployments).
W swoim workflow GitHub Actions użyj polecenia "needs: test". Dzięki temu aplikacja zostanie wdrożona tylko wtedy, gdy testy zakończą się sukcesem. Jeśli kod zawiera błędy, potok zostanie zatrzymany, zanim trafi na produkcję.
Ta konfiguracja skaluje się wraz z Tobą. Możesz dodać środowiska stagingowe i produkcyjne, używając różnych plików konfiguracyjnych, takich jak fly.stg.yaml i fly.prod.yaml.
Przestań wdrażać ręcznie. Przejdź od podejścia „działa na moim laptopie” do „jest dostarczane przy każdym merge'u”.
Źródło: https://dev.to/devded/zero-to-production-fastapi-on-flyio-and-github-actions-1ejo
