FastAPI অ্যাপ্লিকেশন ডেভেলপমেন্টে Development এবং Production পরিবেশের মধ্যে পার্থক্য ম্যানেজ করা গুরুত্বপূর্ণ। সঠিক পরিবেশ কনফিগারেশন আপনাকে অ্যাপ্লিকেশনটি ডেভেলপমেন্ট এবং প্রোডাকশন উভয় অবস্থাতেই নির্বিঘ্নভাবে পরিচালনা করতে সহায়ক হয়। এই টিউটোরিয়ালে আমরা দেখব কিভাবে FastAPI অ্যাপ্লিকেশনে Development এবং Production পরিবেশ ম্যানেজমেন্ট করা যায়।
Step 1: Environment Variables ব্যবহার করা
প্রথমে, আপনি পরিবেশের কনফিগারেশনগুলির জন্য environment variables ব্যবহার করতে পারেন। এই ভেরিয়েবলগুলি বিভিন্ন পরিবেশে কনফিগারেশন পরিবর্তন করার জন্য খুবই উপকারী। Python এর os লাইব্রেরি বা python-dotenv লাইব্রেরি ব্যবহার করে আপনি এই ভেরিয়েবলগুলি লোড করতে পারেন।
Install python-dotenv:
pip install python-dotenv
Step 2: .env ফাইল তৈরি করা
ডেভেলপমেন্ট এবং প্রোডাকশন কনফিগারেশন জন্য .env ফাইল তৈরি করা যেতে পারে। এই ফাইলটি পরিবেশ ভেরিয়েবল ধারণ করবে।
উদাহরণ: .env ফাইল (Development)
DEBUG=True
DATABASE_URL=sqlite:///./test.db
SECRET_KEY=devsecretkey
উদাহরণ: .env ফাইল (Production)
DEBUG=False
DATABASE_URL=postgresql://user:password@localhost/production_db
SECRET_KEY=productionsecretkey
Step 3: FastAPI অ্যাপে Environment Variables ব্যবহার করা
FastAPI অ্যাপে python-dotenv লাইব্রেরি ব্যবহার করে .env ফাইল থেকে পরিবেশ ভেরিয়েবল লোড করতে পারেন।
উদাহরণ: FastAPI অ্যাপে Environment Variables লোড করা
from fastapi import FastAPI
import os
from dotenv import load_dotenv
# .env ফাইল থেকে পরিবেশ ভেরিয়েবল লোড করা
load_dotenv()
app = FastAPI()
# পরিবেশ ভেরিয়েবল থেকে কনফিগারেশন ডাটা গ্রহণ করা
DEBUG = os.getenv("DEBUG") == "True"
DATABASE_URL = os.getenv("DATABASE_URL")
SECRET_KEY = os.getenv("SECRET_KEY")
@app.get("/")
def read_root():
return {
"debug_mode": DEBUG,
"database_url": DATABASE_URL,
"secret_key": SECRET_KEY
}
এখানে:
load_dotenv():.envফাইল থেকে পরিবেশ ভেরিয়েবলগুলি লোড করে।os.getenv(): নির্দিষ্ট ভেরিয়েবলের মান অ্যাক্সেস করার জন্য ব্যবহৃত হয়।
Step 4: Development Environment ম্যানেজমেন্ট
Development Environment-এ আপনি সাধারণত debugging, testing, এবং local database ব্যবহার করবেন।
Development Environment Configuration:
- DEBUG: ডেভেলপমেন্টে অ্যাপ্লিকেশনের লগগুলি আরও বিস্তারিত হতে পারে।
DEBUG=Trueথাকলে ডেভেলপমেন্ট পরিবেশে লগিং এবং ত্রুটি ডিবাগিং সহজ হয়। - DATABASE_URL: ডেভেলপমেন্টে আপনি একটি SQLite ডাটাবেস ব্যবহার করতে পারেন যাতে প্রোডাকশন ডাটাবেসের উপর কোন প্রভাব না পড়ে।
- SECRET_KEY: একটি ডেভেলপমেন্ট মান ব্যবহার করুন, তবে প্রোডাকশনের জন্য একটি শক্তিশালী গোপন কী ব্যবহার করুন।
উদাহরণ: ডেভেলপমেন্টে Debug Mode চেক করা
@app.get("/debug")
def debug_mode():
if DEBUG:
return {"message": "Debugging is enabled"}
return {"message": "Debugging is disabled"}
Step 5: Production Environment ম্যানেজমেন্ট
Production Environment-এ আপনি কিছু অতিরিক্ত কনফিগারেশন করবেন, যেমন নিরাপত্তা, উন্নত পারফরম্যান্স এবং কনটেইনারাইজেশন।
Production Environment Configuration:
- DEBUG: প্রোডাকশনে
DEBUG=Falseসেট করুন, যাতে ডিবাগিং তথ্য বাইরে চলে না যায়। - DATABASE_URL: প্রোডাকশন ডাটাবেসের জন্য PostgreSQL বা অন্য কোনও শক্তিশালী ডাটাবেস ব্যবহার করুন।
- SECRET_KEY: প্রোডাকশনে একটি শক্তিশালী SECRET_KEY ব্যবহার করুন। এটি JWT (JSON Web Tokens) বা সেশন কুকির জন্য ব্যবহৃত হতে পারে।
উদাহরণ: Production Mode চেক করা
@app.get("/production")
def production_mode():
if not DEBUG:
return {"message": "Production mode enabled"}
return {"message": "Development mode enabled"}
Step 6: Uvicorn ও Gunicorn এর মাধ্যমে Production Server চালানো
প্রোডাকশনে অ্যাপ্লিকেশন চালানোর জন্য আপনি Uvicorn এবং Gunicorn ব্যবহার করতে পারেন। Gunicorn একটি WSGI HTTP সার্ভার যা FastAPI অ্যাপের জন্য পারফরম্যান্স অপটিমাইজেশন প্রদান করে।
উদাহরণ: Uvicorn + Gunicorn
gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:app
এখানে:
-w 4: ৪টি worker প্রসেস ব্যবহার করা হবে।-k uvicorn.workers.UvicornWorker: Uvicorn এর worker ব্যবহার করা হবে।app:app:appহল FastAPI অ্যাপের অবজেক্ট, এবংappফাইলের নাম।
Step 7: FastAPI অ্যাপের Environment Configuration চেক করা
FastAPI অ্যাপের কনফিগারেশন চেক করার জন্য আপনি একটি সিম্পল /config রাউট তৈরি করতে পারেন, যা পরিবেশ ভেরিয়েবলগুলি প্রদর্শন করবে।
@app.get("/config")
def read_config():
return {
"debug": DEBUG,
"database_url": DATABASE_URL,
"secret_key": SECRET_KEY,
}
এটি আপনাকে পরিবেশ ভেরিয়েবলগুলির মান দেখতে এবং নিশ্চিত হতে সাহায্য করবে।
Step 8: Docker Containerization (Optional)
Docker ব্যবহার করে অ্যাপ্লিকেশনটি কনটেইনারাইজ করলে প্রোডাকশন পরিবেশের ডিপেনডেন্সি ম্যানেজমেন্ট সহজ হয়। আপনি Dockerfile তৈরি করে অ্যাপ্লিকেশনটি প্রোডাকশন পরিবেশে চালাতে পারেন।
উদাহরণ: Dockerfile
# Base image
FROM python:3.9-slim
# Set working directory
WORKDIR /app
# Install dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy application code
COPY . .
# Set environment variables
ENV DEBUG=False
# Expose port
EXPOSE 8000
# Run FastAPI app
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
এখানে:
ENV DEBUG=False: Docker কনটেইনারে প্রোডাকশন মুডেDEBUGপরিবেশ ভেরিয়েবল সেট করা।CMD: অ্যাপ চালানোর জন্য কমান্ড।
FastAPI-তে Development এবং Production পরিবেশ ম্যানেজমেন্টের জন্য Environment Variables ব্যবহার করা গুরুত্বপূর্ণ। আপনি python-dotenv লাইব্রেরি ব্যবহার করে .env ফাইলের মাধ্যমে পরিবেশ কনফিগার করতে পারেন এবং ডেভেলপমেন্ট এবং প্রোডাকশনে অ্যাপ্লিকেশনের কনফিগারেশন আলাদা রাখতে পারেন। Uvicorn এবং Gunicorn এর মাধ্যমে প্রোডাকশনে অ্যাপ্লিকেশনটি চালানো হয় এবং Docker এর মাধ্যমে কনটেইনারাইজেশন আরও সহজ হয়।
Read more