Развертывание Python-приложения FastAPI с YugabyteDB на Heroku

Заключительным этапом процесса разработки программного обеспечения является развертывание. Это когда мы делаем приложение доступным для пользователей, размещая его на сервере.
В своей последней статье я рассказывал о переносе приложения Python на управляемую YugabyteDB. Для эксперимента я использовал приложение JobBoard, и оно работало на моей локальной машине.
JobBoard — это веб-приложение для размещения вакансий. Вы можете создавать, обновлять и удалять вакансии, а также поддерживать регистрацию и аутентификацию пользователей.

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

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

Все эти требования могут быть устранены при использовании платформы PaaS. Операционное бремя, связанное с эксплуатацией платформы, обслуживанием и ремонтом базовой инфраструктуры, снимается. Это позволяет высвободить время для разработки, которая действительно повышает ценность!

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

Heroku — это облачная платформа (PaaS), которая позволяет разработчикам создавать, запускать, развертывать и управлять своими приложениями полностью в облаке. Большинство разработчиков приложений предпочитают Heroku, потому что он бесплатный, более простой и удобный для развертывания приложения с контролем версий.

Настройка учетной записи Heroku

С помощью Heroku вы можете с легкостью довести свое приложение от разработки до производства. Она предлагает бесплатный уровень для разработчиков, позволяющий размещать 550-1000 dyno (контейнеров приложений, используемых Heroku) часов в месяц. Он поддерживает несколько языков программирования, включая Java, Node.js, Scala, Clojure, Python, PHP и Go, а также несколько дополнительных функций.

После регистрации я установил Heroku CLI на свою локальную машину, чтобы создать приложение на платформе Heroku.

Создание приложения Heroku

Для создания приложения вам нужно войти в Heroku. Вы можете выбрать создание приложения Heroku из веб-панели или CLI.

Добавление конфигурации Heroku в приложение

Для того чтобы развернуть ваше приложение на Heroku, вам потребуется настроить несколько файлов — известные как Procfile и runtime.txt.

Procfile определяет команды, которые будут выполняться приложением при запуске. Файл runtime.txt используется для указания среды выполнения Python, на которой работает ваше приложение. Эти файлы должны быть помещены в корневой каталог приложения.

Создание Procfile

  1. Если у вас нет проекта на вашей машине, клонируйте репозиторий приложения JobBoard с GitHub.
  2. Создайте файл с именем Procfile в корневом каталоге (без расширений) и добавьте в него следующую команду.
web: cd backend && uvicorn --host 0.0.0.0 --port $PORT main:app
Войти в полноэкранный режим Выйти из полноэкранного режима

Эта команда предназначена для запуска приложения FastAPI. Здесь web — это тип процесса, поддерживаемый Heroku dyno, и он выполняет команду запуска, связанную с этим типом процесса.

Примечание: мне пришлось явно указать атрибут --host, потому что uvicorn по умолчанию устанавливает хост 127.0.0.1, а приложение Heroku пытается привязаться к localhost, что приводит к ошибке, поэтому 0.0.0.0.

Создание runtime.txt

По умолчанию новые Python-приложения на Heroku используют последнюю версию Python из поддерживаемых платформой runtime. Чтобы использовать определенную версию Python, необходимо указать ее в файле runtime.txt следующим образом.

python-3.10.4
Войти в полноэкранный режим Выйти из полноэкранного режима

Добавление requirements.txt в корневой каталог проекта

В процессе сборки приложения Heroku ищет requirements.txt в корневом каталоге. Если requirements.txt не будет найден в корневом каталоге, процесс сборки приложения завершится неудачно.

Для приложения JobBoard файл requirements.txt находится в папке /backend, поэтому давайте скопируем его в корневой каталог.

$ cp backend/requirements.txt .
Вход в полноэкранный режим Выход из полноэкранного режима

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

Развертывание приложения на Heroku

Heroku предлагает контроль версий приложения через git. При создании приложения (heroku create) Heroku также создает удаленный git-репозиторий для приложения. Это облегчает разработчикам откат приложения к предыдущим релизам в случае сбоя приложения.

Теперь сохраните новые добавленные файлы в репозиторий и отправьте их в Heroku следующим образом.

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

Вы можете проверить состояние вашего приложения, выполнив следующую команду:

Voila!!! 🎉 Ваше приложение запущено и работает в облаке!

Примечание: Если вы видите предупреждение no dynos running напротив имени вашего приложения, просто выполните эту команду: heroku ps:scale web=1.

После успешного завершения развертывания вы можете открыть и посмотреть на приложение.
Выполните следующую команду, чтобы открыть приложение из CLI:

$ heroku open
Войти в полноэкранный режим Выйти из полноэкранного режима

Это откроет ваше приложение в браузере.

Теперь, когда вы знаете, как развернуть Python-приложение на Heroku, вы можете изменять его конфигурацию, просматривать журналы, масштабировать его и пробовать дополнения.

В моем следующем блоге я расскажу, как подключить приложение Heroku к YugabyteDB Managed.

Оцените статью
devanswers.ru
Добавить комментарий