مقدمه
هنگام توسعه برنامه های کاربردی پایتون، FastAPI به عنوان یک انتخاب برتر برای ساخت راه حل های با کارایی بالا برجسته می شود. سرعت، سادگی و پشتیبانی از برنامه نویسی ناهمزمان را ارائه می دهد و آن را برای توسعه برنامه های مدرن و مقیاس پذیر ایده آل می کند. در این آموزش، شما را از طریق فرآیند راه اندازی یک برنامه FastAPI با پایگاه داده NoSQL راهنمایی می کنیم. هنگامی که صحبت از ذخیره و مدیریت داده ها می شود، پایگاه های داده NoSQL انعطاف پذیری و مقیاس پذیری را ارائه می دهند و آنها را به یک برنامه کاربردی عالی تبدیل می کند که نیاز به مدیریت ساختارهای داده متنوع و پیچیده دارند.
پیش نیازها
- سروری که اوبونتو را به همراه یک کاربر غیر ریشه با امتیازات sudo و فایروال فعال اجرا می کند. .
- آشنایی با خط فرمان لینوکس
- بهروزرسانی sudo apt-get را در ترمینال اوبونتو اجرا کنید تا مطمئن شوید که سیستم شما آخرین نسخهها و بهروزرسانیهای امنیتی را برای نرمافزارهای موجود در مخازن پیکربندی شده روی سیستم شما دارد.
این دستورالعملها برای آخرین نسخههای اوبونتو معتبر هستند: اوبونتو 24.04، اوبونتو 22.04 و اوبونتو 20.04. اگر از نسخه اوبونتو <= 18.04 استفاده می کنید، توصیه می کنیم به آخرین نسخه ارتقا دهید زیرا اوبونتو دیگر از این نسخه ها پشتیبانی نمی کند.
مرحله 1 – محیط پایتون را روی دستگاه خود تنظیم کنید
در طول این آموزش، ما از بسته python3 برای اجرای دستورات استفاده خواهیم کرد. آخرین نسخه اوبونتو با نصب پایتون 3 ارائه می شود، بنابراین برای تأیید نصب آن، دستور زیر را اجرا کنید:
python3 --version
در صورتی که خطا برمی گردد، می توانید بسته را با اجرای زیر نصب/نصب مجدد کنید:
sudo apt-get install python3
در مرحله بعد، باید پیپ را نصب کنید تا بستههای پایتون و وابستگیهای آنها را به صورت ایمن نصب کنید.
sudo apt-get install python3-pip
مرحله 2 – ایجاد محیط مجازی
اگر از نسخه اوبونتو < 24.04 استفاده می کنید، نیازی به ایجاد یک محیط مجازی ندارید، اما این یک تمرین خوب است که وابستگی های پروژه خود را جدا کنید.
با شروع از Python 3.11 و 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:~$
اکنون می توانید نصب وابستگی های مورد نیاز را در داخل این محیط مجازی شروع کنید.
مرحله 3 – کتابخانه ها و بسته های مورد نیاز را نصب کنید
در این مرحله، چند بسته و کتابخانه را نصب میکنید که برای پیگیری موفقیت آمیز این آموزش لازم است.
بیایید با نصب fastapi که برای ساخت برنامه FastAPI شما لازم است و uvicorn که برای اجرای برنامه FastAPI لازم است شروع کنیم.
pip install fastapi uvicorn
در این آموزش از MongoDB به عنوان پایگاه داده NoSQL استفاده خواهیم کرد. برای تعامل با MongoDB از داخل FastAPI خود، باید موتور را نصب کنید، که یک درایور Python ناهمزمان برای MongoDB است.
pip install motor
مرحله 4 – 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})'
مرحله 5 – برنامه 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
با فرض اینکه مجموعه 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: این مدل یک خروجی را بر اساس یک ویژگی ورودی پیش بینی می کند.
- داده های ورودی از مدل Pydantic: این ساختار ورودی مورد انتظار را برای نقطه پایانی پیش بینی تعریف می کند. در این مورد، یک شناور است.
- داده های ورودی از مدل Pydantic: این ورودی مورد انتظار را برای نقطه پایانی پیش بینی تعریف می کند. در این مورد، یک شناور است.
مرحله 6 – برنامه 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}'
مرحله 7 [اختیاری] – برنامه را با استفاده از Docker Compose اجرا کنید
شما می توانید برنامه خود را کانتینری کنید و آن را با استفاده از docker-compose اجرا کنید. کانتینر کردن برنامه شما، فرآیند استقرار را ساده تر می کند و برنامه شما را برای استقرار، مقیاس بندی و نگهداری آسان تر می کند.
نتیجه
در این آموزش، نحوه راه اندازی موفقیت آمیز یک برنامه FastAPI با MongoDB، ایجاد یک برنامه ساده مبتنی بر هوش مصنوعی که قادر به ذخیره و بازیابی پیش بینی های ورودی است، یاد گرفتید.
ترکیبی از FastAPI و پایگاه داده NoSQL یک محیط قدرتمند و منعطف را برای ایجاد و مقیاسبندی برنامههای مبتنی بر هوش مصنوعی ارائه میدهد.