शून्यापासून प्रोडक्शनपर्यंत: Fly.io आणि GitHub Actions वर FastAPI

तुम्ही main मध्ये कोड पुश करता. टेस्ट्स रन होतात. काही मिनिटांतच तुमची API लाईव्ह होते.

अशा प्रकारे तुम्ही एक प्रोफेशनल डिप्लॉयमेंट पाइपलाइन तयार करू शकता. या सेटअपसाठी तुम्हाला डेटाबेस किंवा Redis ची गरज नाही. तुम्हाला फक्त एक FastAPI app, एक Docker image, एक YAML config आणि एक GitHub Actions workflow लागेल.

वर्कफ्लो असा दिसतो: git push → GitHub Actions → run tests → build image → deploy to Fly.io → live

या सिस्टमचे तीन भाग आहेत:

  • तुमचे FastAPI app. तुम्ही ते एका Docker image मध्ये पॅकेज करता जेणेकरून ते सर्वत्र एकाच पद्धतीने चालेल.
  • Fly.io. हे तुमच्या image ला लहान मशीन्सवर रन करते. हे तुमच्यासाठी राउटिंग (routing) आणि हेल्थ चेक (health checks) हाताळते.
  • GitHub Actions. हे तुमच्या कोडवर लक्ष ठेवते आणि प्रत्येक पुशवर आपोआप डिप्लॉय करते.

हे सुरक्षित करण्यासाठी, 'scoped deploy token' वापरा. तुमचा वैयक्तिक Fly API token वापरू नका. असा टोकन तयार करा ज्याला फक्त एका विशिष्ट app ला हाताळण्याची परवानगी असेल. हा टोकन GitHub Secrets मध्ये FLY_API_TOKEN म्हणून स्टोअर करा.

तुमच्या सेटअपसाठी महत्त्वाचे तांत्रिक तपशील:

  • non-root यूजरसह Dockerfile वापरा. यामुळे सुरक्षा सुधारते.
  • तुमच्या Dockerfile मध्ये तुमच्या app ला 0.0.0.0 ला बाइंड करा. जर तुम्ही 127.0.0.1 वापरले, तर Fly तुमच्या app पर्यंत पोहोचू शकणार नाही.
  • fly.yaml फाईल वापरा. ही फाईल तुमचा source of truth आहे. ती तुमचा region, memory आणि port परिभाषित करते.
  • FastAPI मध्ये एक health check endpoint सेट करा. Fly तुमच्या app वर ट्रॅफिक पाठवण्यापूर्वी ते व्यवस्थित सुरू आहे की नाही हे तपासण्यासाठी याचा वापर करते. यामुळे zero-downtime deployments शक्य होतात.

तुमच्या GitHub Actions workflow मध्ये, "needs: test" कमांड वापरा. यामुळे तुमचे टेस्ट्स पास झाले तरच तुमचे app डिप्लॉय होईल याची खात्री मिळते. जर तुमच्या कोडमध्ये काही त्रुटी असेल, तर पाइपलाइन प्रोडक्शनपर्यंत पोहोचण्यापूर्वीच थांबते.

हा सेटअप तुमच्यासोबत स्केल होतो. तुम्ही fly.stg.yaml आणि fly.prod.yaml सारख्या वेगवेगळ्या कॉन्फिग फाईल्स वापरून staging आणि production एन्व्हायर्नमेंट्स (environments) जोडू शकता.

मॅन्युअली डिप्लॉय करणे थांबवा. "runs on my laptop" कडून "ships on every merge" कडे वळा.

स्रोत: https://dev.to/devded/zero-to-production-fastapi-on-flyio-and-github-actions-1ejo