Как развернуть приложение FastAPI?

How to Deploy an FastAPI Application_
How to Deploy an FastAPI Application_

Хотя хостинг-провайдеров много, лишь некоторые из них предлагают Common Gateway Interface (CGI) или модуль mod_wsgi для поддержки Python-хостинга. Но среди разработчиков, принявших участие в опросе Stack Overflow Developer Survey 2023, контейнеризация с помощью Docker занимает лидирующие позиции в разработке и развертывании приложений.

Для Python-приложений, разработанных с использованием таких фреймворков, как FastAPI, развертывание через контейнерный сервис (Container-as-a-Service, CaaS) является таким же простым делом, как размещение кода на GitHub. В этом блоге вы научитесь докеризировать свое приложение FastAPI и развертывать его через CaaS.

Основные выводы

  • Docker и FastAPI – это сильный дуэт; они позволяют оптимизировать развертывание с включением зависимостей.
  • FastAPI превосходит все остальные в области асинхронных операций, проверки данных и OpenAPI, но не имеет достаточной поддержки со стороны сообщества и совместимости.
  • Back4app облегчает развертывание FastAPI, синхронизируя его с GitHub для автоматического обновления и предлагая облачную настройку базы данных.

Что такое FastAPI?

FastAPI – это легкий веб-фреймворк на Python с открытым исходным кодом для разработки RESTful API. Выпущенный в 2018 году, он поддерживает модель Pydantic и Starlette, что ставит его на один уровень производительности с Node.js и Golang. Фреймворк также является настраиваемым, что позволяет гибко проектировать кодовую базу.

Благодаря поддержке JSON Schema и подсказкам типов в Python версий 3.6 и выше, модель Pydantic позволяет FastAPI легко разбирать данные и проверять их во время выполнения.

Фреймворк Starlette вводит в FastAPI интерфейс шлюза асинхронного сервера (ASGI), который позволяет выполнять асинхронные операции в Python RESTful API и запускать код на ASGI-сервере Uvicorn.

Подобно Nodemon в Node.js, сервер Uvicorn слушает изменения в маршрутах API и заново инициирует время выполнения для каждого обновления.

Хотя только 7,42 % разработчиков, принявших участие в опросе Stack Overflow Developer Survey 2023, указали, что используют FastAPI, по данным GitHub, общее число пользователей FastAPI составляет 203 тыс. человек. С более чем 498 участниками и 190 релизами на момент написания статьи, FastAPI постоянно получает обновления и исправления.

Однако постановка FastAPI на один уровень производительности с Golang и Node.js до сих порвызывает споры среди разработчиков.

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

Преимущества FastAPI

  • Поддержка асинхронных операций: Помимо стандартных синхронных операций Python, FastAPI поддерживает объявление функций с использованием async/await. Благодаря Starlette, который также обеспечивает поддержку WebSocket. Это добавляет параллелизм в вашу программу, позволяя приложению выполнять другие операции в ожидании более медленных операций, таких как запросы к базе данных.
  • Поддержка валидации данных: Используя базовую модель Pydantic BaseModel, FastAPI применяет подсказки типов данных Python для сохранения строгости при разборе данных. Это предотвращает попадание неправильного типа данных в базу данных. Таким образом, в отличие от динамических моделей, требующих дополнительных библиотек проверки, в FastAPI проверка модели проста и легкодоступна.
  • Полностью стандартизированный: FastAPI соответствует спецификации OpenAPI для обслуживания HTTP API в Интернете, что позволяет потребительским приложениям и клиентам легко понять API, который они хотят использовать. Под капотом он также использует декларацию JSON Schema, чтобы убедиться, что тестовые и реальные данные, переданные пользователем, являются достоверными, прежде чем отправить их в базу данных.
  • Гибкость: В отличие от Django, FastAPI не ограничивает разработчика определенным архитектурным стандартом кодовой базы. Вместо этого он оставляет это решение на усмотрение разработчика. Таким образом, вы можете создавать свою кодовую базу с гибкими соглашениями об именовании и объявлять общие настройки приложения и наборы модульных тестов прямо на ходу. Модулизация кода и разделение забот (SOC) также просты.

    А если вы используете объектно-ориентированное программирование (ООП), что мы рекомендуем, вы можете легко компоновать свои модели в классы конечных точек. Добавление конечных точек API в маршруты также не составит труда.
  • Его легко освоить: Несмотря на меньшее сообщество пользователей, чем у таких фреймворков, как Flask и Django, FastAPI выделяется обширной документацией и учебниками. Имея опыт разработки, в частности на Python или JavaScript, вы сможете легко освоить его. Его общая простота и гибкость способствуют ускорению процесса разработки.

Ограничения

  • Низкая поддержка сообщества: У FastAPI не так много пользователей, как у Django или Flask. Он все еще относительно новый. Поэтому поддержка сообщества ниже; это может быть сложным, особенно для начинающих разработчиков.
  • Ограниченная совместимость версий: FastAPI поддерживает только более поздние версии Python, начиная с Python 3.6 и выше. Поэтому машины или серверы с Python более ранних версий, чем 3.6, должны обновиться, чтобы успешно установить и запустить FastAPI.

Варианты развертывания FastAPI

Инфраструктура-как-сервис (IaaS) и контейнер-как-сервис (CaaS) – это масштабируемые облачные инфраструктуры для развертывания приложений.

Хотя вы можете развернуть приложение FastAPI на виртуальном частном сервере (VPS) или виртуальном хостинге, ни один из них не является таким масштабируемым, как IaaS или CaaS.

IaaS

IaaS – это платформа, предоставляющая вычислительные ресурсы по требованию в облаке. Она предоставляет все виртуализированные ресурсы, необходимые для создания сервера развертывания для вашего приложения, обычно на условиях оплаты по факту.

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

CaaS

CaaS – это платформа как услуга (PaaS), позволяющая развернуть приложение в облаке в виде контейнеров. В отличие от IaaS, CaaS управляет всеми вычислительными ресурсами, необходимыми для размещения вашего приложения под капотом.

К ним относятся среда выполнения контейнеров, оркестровка, хранение, балансировка нагрузки и многое другое. Таким образом, вы можете сосредоточиться на создании приложения, а не на управлении инфраструктурой.

Поскольку вы развертываете приложение в виде контейнера, это позволяет легко интегрировать CI/CD, не заботясь о технических конфигурациях. Это делает выпуск и обновление приложений более быстрым.

Процесс развертывания FAST API

Давайте пройдем процесс развертывания шаг за шагом, начиная с предварительных условий. Но поскольку мы будем разворачивать наше FastAPI-приложение с помощью контейнеров Back4App, давайте быстро посмотрим, что они собой представляют, прежде чем продолжить.

Обзор контейнеров Back4app

Back4App Containers – это облачная платформа, позволяющая быстро развертывать докеризованные приложения в облаке. Платформа синхронизируется с вашим репозиторием GitHub и автоматически обновляет развертывание каждый раз, когда вы выпускаете релиз. Таким образом, она позволяет избежать ручного обновления контейнеров и простоев сервера.

С Back4App Containers вам нужно только выложить свой код и последующие релизы на GitHub со своей локальной машины, а платформа сама управляет оркестровкой образов контейнеров. Back4App также предлагает отслеживание развертывания в реальном времени и ведение журналов в реальном времени.

Таким образом, вы можете отследить этапы развертывания и определить точку отказа – если таковая имеется. А если ваше приложение падает во время выполнения, что может случиться с таким интерпретируемым языком, как Python, ведение журнала в реальном времени поможет вам отследить ошибки в консоли и быстро их исправить.

Вот ключевые особенности Back4App:

  • Легко синхронизируйте приложение Back4App с репозиторием кодовой базы на GitHub.
  • Разверните свое приложение в облаке с помощью контейнера Back4App, разместив код и последующие обновления в своем репозитории GitHub.
  • Все, что вам нужно, – это Dockerfile. Back4App выполнит установку всех зависимостей за вас.
  • Шифруйте переменные окружения во время развертывания и последующих выпусков.
  • Отслеживайте развертывания в режиме реального времени и управляйте откатами.
  • Отслеживайте историю использования приложений с помощью журналов в режиме реального времени.
  • Развертывание мобильных и веб-приложений в облаке

Загрузите и установите Python

В этом блоге мы будем использовать Python 3.10.6. Но вы можете использовать любую версию Python не ранее 3.6. Зайдите на сайт python.org, чтобы скачать и установить последнюю совместимую версию Python для вашей ОС – если вы еще не сделали этого. В противном случае проигнорируйте этот раздел.

Загрузка целевой страницы Python

После загрузки щелкните по установочному файлу и следуйте подсказкам на экране, чтобы установить Python на локальную машину.

Убедитесь, что вы отметили опцию Add python.exe to PATH, чтобы добавить Python в путь к системным переменным; это сделает его исполняемым через командную строку.

Меню установки Python

Если вы используете Mac, то по умолчанию он уже поставляется с Python 2.7. Вы можете обновить его до последней версии с помощью Homebrew через терминал:

brew install python3

Выполните следующую команду в терминале, чтобы проверить версию Python.

python --version

Активируйте виртуальную среду Python и установите FastAPI

Затем создайте новый каталог проекта и откройте командную строку для этой папки. Затем активируйте виртуальную среду Python с помощью venv.

Этот пакет поставляется вместе с Python и не требует установки. Он позволяет управлять зависимостями Python изолированно, а не устанавливать их глобально.

Выполните следующую команду в терминале для создания виртуальной среды, заменив env_name на имя предпочитаемой среды.

py -m venv env_name

Выполните следующую команду, чтобы активировать виртуальную среду.

.\env_name\Scripts\activate

Установите FastAPI и Uvicorn

Следующим шагом будет установка фреймворка FastAPI и среды выполнения сервера Uvicorn в активную виртуальную среду. При этом также устанавливаются Pydantic и Starlette.

Создайте файл requirements.txt в корне проекта и укажите пакеты для установки, как показано ниже.

fastapi
uvicorn

Ниже приведена демонстрация в VSCode. Вы можете добавлять в этот файл дополнительные зависимости по мере необходимости.

VS код с требованиями

Выполните следующую команду в терминале, чтобы установить перечисленные зависимости. Убедитесь, что виртуальная среда по-прежнему активна.

pip install install -r requirements.txt

Команда устанавливает указанный пакет, как показано ниже.

Установка зависимостей с помощью командной строки

После установки обновите файл requirements.txt с помощью следующей команды:

pip freeze > requirements.txt

Приведенная выше команда переписывает файл requirements.txt с установленными зависимостями, включая их правильные номера версий. Убедитесь, что вы делаете это каждый раз, когда устанавливаете новую зависимость в виртуальную среду.

После обновления файл requirements.txt выглядит следующим образом :

Введение в проект

Мы напишем простое FastAPI-приложение “Hello World” и развернем его с помощью бесплатных контейнеров Back4App. Не беспокойтесь, если ваш проект сложный. Развертывание займет один и тот же шаг, и вы также получите бесплатный ежемесячный аптайм независимо от этого.

Однако если ваше приложение ежедневно обрабатывает большое количество запросов, возможно, вам захочется обновить его после развертывания, чтобы обеспечить посетителям более плавный пользовательский опыт без простоев.

Код приложения

Создайте новую директорию router в корневой папке проекта и создайте файл main.py в этой директории. Этот файл управляет конечными точками API вашего приложения и маршрутизатором. Перейдите к следующему разделу, если у вас уже есть проект для развертывания.

Вот код “Hello World”:

from fastapi import FastAPI, APIRouter
import uvicorn

app = FastAPI()
class HelloWorld():
    def read_hello(self):
        return {"data": "Hello World"}
router = APIRouter()
router.add_api_route('/api/v2/hello-world', 
endpoint = HelloWorld().read_hello, methods=["GET"])
app.include_router(router)

if __name__ == "__main__":
   uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=True)

Чтобы запустить сервер uvicorn и протестировать конечную точку API hello-world, выполните файл main.py в командной строке:

python main.py

Это запускает сервер разработки на указанном порту 8000.

Поскольку это GET-запрос, мы можем протестировать его непосредственно в любом веб-браузере. Ниже приведен результат.

Докеризация приложения

Затем создайте Dockerfile в корневой папке проекта. Это можно сделать, создав новый файл в VS Code и назвав его Dockerfile.

После создания введите следующие команды для создания образа Docker:

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "router.main:app", "--host", "0.0.0.0", "--port", "8000"]

Отправить на GitHub

Зайдите в свой аккаунт на GitHub и перейдите в раздел Repositories. Создайте новый репозиторий, нажав кнопку New в правом верхнем углу.

Зайдите в свой аккаунт на GitHub и перейдите в раздел Repositories. Создайте новый репозиторий, нажав кнопку New в правом верхнем углу.

Если вы уже разместили свой код на GitHub, добавьте Dockerfile к копии на локальной машине и повторно разместите его в репозитории.

Новое репо GitHub

Дайте репозиторию имя и нажмите кнопку Создать репозиторий в правом нижнем углу.

Затем инициализируйте локальный репозиторий с помощью команды init, как показано на рисунке:

git init

Игнорируйте папку venv и файл .env с помощью .gitignore, чтобы избежать их размещения в вашем репозитории. Для этого создайте файл .gitignore в корневой папке проекта и укажите папки и файлы, которые вы хотите игнорировать, как показано ниже.

Выполните следующие команды в терминале одну за другой, чтобы отправить код в репозиторий.

1. git add .
2. git commit -m "commit message"
3. git branch -m main
4. git remote add origin <URL of the created repository>
5. git push -u origin main

Развертывание приложения с помощью контейнера Back4App

Если вы еще не сделали этого, создайте новую учетную запись Back4App. Чтобы ускорить процесс, воспользуйтесь возможностью входа через Google или GitHub .

Back4app Регистрация

Войдя в систему, нажмите на виджет Build new app.

Новая панель приложений Back4App

Перейдите в раздел “Контейнеры как служба”.

Контейнеры как сервис

На следующей странице нажмите Импортировать GitHub Repo. При появлении запроса предоставьте GitHub разрешение на авторизацию Back4App.

В разделе Доступ к репозиториям в открывшемся модале нажмите Выбрать репозитории. Выберите репозиторий, содержащий проект, который вы хотите развернуть, и нажмите Сохранить.

Back4App автоматически синхронизирует выбранный репозиторий. После перенаправления в Back4App нажмите Select справа от добавленного репозитория GitHub. Затем заполните поле App Name (Имя приложения ) предпочтительным именем приложения.

Конфигурация поля имени приложения

Если ваше приложение FastAPI имеет секреты, замаскированные в файле .env, нажмите Переменные среды, чтобы ввести переменные среды. Нажмите Добавить переменную и введите имя переменной, используя заглавные символы.

Убедитесь, что вы используете то же соглашение об именовании, что и переменные в .env-файле вашего проекта, чтобы избежать ошибок в именах.

Этот шаг шифрует и добавляет значения переменных в развертывание. Наконец, нажмите Create App, чтобы развернуть приложение FastAPI.

Экземпляр развертывания для приложения FastAPI работает, как показано ниже.

Чтобы просмотреть “живую” версию приложения, щелкните URL-адрес на левой боковой панели. Переход по адресу https://testapp-omisolaidowu.b4a.run/api/v2/hello-world в данном случае дает ожидаемый ответ.

Заключение

Одно дело – разработать приложение с помощью FastAPI Python. Но совсем другое дело – беспрепятственно развернуть его для обслуживания клиентов.

Кроме того, что CaaS помогает быстрее развертывать приложения, он еще и менее техничен. Хотя вы видели, как развернуть приложение FastAPI, это еще не все.

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

Если вам понравилась эта статья, ознакомьтесь с нашим руководством о том, как развернуть приложение Flask.

Что такое FastAPI?

FastAPI — это высокопроизводительный веб-фреймворк для разработки RESTFul API с использованием Python.

Как развернуть приложение FastAPI?

– Создайте Docker-образ для вашего проекта с помощью Dockerfile.
– Загрузите ваш код на GitHub.
– Войдите в ваш аккаунт Back4App и создайте новое приложение.
– Подключите вашу контейнерную инстанцию к репозиторию GitHub, содержащему целевой проект.
– Разверните ваше приложение FastAPI и посмотрите журналы развертывания в реальном времени.


Leave a reply

Your email address will not be published.