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

0 Акции
0
0
0
0

Введение

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

Предпосылки
  • Сервер под управлением Ubuntu с пользователем без прав root, обладающим привилегиями sudo и активным брандмауэром. .
  • Введение в командную строку Linux
  • Запустите команду sudo apt-get update в терминале Ubuntu, чтобы убедиться, что в вашей системе установлены последние версии и обновления безопасности для программного обеспечения, доступные в репозиториях, настроенных в вашей системе.

Эти инструкции актуальны для последних версий Ubuntu: Ubuntu 24.04, Ubuntu 22.04 и Ubuntu 20.04. Если вы используете версию Ubuntu <= 18.04, рекомендуем обновиться до последней версии, так как 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 для установки пакетов, если вы не работаете в виртуальной среде.

На этом этапе вы создадите виртуальную среду для своего проекта, которая изолирует его зависимости, чтобы избежать потенциальных конфликтов между разными версиями пакетов. Выполните в терминале следующий набор команд:

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 в 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

Это гарантирует получение вами последних обновлений после настройки ключей 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 обеспечивает мощную и гибкую среду для создания и масштабирования приложений на базе ИИ.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может понравиться