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









