مقدمه
هنگام توسعه برنامههای پایتون، FastAPI با سرعت، سادگی و پشتیبانی از برنامهنویسی غیرهمزمان انتخابی عالی است. در این آموزش، راهاندازی FastAPI با پایگاه داده NoSQL را بررسی میکنیم که انعطافپذیری و مقیاسپذیری برای مدیریت دادههای متنوع ارائه میدهد.
پیش نیازها
- سرور اوبونتو، کاربر غیر ریشهای با دسترسی sudo و فایروال فعال.
- آشنایی با خط فرمان لینوکس.
- دستور
sudo apt-get update
را در ترمینال اوبونتو اجرا کنید تا اطمینان حاصل کنید که سیستم شما جدیدترین نسخهها و بهروزرسانیهای امنیتی نرمافزارهای موجود در مخازن سیستم را دارد.
نکته:این دستورالعملها برای جدیدترین نسخههای اوبونتو معتبر است: اوبونتو 24.04، اوبونتو 22.04 و اوبونتو 20.04. اگر از نسخه اوبونتو 18.04 یا قدیمیتر استفاده میکنید، پیشنهاد میکنیم به نسخه جدیدتری ارتقا دهید، زیرا اوبونتو دیگر از این نسخهها پشتیبانی نمیکند.
مرحله ۱ – تنظیم محیط پایتون روی سیستم شما
در طول این آموزش، از بسته python3 برای اجرای دستورات استفاده خواهیم کرد. نسخههای جدید اوبونتو به طور پیشفرض پایتون ۳ را نصب دارند، بنابراین برای تأیید نصب آن، دستور زیر را اجرا کنید:
python3 --version
در صورتی که این دستور خطا داد، میتوانید بسته را با اجرای دستور زیر نصب یا مجدداً نصب کنید:
sudo apt-get install python3
سپس، نیاز است که pip را برای نصب بستههای پایتون و وابستگیهای آن بهطور امن نصب کنید.
sudo apt-get install python3-pip
مرحله ۲ – ایجاد محیط مجازی
اگر از نسخه اوبونتو < 24.04 استفاده میکنید، نیازی به ایجاد محیط مجازی ندارید، اما جداسازی وابستگیهای پروژه از بهترین شیوههاست.
از پایتون ۳.۱۱ و pip 22.3 به بعد، PEP 668 جدیدی معرفی شده که محیطهای پایه پایتون را بهعنوان “مدیریتشده از بیرون” علامتگذاری میکند، یعنی شما نمیتوانید از pip برای نصب بستهها بهطور موفقیتآمیز استفاده کنید مگر اینکه در یک محیط مجازی کار کنید.
در این مرحله، شما یک محیط مجازی برای پروژه خود ایجاد خواهید کرد که وابستگیهای پروژه را جداسازی میکند تا از بروز مشکلات احتمالی میان نسخههای مختلف بستهها جلوگیری شود. دستورالعملهای زیر را در ترمینال اجرا کنید:
sudo apt-get install python3-venv
این دستور بسته venv
مورد نیاز برای ایجاد یک محیط مجازی را نصب خواهد کرد.
python3 -m venv fastapi-env
این دستور یک محیط مجازی به نام fastapi-env
در داخل دایرکتوری کاری شما ایجاد خواهد کرد. برای شروع کار در این محیط، باید آن را فعال کنید.
source fastapi-env/bin/activate
در صورت اجرای موفقیتآمیز، شما مشاهده خواهید کرد که پیشنمایش ترمینال بهصورت زیر نمایش داده میشود:
(fastapi-env) user@machine:~$
حالا میتوانید شروع به نصب وابستگیهای مورد نیاز داخل این محیط مجازی کنید.
مرحله ۳ – نصب کتابخانهها و بستههای مورد نیاز
در این مرحله، شما چند بسته و کتابخانه که برای دنبال کردن موفق این آموزش مورد نیاز است، نصب خواهید کرد.
ابتدا با نصب FastAPI
شروع میکنیم که برای ساخت برنامه شما لازم است و سپس uvicorn
که برای اجرای برنامه FastAPI مورد نیاز است.
pip install fastapi uvicorn
در این آموزش، از MongoDB بهعنوان پایگاه داده NoSQL استفاده خواهیم کرد. برای تعامل با MongoDB از داخل FastAPI، شما باید motor
را نصب کنید که یک درایور غیرهمزمان پایتون برای MongoDB است.
pip install motor
مرحله ۴ – نصب و راهاندازی MongoDB روی اوبونتو
برای نصب MongoDB روی سیستم اوبونتو خود، مجموعه دستورات زیر را در ترمینال اجرا کنید:
wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/mongodb-archive-keyring.gpg] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
در صورت اجرای موفقیتآمیز، این دستور پارامتر echo را باز میگرداند. حالا یک بروزرسانی سریع انجام دهید:
sudo apt-get update
این کار اطمینان میدهد که پس از تنظیم کلیدهای MongoDB، جدیدترین بهروزرسانیها را دریافت میکنید.
پس از آن، نیاز است که یک وابستگی openssl را روی سیستم خود نصب کنید که برای نصب MongoDB ضروری است.
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
پس از اجرا، از شما خواسته میشود که سرویسها را مجدداً راهاندازی کنید. پس از راهاندازی مجدد، MongoDB را با استفاده از دستور زیر نصب کنید:
sudo apt-get install -y mongodb
سرویسهای MongoDB را راهاندازی و فعال کنید:
sudo systemctl start mongod
sudo systemctl enable mongod
میتوانید وضعیت سرویس MongoDB را بررسی کرده و اتصال را با اجرای دستورات زیر تست کنید:
sudo systemctl status mongod
mongo --eval 'db.runCommand({connectionStatus: 1})'
مرحله ۵ – ایجاد برنامه FastAPI
مرحله بعدی ایجاد یک برنامه FastAPI است. در دایرکتوری کاری خود، یک فایل به نام database.py
ایجاد کنید:
nano database.py
این یک ویرایشگر متن خالی را باز میکند. منطق اتصال پایگاه داده خود را در اینجا بنویسید.
from motor.motor_asyncio import AsyncIOMotorClient
MONGO_DETAILS = "mongodb://localhost:27017"
client = AsyncIOMotorClient(MONGO_DETAILS)
db = client.mydatabase
collection = db.mycollection
با فرض اینکه مجموعه mycollection
از پایگاه داده mydatabase
با دادههایی پر شده است، حالا باید یک فایل main.py
ایجاد کنید که منطق برنامه شما را نگهداری کند. در برنامه FastAPI زیر، اتصال به پایگاه داده از طریق database.py
برقرار میشود و مسیرهایی برای پیشبینی هوش مصنوعی تعریف میشود. از این مسیرها برای اعتبارسنجی ورودی استفاده میشود.
nano main.py
در ویرایشگر متن، کد زیر را بنویسید:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from sklearn.linear_model import LinearRegression
import numpy as np
from database import collection
app = FastAPI()
# simple dataset and model
x = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 6, 8, 10])
model = LinearRegressions()
model.fit(x, y)
# define the Pydantic model for input validation
class InputData(BaseModel):
feature: float
# route_1 for predicting the output based on input feature
@app.post("/predict/")
async def predict(input_data: InputData):
try:
prediction = model.predict([[input_data.feature]])
return {"prediction": prediction[0]}
except Exception as ex:
raise HTTPException(status_code=400, detail=str(ex))
# route_2 to interact with MongoDB
@app.get("/items/")
async def get_item():
items = []
async for item in collection.find():
items.append(item)
return items
# route_3 to add a new item to MongoDB
@app.post("/items/")
async def create_item(item: dict):
new_item = await collection.insert_one(item)
created_item = await collection.fine_one({"_id": new_item.inserted_id})
return created_item
در اینجا توضیحی از عملکرد این برنامه آورده شده است:
- مدل رگرسیون خطی از sklearn: این مدل خروجی را بر اساس یک ویژگی ورودی پیشبینی میکند.
- InputData از مدل Pydantic: این مدل ساختار ورودی مورد انتظار برای نقطه پایانی پیشبینی را تعریف میکند. در اینجا، ورودی از نوع عدد اعشاری (float) است.
- مسیرهای MongoDB: مسیرهای
/items/
وPOST /items/
به شما این امکان را میدهند که اقلام را از مجموعه MongoDB خود بازیابی و وارد کنید.
مرحله ۶ – اجرای برنامه FastAPI
برای اجرای موفقیتآمیز این برنامه، نیاز است که کتابخانهها و بستههای استفادهشده در برنامه را نصب کنید.
pip install pydantic scikit-learn numpy
حال، از دستور زیر برای اجرای این برنامه استفاده کنید:
uvicorn main:app --reload
خروجی این دستور بهصورت زیر خواهد بود:
Output
INFO: Will watch for changes in these directories: ['/path/to/your/project']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [XXXXX] using statreload
INFO: Started server process [XXXXX]
INFO: Waiting for application startup.
INFO: Application startup complete.
FastAPI بهطور خودکار مستندات API تعاملی را با استفاده از Swagger UI تولید کرده است. شما میتوانید از طریق آدرس http://127.0.0.1:8000/docs به آن دسترسی پیدا کنید.
میتوانید از ابزارهایی مانند curl یا Postman برای فراخوانی نقطه پایانی که مقدار را بر اساس ورودی شما پیشبینی میکند، استفاده کنید.
curl -X POST "http://127.0.0.1:8000/predict/" -H "Content-type: application/json" -d '{"feature": 3}'
نتیجه
در این آموزش، یاد گرفتید که چگونه یک برنامه FastAPI را با MongoDB بهطور موفقیتآمیز راهاندازی کنید و یک برنامه ساده مبتنی بر هوش مصنوعی بسازید که قادر به ذخیره و بازیابی پیشبینیهای ورودی باشد.
ترکیب FastAPI و پایگاه داده NoSQL یک محیط قدرتمند و انعطافپذیر برای ساخت و مقیاسبندی برنامههای مبتنی بر هوش مصنوعی فراهم میکند.