জিরো থেকে প্রোডাকশন: 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 টোকেন ব্যবহার করবেন না। এমন একটি টোকেন তৈরি করুন যার শুধুমাত্র একটি নির্দিষ্ট অ্যাপ ব্যবহারের অনুমতি আছে। এই টোকেনটি 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
