Введение
При разработке приложений на Python FastAPI выделяется как лучший выбор для создания высокопроизводительных решений. Он предлагает скорость, простоту и поддержку асинхронного программирования, что делает его идеальным для разработки современных масштабируемых приложений. В этом руководстве мы расскажем, как настроить приложение FastAPI с базой данных NoSQL. Базы данных NoSQL обеспечивают гибкость и масштабируемость при хранении и управлении данными, что делает их отличным ресурсом для приложений, которым необходимо управлять разнообразными и сложными структурами данных.
Предпосылки
- Сервер под управлением Ubuntu с пользователем без прав root, обладающим правами sudo, и включенным брандмауэром. Инструкции по настройке см. в нашем руководстве «Начало работы с сервером». Убедитесь, что вы используете поддерживаемую версию Ubuntu.
- Знакомство с командной строкой Linux. Для получения вводных или освежающих знаний о командной строке вы можете обратиться к этому руководству на сайте Linux Command Line Primer.
- Запустите команду sudo apt-get update в терминале 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-приложения, и Unicorn, необходимого для его запуска.
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: эта структура определяет ожидаемые входные данные для конечной точки прогнозирования. В данном случае это число с плавающей точкой.
- Маршруты 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.
Вы можете контейнеризировать свое приложение и запускать его с помощью docker-compose. Контейнеризация приложения упрощает процесс развертывания, облегчая развертывание, масштабирование и обслуживание приложения.
Результат
В этом уроке вы узнали, как успешно запустить приложение FastAPI с MongoDB, создав простое приложение на основе ИИ, способное хранить и извлекать входные прогнозы.
Сочетание FastAPI и базы данных NoSQL обеспечивает мощную и гибкую среду для создания и масштабирования приложений на базе ИИ.









