تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

نحوه راه‌اندازی FastAPI با دیتابیس NoSQL در سرور مجازی


۱۷ بهمن ۱۴۰۳

مقدمه

زمانی که به توسعه برنامه‌های پایتون (Python) پرداخته می‌شود، FastAPI به عنوان یک انتخاب برجسته برای ساخت برنامه‌های با عملکرد بالا شناخته می‌شود. این فریم‌ورک سرعت، سادگی و پشتیبانی از برنامه‌نویسی ناهمزمان (asynchronous programming) را ارائه می‌دهد و مسیر را برای توسعه برنامه‌های مدرن و مقیاس‌پذیر ایده‌آل می‌سازد. در این آموزش، شما را با فرآیند راه‌اندازی یک برنامه FastAPI همراه با یک پایگاه داده NoSQL آشنا خواهیم کرد.

زمانی که صحبت از ذخیره‌سازی و مدیریت داده‌ها می‌شود، پایگاه‌های داده NoSQL انعطاف‌پذیری و مقیاس‌پذیری بیشتری دارند و برای برنامه‌هایی که نیاز به مدیریت ساختارهای داده‌ای متنوع و پیچیده دارند، مناسب‌تر هستند.

پیش‌نیازها

پیش از شروع، باید اطمینان حاصل کنید که موارد زیر را در اختیار دارید:

  • یک سرور مجازی با سیستم‌عامل اوبونتو همراه با یک کاربر غیر روت (non-root) که دسترسی sudo دارد و همچنین شامل یک فایروال فعال است. برای راه‌اندازی اولیه سرور و پیکربندی این موارد، راهنمای نحوه راه‌اندازی اولیه سرور مجازی با اوبونتو را دنبال کنید.
  • آشنایی با خط فرمان لینوکس. اگر نیاز به یک مرور کلی یا آموزش اولیه در این زمینه دارید، می‌توانید از راهنمای خط فرمان لینوکس استفاده کنید.
  • اجرای دستور sudo apt-get update در ترمینال Ubuntu برای اطمینان از دریافت آخرین نسخه‌ها و به‌روزرسانی‌های امنیتی نرم‌افزارهای موجود در repositoryهای سیستم.

این دستورالعمل‌ها برای جدیدترین نسخه‌های اوبونتو (Ubuntu 24.04 و Ubuntu 22.04 و Ubuntu 20.04) معتبر هستند. اگر از نسخه‌های اوبونتو 18.04 یا قدیمی‌تر استفاده می‌کنید، توصیه می‌شود که به نسخه جدیدتری ارتقا دهید، زیرا اوبونتو دیگر از این نسخه‌ها پشتیبانی نمی‌کند.

در ادامه، بخوانید:

  • مرحله اول: نحوه تنظیم محیط پایتون روی سرور مجازی
  • مرحله دوم: نحوه ایجاد محیط مجازی (Virtual Environment)
  • مرحله سوم: نحوه نصب کتابخانه‌ها و پکیج‌های مورد نیاز
  • مرحله چهارم: نحوه نصب و راه‌اندازی MongoDB روی اوبونتو
  • مرحله پنجم: نحوه ایجاد برنامه FastAPI
  • مرحله ششم: نحوه اجرای برنامه FastAPI
  • مرحله هفتم: اجرای برنامه با استفاده از پلتفرم Docker لیارا (اختیاری)
  • نتیجه‌گیری

مرحله اول: تنظیم محیط پایتون روی سرور مجازی

در این آموزش، از پکیج python3 برای اجرای دستورات استفاده خواهیم کرد. نسخه‌های جدید اوبونتو (Ubuntu) به‌صورت پیش‌فرض Python 3 را نصب دارند. برای بررسی نصب بودن آن، دستور زیر را اجرا کنید:

python3 --version

اگر خطایی مشاهده کردید، بسته را با دستور زیر نصب/بازنصب کنید:

sudo apt-get install python3

سپس، برای نصب ایمن پکیج‌های پایتون و وابستگی‌ها، pip را نصب کنید:

sudo apt-get install python3-pip  

مرحله دوم: نحوه ایجاد محیط مجازی (Virtual Environment)

اگر از نسخه‌های قدیمی‌تر اوبونتو (قبل از نسخه 24.04) استفاده می‌کنید، ساخت محیط مجازی اجباری نیست، اما برای جداسازی وابستگی‌های پروژه، این کار توصیه می‌شود.

از Python 3.11 و pip 22.3 به بعد، بر اساس PEP 668، محیط‌های پایه پایتون به‌عنوان «externally managed» علامت‌گذاری می‌شوند. این به آن معناست که تنها در محیط‌های مجازی (Virtual Environments) میتوانید از pip برای نصب پکیج‌ها استفاده کنید.

در این مرحله، یک محیط مجازی برای پروژه خود ایجاد کنید تا وابستگی‌ها به‌صورت جداگانه مدیریت شوند. دستورات زیر را در ترمینال اجرا کنید:

sudo apt-get install python3-venv  

با اجرای دستور فوق، پکیج موردنیاز برای ساخت محیط مجازی، برای‌تان نصب می‌شود. اکنون، کافیست با اجرای دستور زیر، یک محیط مجازی به نام fastapi-env ایجاد کنید:

python3 -m venv fastapi-env  

برای شروع کار در داخل محیط مجازی، باید آن را با اجرای دستور زیر، فعال کنید:

source fastapi-env/bin/activate

پس از فعالسازی، پیشوند محیط مجازی در ترمینال به‌صورت زیر نمایش داده میشود:

(fastapi-env) user@machine:~$

اکنون می‌توانید وابستگی‌های مورد نیاز پروژه (مانند FastAPI و کتابخانه‌های مرتبط با NoSQL) را در این محیط مجازی نصب کنید.

مرحله سوم: نحوه نصب کتابخانه‌ها و پکیج‌های موردنیاز

در این مرحله، پکیج‌ها و کتابخانه‌های ضروری برای ادامه آموزش را نصب خواهید کرد. ابتدا FastAPI (برای ساخت برنامه) و uvicorn (برای اجرای سرور) را نصب کنید:

pip install fastapi uvicorn  

در این آموزش از MongoDB به‌عنوان پایگاه‌داده NoSQL استفاده میشود. برای تعامل با MongoDB در FastAPI، کتابخانه motor (یک درایور asynchronous در پایتون برای 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 برقرار شده و مسیرهای مربوط به پیش‌بینی AI، تعریف می‌شوند. در این مسیرها، ورودی‌ها اعتبارسنجی می‌شوند.

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

توضیح عملکرد این برنامه:

  • مدل رگرسیون خطی (Linear Regression Model) از scikit-learn: این مدل، خروجی را بر اساس یک ویژگی ورودی پیش‌بینی می‌کند.
  • مدل ورودی از Pydantic: این مدل، ساختار ورودی مورد انتظار برای endpoint پیش‌بینی را تعریف می‌کند. در اینجا، ورودی باید از نوع عدد اعشاری (float) باشد.
  • مسیرهای MongoDB: مسیرهای /items/ و POST /items/ به شما این امکان را می‌دهد که آیتم‌ها را از پایگاه داده MongoDB بازیابی کرده و وارد کنید.

مرحله ششم: نحوه اجرای برنامه FastAPI

برای اجرای موفقیت‌آمیز این برنامه، باید کتابخانه‌ها و پکیج‌های مورد استفاده در برنامه را نصب کنید:

pip install pydantic scikit-learn numpy

سپس از دستور زیر برای اجرای برنامه استفاده کنید:

uvicorn main:app --reload

خروجی این دستور به شکل زیر خواهد بود:

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 برای فراخوانی endpoint که پیش‌بینی را بر اساس ورودی شما انجام می‌دهد استفاده کنید:

curl -X POST "http://127.0.0.1:8000/predict/" -H "Content-type: application/json" -d '{"feature": 3}'

مرحله هفتم: اجرای برنامه با استفاده از پلتفرم Docker لیارا (اختیاری)

شما می‌توانید برنامه خود را کانتینر کنید و آن را با استفاده از docker لیارا، اجرا کنید. کانتینری کردن برنامه شما فرآیند استقرار را ساده‌تر می‌کند و برنامه شما را برای استقرار، مقیاس‌پذیری، و نگهداری آسان‌تر می‌کند.

بیشتر بخوانید: پلتفرم Docker در لیارا

نتیجه‌گیری

در این آموزش، یاد گرفتید که چگونه یک برنامه FastAPI با MongoDB راه‌اندازی کنید و یک اپلیکیشن ساده مبتنی بر هوش مصنوعی بسازید که قادر به ذخیره و بازیابی پیش‌بینی‌های ورودی است.

ترکیب FastAPI و یک پایگاه داده NoSQL محیطی قدرتمند و انعطاف‌پذیر برای ساخت و مقیاس‌پذیری برنامه‌های مبتنی بر هوش مصنوعی ارائه می‌دهد.

سرور مجازی لیارا یک پلتفرم مطمئن و مقیاس‌پذیر برای استقرار برنامه‌های مدرن مانند FastAPI و سایر فناوری‌های مرتبط با هوش مصنوعی و وب است. این سرویس به شما امکان می‌دهد تا به راحتی برنامه‌های مبتنی بر پایتون، Node.js و سایر فریم‌ورک‌های محبوب را راه‌اندازی کنید و از ابزارهای پیشرفته برای مدیریت، نظارت و مقیاس‌پذیری استفاده نمایید. با استفاده از سرور مجازی لیارا، می‌توانید استقرار برنامه‌های خود را به سرعت انجام داده و در عین حال از امنیت، عملکرد بالا و پشتیبانی فنی حرفه‌ای بهره‌مند شوید.

همچنین بخوانید: نحوه نصب انجین ایکس، MySQL و پی اچ پی (LEMP) بر روی سرور مجازی لینوکس

call
تلفن واحد فروش: ۳۳۵۵۷۶۱۹-۰۲۵ (روزهای کاری ۹ الی ۱۷)