Рубрики
Без рубрики

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

В этой статье мы расскажем о развертывании приложения Django в конвейере Heroku из репозитория GitHub.

Автор оригинала: Robley Gori.

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

Вступление

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

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

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

Предпосылки

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

Демонстрационное Приложение

Загрузка приложения Django

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

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

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

приложение django bootstrap

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

$ 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 Header host attacks , но поскольку наш проект является простым демонстрационным проектом, мы разрешим все хосты, добавив '*' в список.

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

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

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

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

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

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

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

python-3.7.6
  1. Профиль

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

При настройке мы установили Gunicorn (‘Green Unicorn’), который является чистым Python WSGI (Web Server Gateway Interface) сервером для UNIX.

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

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

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

  1. Эта строка говорит Heroku, что наш

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

$ pip freeze > requirements.txt

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

$ tree .
.
├── Procfile
├── manage.py
├── plaindjango
│   ├── __init__.py
│   ├── wsgi.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 и создадим новый конвейер, используя кнопку “Новый” в правом верхнем углу панели управления Heroku.

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

создание конвейера django

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

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

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

Например, код в нашей ветви “master” будет развернут в производственной среде, ветвь “staging” – в нашей промежуточной среде, а ветвь “dev” – в нашей среде разработки.

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

Конвейеры Heroku имеют функцию под названием “Review Apps”, которая позволяет нам развертывать Pull Requests как автономные приложения. Если это включено, мы можем проверить работу в запросах на вытягивание без необходимости извлекать изменения локально и тестировать их.

Трубопровод Heroku

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

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

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

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

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

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

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

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

выберите ветвь

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

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

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

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

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

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

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

Наконец, в проект добавляется приложение и создается запрос на вытягивание из ветви “staging” в ветвь “master”.

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

развернут запрос на вытягивание

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

изменения запроса на вытягивание в реальном времени

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

Вывод

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

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

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

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

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

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