Развертывание приложений Django в Heroku из GitHub

2 min


Вступление

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

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

В этой статье мы расскажем, как развернуть простое приложение Django в конвейере Heroku. Он нацелен на существующих разработчиков Python и предполагает базовое понимание настройки и запуска приложения Django.

Предпосылки

Для этого поста нам понадобится:

  • Свободный уровень Аккаунт Heroku,
  • Python 3+ и Virtualenv установлены
  • Гит установлен и учетная запись GitHub.

Демо-приложение

Начальная загрузка приложения Django

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

$ virtualenv --python=python3 env --no-site-packages
$ source env/bin/activate
$ pip install django gunicorn
$ django-admin startproject plaindjango

Если все идет хорошо, у нас должна быть запущена следующая целевая страница на нашем локальном сервере:

загрузчик приложения django

На данный момент структура папок нашего проекта:

$ cd plaindjango && tree .
.
├── manage.py
└── plaindjango
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

1 directory, 6 files

Перед развертыванием в Heroku нам необходимо внести некоторые изменения. Во-первых, нам нужно изменить ALLOWED_HOSTS установка в нашем plaindjango/settings.py чтобы:

ALLOWED_HOSTS = ['*']

Этот параметр определяет хосты или домены, которые может обслуживать наше приложение Django. Это мера безопасности против Атаки HTTP-заголовка, но так как наш простой демонстрационный проект, мы разрешим всем хостам, добавив '*' в списке.

Следующее изменение, которое нам нужно сделать, это указать папку для наших статических файлов через STATIC_ROOT установка:

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

Когда Heroku развертывает наше приложение, оно запускает команду django-admin collectstatic, который связывает и сохраняет все статические файлы в указанной папке. Эта папка будет в корневом каталоге нашего проекта.

Подготовка приложения к развертыванию

Когда наше приложение Django готово, Heroku требует, чтобы мы включили следующие файлы в корень нашего проекта, чтобы он мог быть готов к развертыванию:

  1. runtime.txt

Цель этого файла – указать версию Python, которая будет использоваться для запуска нашего проекта. В нашем случае файл будет просто содержать:

python-3.7.6
  1. Procfile

Этот файл определяет команды, которые будут выполнены при запуске программы.

При настройке мы установили Gunicorn («Зеленый Единорог»), который является чистым Python WSGI (Интерфейс шлюза веб-сервера) для UNIX.

В то время как Django поставляется со своим собственным сервером WSGI, наш Профиль скажет Heroku использовать Gunicorn для обслуживания нашего приложения. Содержимое этого файла будет:

web: gunicorn plaindjango.wsgi:application --log-file -

Эта строка говорит Heroku, что наша web процесс или приложение, которое будет запущено с помощью gunicorn, Gunicorn затем будет использовать файл WSGI нашего проекта для запуска нашего сервера приложений.

  1. requirements.txt

Наконец, нам нужно requirements.txt файл, который определяет требования нашего приложения Django. Мы можем создать это в нашей виртуальной среде, выполнив следующую команду:

$ pip freeze > requirements.txt

Окончательная структура папок нашего приложения Django, содержащая дополнительные файлы, теперь будет такой:

$ tree .
.
├── Procfile
├── manage.py
├── plaindjango
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── requirements.txt
└── runtime.txt

1 directory, 9 files

С этими файлами наше приложение готово для Heroku.

Развертывание в Heroku через GitHub

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

Наш код готов к развертыванию, поэтому мы можем создайте репозиторий GitHub и нажмите наш код.

Для справки, вот пример приложения Django на GitHub это готово к развертыванию на Heroku.

Когда мы будем работать над GitHub, давайте отправимся в Heroku и создадим новый конвейер, используя кнопку «New» в верхней правой части панели инструментов Heroku.

Мы предоставляем имя нашего конвейера и репозиторий GitHub для подключения к:

создание джанго трубопровода

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

Это означает, что через Heroku мы можем одновременно развертывать наш код в наших производственных, промежуточных и средах разработки, все из GitHub.

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

Например, код в нашей «основной» ветке будет развернут в производственной среде, «промежуточная» ветвь в нашей промежуточной среде и ветвь «dev» в нашей среде разработки.

Это дает нам видимость нашего проекта на нескольких этапах, улучшая нашу доставку.

Трубопроводы Heroku имеют функцию «Просмотр приложений», которая позволяет нам развертывать Тянуть запросы как отдельные приложения. С этим включением мы можем проверять работу в запросах на извлечение без необходимости локального извлечения изменений и их тестирования.

Трубопровод Героку

Это вид нашего недавно созданного конвейера для нашего приложения на GitHub:

целевая страница трубопровода

Конвейер по умолчанию имеет два этапа и раздел для включения просмотра приложений. Поскольку весь наш код в настоящее время находится в «основной» ветке, давайте продолжим и развернем ветку, нажав «Добавить приложение» на этапе производства:

создание производственного приложения

Heroku позволяет нам добавлять существующие приложения в конвейер или создавать новые. Поскольку это новый конвейер, мы создадим новое приложение под названием plaindjango-production это будет наша производственная среда.

Это приводит к:

готовое производственное приложение

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

выберите филиал

Как только мы нажмем «Развернуть», Heroku извлечет наш код из ветки «master» и развернет его. Мы можем наблюдать за ходом развертывания, просматривая журналы, и после развертывания приложения мы получим ссылку на наше работающее приложение:

успешные журналы

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

развертывание производства

Мы успешно развернули наше производственное приложение Django в Heroku через GitHub. Для создания приложения для нашей промежуточной среды выполняются те же действия, что и для основной среды.

Мы начнем с создания «промежуточной» ветки на GitHub через терминал:

$ git checkout -b staging && git push origin staging

Наконец, приложение добавляется в проект, и создается запрос на извлечение из «промежуточной» ветви в «главную».

Запрос тяги можно увидеть здесь на GitHubи вот результат на нашем конвейере Heroku:

вытащить запрос

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

изменения запроса извлечения в реальном времени

Наш запрос извлечения успешно развернут, и мы можем просмотреть его перед тем, как объединить изменения в master. С активированными автоматическими развертываниями Heroku развернет наши изменения, как только мы объединим запрос на извлечение с основной веткой, и изменения начнут действовать автоматически.

Вывод

Наше приложение Django было развернуто в Heroku из GitHub с использованием конвейера. Хотя это не единственный способ развертывания приложения Django в Heroku, он наиболее подходит для совместного проекта.

Контейнерные приложения могут быть развернуты в Heroku путем создания образов Docker и публикации их в Dockerhub или в собственном реестре контейнеров Heroku. Более подробную информацию о развертывании Dockerized приложений на Heroku можно найти в официальная документация, Heroku также предоставляет платформу Git, которую можно использовать для развертывания приложений в сочетании с их инструментом CLI.

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

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

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

Готовый к Heroku проект Django можно найти здесь на GitHub а также открытый запрос извлечения, который также был развернут.


0 Comments

Ваш адрес email не будет опубликован. Обязательные поля помечены *