Как настроить приложение Fast API с базой данных NoSQL

Введение

При разработке приложений на Python, FastAPI является одним из лучших выборов для создания высококачественных решений. Он предлагает быстрые скорости, простоту и поддержку асинхронного программирования, что делает его идеальным для разработки современных, масштабируемых приложений.
В этом учебнике мы вас проведем по процессу установки приложения FastAPI с NoSQL-базой данных. Что касается хранения и управления данными, NoSQL-базы данных предлагают гибкость и масштабируемость, что делает их отличным fit для приложений, которые требуют обрабатывать различные и сложные структуры данных.

Предупреждения

Перед началом работы необходимо убедиться, что у вас есть следующее:

  • Сервер с установленной системой Ubuntu, неRoot-пользователь с правами sudo и активной firewall. Подробности установки смотрите в нашем руководстве по настройке начального сервера. Убедитесь, что работаете с поддерживаемой версией Ubuntu.
  • Знакомство с командной строкой Linux. Для введения или обновления знаний о командной строке вы можете просмотреть это руководство Linux command line primer.

  • Запустите sudo apt-get update в терминале Ubuntu, чтобы убедиться, что ваша система имеет последние версии и обновления безопасности для программного обеспечения, доступного из репозиториев, настроенных в вашей системе.

Эти инструкции актуальны для последних версий Ubuntu: Ubuntu 24.04, Ubuntu 22.04 и Ubuntu 20.04. Если вы используете версию Ubuntu <= 18.04, мы рекомендуем вам обновиться до более свежей версии, так как Ubuntu больше не обеспечивает поддержку для этих версий. Эта коллекция руководств поможет вам в обновлении вашей версии Ubuntu.

Шаг 1 – Настройте среду Python на вашей машине

Во время этого руководства мы будем использовать пакет python3 для выполнения команд. Последние версии Ubuntu идут с установленным Python 3, чтобы проверить его установку, выполните следующую команду:

python3 --version

Если это приводит к ошибке, вы можете установить/переустановить пакет, выполнив:

sudo apt-get install python3

Далее вам нужно установить pip, чтобы устанавливать пакеты Python и их зависимости безопасным способом.

sudo apt-get install python3-pip

Шаг 2 – Создайте виртуальную среду

Если вы используете версию Ubuntu < 24.04, вам не требуется создавать виртуальную среду, но это хорошая практика изолировать зависимости вашего проекта.

С Python 3.11 и pip 22.3 вводится новый PEP 668, который определяет маркировку базовых средств Python как “внешне управляемые”, что意味着 вы не сможете успешно установить пакеты с помощью pip, unless you are working inside a virtual environment.

В этом шаге вы создадите виртуальную среду для вашего проекта, которая изолирует зависимости вашего проекта, чтобы предотвратить возможные конфликты между различными версиями пакетов. Execute the following set of commands in the terminal:

sudo apt-get install python3-venv

This will install the required venv package needed to create a virtual environment.

python3 -m venv fastapi-env

This command will create a virtual environment fastapi-env inside your working directory. To start working inside this environment, you need to activate it.

source fastapi-env/bin/activate

Upon successful execution, you will see the terminal prompt prefixed like this:

(fastapi-env) user@machine:~$

Now, you can begin installing the required dependencies inside this virtual environment.

Step 3 – Install Required Libraries and Packages

In this step, you will be installing a few packages and libraries that are required to successfully follow this tutorial.

Давайте начнем с установки fastapi, который обязателен для создания вашего FastAPI-приложения, и uvicorn, который требуется для запуска FastAPI-приложения.

pip install fastapi uvicorn

В этом учебнике мы будем использовать MongoDB в качестве NoSQL-базы данных. Чтобы взаимодействовать с MongoDB в вашем FastAPI, вам нужно установить motor, который является асинхронным Python-драйвером для MongoDB.

pip install motor

Шаг 4 – Установка и настройка MongoDB на Ubuntu

Для установки MongoDB на вашей машине Ubuntu выполните следующий набор команд в терминале:

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

Это поможет вам получить最新 Updates после настройки 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

Это открывает пустой текстовый редактор. Здесь напишите логику подключения к базе данных.

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

В текстовом редакторе напишите логику:

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()


# простой набор данных и модель
x = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 6, 8, 10])

model = LinearRegressions()
model.fit(x, y)


# определите модель Pydantic для проверки ввода
class InputData(BaseModel):
  feature: float


# маршрут_1 для предсказания вывода на основе входного признака
@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))


# маршрут_2 для взаимодействия с MongoDB
@app.get("/items/")
async def get_item():
  items = []
  async for item in collection.find():
    items.append(item)
  return items


# маршрут_3 для добавления нового элемента в 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 Model: Это определяет ожидаемую структуру ввода для конечной точки предсказания. В этом случае, это float.
  • Маршруты MongoDB: Маршруты /items/ и POST /items/ позволяют вам извлекать и вставлять элементы в вашу коллекцию MongoDB.

Шаг 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

, , , ,

В этом руководстве вы научились успешно настроить FastAPI-приложение с MongoDB, создав простое AI-ориентированное приложение, способное сохранять и извлекать входные прогнозы.

Заключение

Сочетание FastAPI и NoSQL-базы данных предлагает мощную и гибкую среду для создания и масштабирования AI-ориентированных приложений.

Разверните FastAPI-приложение с использованием Docker Compose

Вы можете контейнеризовать свое приложение и запустить его с помощью docker-compose. Контейнеризация вашего приложения упрощает процесс развертывания, делая ваше приложение проще для развертывания, масштабирования и обслуживания. Чтобы определить ваше приложение как Dockerfile, следуйте указанным в шагам .

Source:
https://www.digitalocean.com/community/tutorials/set-up-fastapi-app-with-nosql-db