چگونه یک برنامه FastAPI را با پایگاه داده NoSQL راه‌اندازی کنیم؟

مقدمه

هنگام توسعه برنامه‌های پایتون، 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 یک محیط قدرتمند و انعطاف‌پذیر برای ساخت و مقیاس‌بندی برنامه‌های مبتنی بر هوش مصنوعی فراهم می‌کند.

[تعداد: 1   میانگین: 5/5]
دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شاید دوست داشته باشید