Sıfırdan Üretime: Fly.io ve GitHub Actions ile FastAPI

Kodu main dalına gönderirsiniz. Testler çalışır. API'niz birkaç dakika sonra yayına girer.

Profesyonel bir dağıtım hattı (deployment pipeline) bu şekilde kurulur. Bu kurulum için bir veritabanına veya Redis'e ihtiyacınız yoktur. Sadece bir FastAPI uygulamasına, bir Docker imajına, bir YAML yapılandırmasına ve bir GitHub Actions iş akışına (workflow) ihtiyacınız vardır.

İş akışı şu şekildedir: git push → GitHub Actions → testleri çalıştır → imaj oluştur → Fly.io'ya dağıt → canlı

Bu sistemin üç parçası vardır:

  • FastAPI uygulamanız. Her yerde aynı şekilde çalışması için onu bir Docker imajı içinde paketlersiniz.
  • Fly.io. İmajınızı küçük makinelerde çalıştırır. Yönlendirme (routing) ve sağlık kontrollerini (health checks) sizin yerinize halleder.
  • GitHub Actions. Kodunuzu izler ve her gönderimde (push) otomatik olarak dağıtım yapar.

Bunu güvenli hale getirmek için kapsamlı (scoped) bir dağıtım token'ı kullanın. Kişisel Fly API token'ınızı kullanmayın. Yalnızca belirli bir uygulamaya erişim izni olan bir token oluşturun. Bu token'ı GitHub Secrets içinde FLY_API_TOKEN olarak saklayın.

Kurulumunuz için temel teknik detaylar:

  • Root olmayan bir kullanıcı içeren bir Dockerfile kullanın. Bu, güvenliği artırır.
  • Dockerfile dosyanızda uygulamanızı 0.0.0.0 adresine bağlayın (bind). Eğer 127.0.0.1 kullanırsanız, Fly uygulamanıza erişemez.
  • Bir fly.yaml dosyası kullanın. Bu dosya sizin doğruluk kaynağınızdır (source of truth). Bölgenizi, belleğinizi ve portunuzu tanımlar.
  • FastAPI'de bir sağlık kontrolü (health check) uç noktası (endpoint) oluşturun. Fly, trafiği yönlendirmeden önce uygulamanızın çalıştığından emin olmak için bunu kullanır. Bu, sıfır kesintiyle (zero-downtime) dağıtım yapmanıza olanak tanır.

GitHub Actions iş akışınızda "needs: test" komutunu kullanın. Bu, uygulamanızın yalnızca testleriniz geçerse dağıtılmasını sağlar. Kodunuz hatalıysa, iş akışı üretim ortamına (production) ulaşmadan durur.

Bu kurulum sizinle birlikte ölçeklenir. fly.stg.yaml ve fly.prod.yaml gibi farklı yapılandırma dosyaları kullanarak staging ve production ortamları ekleyebilirsiniz.

Manuel olarak dağıtım yapmayı bırakın. "Benim bilgisayarımda çalışıyor" aşamasından "her birleştirmede (merge) yayına çıkıyor" aşamasına geçin.

Kaynak: https://dev.to/devded/zero-to-production-fastapi-on-flyio-and-github-actions-1ejo