Zero to Production: Fly.io और GitHub Actions पर FastAPI
आप main में कोड पुश करते हैं। टेस्ट चलते हैं। कुछ ही मिनटों में आपकी API लाइव हो जाती है।
इस तरह आप एक प्रोफेशनल डिप्लॉयमेंट पाइपलाइन बनाते हैं। इस सेटअप के लिए आपको डेटाबेस या Redis की आवश्यकता नहीं है। आपको केवल एक FastAPI ऐप, एक Docker इमेज, एक YAML कॉन्फ़िगरेशन और एक GitHub Actions वर्कफ़्लो की आवश्यकता है।
वर्कफ़्लो कुछ इस तरह दिखता है: git push → GitHub Actions → run tests → build image → deploy to Fly.io → live
इस सिस्टम के तीन भाग हैं:
- आपका FastAPI ऐप। आप इसे एक Docker इमेज में पैकेज करते हैं ताकि यह हर जगह एक ही तरह से चले।
- Fly.io। यह आपकी इमेज को छोटी मशीनों पर चलाता है। यह आपके लिए रूटिंग और हेल्थ चेक (health checks) को संभालता है।
- GitHub Actions। यह आपके कोड पर नज़र रखता है और हर पुश पर स्वचालित रूप से डिप्लॉय करता है।
इसे सुरक्षित बनाने के लिए, एक scoped deploy token का उपयोग करें। अपने पर्सनल Fly API token का उपयोग न करें। एक ऐसा टोकन बनाएं जिसके पास केवल एक विशिष्ट ऐप को एक्सेस करने की अनुमति हो। इस टोकन को GitHub Secrets में FLY_API_TOKEN के रूप में स्टोर करें।
आपके सेटअप के लिए मुख्य तकनीकी विवरण:
- non-root यूजर के साथ Dockerfile का उपयोग करें। इससे सुरक्षा बढ़ती है।
- अपने Dockerfile में अपने ऐप को 0.0.0.0 से बाइंड करें। यदि आप 127.0.0.1 का उपयोग करते हैं, तो Fly आपके ऐप तक नहीं पहुँच पाएगा।
- fly.yaml फ़ाइल का उपयोग करें। यह फ़ाइल आपके लिए 'source of truth' है। यह आपके रीजन (region), मेमोरी और पोर्ट को परिभाषित करती है।
- FastAPI में एक health check endpoint सेट करें। Fly इसका उपयोग यह सुनिश्चित करने के लिए करता है कि ट्रैफिक भेजने से पहले आपका ऐप चल रहा है। इससे zero-downtime डिप्लॉयमेंट संभव होता है।
अपने GitHub Actions वर्कफ़्लो में, "needs: test" कमांड का उपयोग करें। यह सुनिश्चित करता है कि आपका ऐप तभी डिप्लॉय हो जब आपके टेस्ट पास हो जाएं। यदि आपका कोड खराब है, तो पाइपलाइन प्रोडक्शन तक पहुँचने से पहले ही रुक जाएगी।
यह सेटअप आपके साथ स्केल करता है। आप fly.stg.yaml और fly.prod.yaml जैसी अलग-अलग कॉन्फ़िगरेशन फ़ाइलों का उपयोग करके staging और production एनवायरनमेंट जोड़ सकते हैं।
मैन्युअल रूप से डिप्लॉय करना बंद करें। "runs on my laptop" से "ships on every merge" की ओर बढ़ें।
स्रोत: https://dev.to/devded/zero-to-production-fastapi-on-flyio-and-github-actions-1ejo
