زیرو سے پروڈکشن تک: 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 پر بائنڈ (bind) کریں۔ اگر آپ 127.0.0.1 استعمال کرتے ہیں، تو Fly آپ کی ایپ تک نہیں پہنچ سکے گا۔
  • fly.yaml فائل استعمال کریں۔ یہ فائل آپ کے ڈیٹا کا مستند ذریعہ (source of truth) ہے۔ یہ آپ کے ریجن (region)، میموری اور پورٹ کو متعین کرتی ہے۔
  • FastAPI میں ایک health check endpoint سیٹ اپ کریں۔ Fly اسے اس بات کو یقینی بنانے کے لیے استعمال کرتا ہے کہ ٹریفک بھیجنے سے پہلے آپ کی ایپ چل رہی ہے۔ اس سے zero-downtime ڈیپلائمنٹس ممکن ہوتے ہیں۔

اپنے GitHub Actions ورک فلو میں، "needs: test" کمانڈ استعمال کریں۔ یہ اس بات کو یقینی بناتا ہے کہ آپ کی ایپ صرف اسی صورت میں ڈیپلائی ہو جب آپ کے ٹیسٹ پاس ہو جائیں۔ اگر آپ کا کوڈ خراب ہے، تو پائپ لائن پروڈکشن تک پہنچنے سے پہلے ہی رک جائے گی۔

یہ سیٹ اپ آپ کے ساتھ اسکیل (scale) ہوتا ہے۔ آپ fly.stg.yaml اور fly.prod.yaml جیسی مختلف کنفیگ فائلوں کا استعمال کرتے ہوئے اسٹیجنگ (staging) اور پروڈکشن (production) ماحول شامل کر سکتے ہیں۔

دستی طور پر (manually) ڈیپلائی کرنا بند کریں۔ "runs on my laptop" سے "ships on every merge" کی طرف منتقل ہوں۔

ماخذ: https://dev.to/devded/zero-to-production-fastapi-on-flyio-and-github-actions-1ejo