Заключительным этапом процесса разработки программного обеспечения является развертывание. Это когда мы делаем приложение доступным для пользователей, размещая его на сервере.
В своей последней статье я рассказывал о переносе приложения 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
- Если у вас нет проекта на вашей машине, клонируйте репозиторий приложения JobBoard с GitHub.
- Создайте файл с именем
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.