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

Как развернуть приложение Django в Heroku с помощью Git CLI

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

Автор оригинала: Muhammad Hashir Hassan.

Вступление

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

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

Вы можете выполнить те же действия и развернуть приложение с GitHub, если оно там размещено.

Предпосылки

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

  • Мерзавец
  • Учетная запись Heroku и НАЖМИТЕ кнопку
  • Приложение Django

Интерфейс командной строки Heroku (CLI) позволяет легко создавать приложения Heroku и управлять ими непосредственно из терминала. Это неотъемлемая часть использования Heroku.

Чтобы установить Heroku CLI (a.k.a. Heroku Toolbelt ), пожалуйста, следуйте инструкциям на официальном сайте .

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

Учетная запись Heroku

Как только все эти вещи будут установлены, следующим шагом будет создание бесплатной учетной записи Heroku here , если у вас еще нет учетной записи.

После записи в терминал следующего:

$ heroku login

Терминал должен отображать сообщение типа:

heroku: Press any key to open up the browser to login or q to exit:

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

Logged in as [email protected]

Настройка приложения Django для Heroku

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

Профиль

Procfile – это файл с именем Procfile без какого-либо расширения файла, помещенного в корневой каталог вашего приложения. В нем перечислены типы процессов в приложении, и каждый тип процесса является объявлением команды, которая выполняется при запуске контейнера/dyno этого типа процесса.

Перед созданием Профиля вам необходимо установить django gunicorn в каталог вашего проекта:

$ pip install django gunicorn

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

Теперь создайте Профиль в родительском каталоге и добавьте следующую строку:

web: gunicorn yourdjangoweb.wsgi --log-file -

Замените ваш django web на фактическое название вашего проекта.

Замените || ваш django web || на фактическое название вашего проекта.

Создайте текстовый файл с именем runtime.txt в том же каталоге, что и файл Proc . Он сообщает Heroku, какую версию Python использует ваше приложение. Если вы не уверены в версии, введите python --version в терминале с активированной виртуальной средой Django.

Затем добавьте версию в runtime.txt :

python-x.x.x

Смотрите поддерживаемые версии Python на Heroku здесь .

Разрешенные Хосты

Это дополнительная мера безопасности в Django для предотвращения атак заголовков HTTP-хостов, позволяя обслуживать сайт только на хостах/доменах, которые добавлены в список ALLOWED_HOSTS . Если Debug и ALLOWED_HOSTS is [] то по умолчанию разрешен только localhost . Чтобы развернуть и обслуживать свое веб-приложение на Heroku, добавьте его в список:

ALLOWED_HOSTS = ['herokuappname.herokuapp.com']

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

ALLOWED_HOSTS = ['.herokuapp.com']

Вы также можете использовать [ ' * ' ] , чтобы разрешить все хосты. Более подробную информацию вы можете найти в документации .

Установка пакетов

Ниже приведены дополнительные пакеты, которые необходимо установить в нашей виртуальной среде.

Чтобы подключить нашу базу данных Django к Heroku, установите dj-database-url по телефону:

$ pip install dj-database-url

Поскольку Heroku использует базы данных Postgres, нам также нужен его адаптер для Python:

$ pip install psycog2

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

$ pip install whitenoise

Мы уже настроили gunicorn , давайте добавим конфигурацию для white noise и dj-database-url .

Настройка Статических файлов

Сначала добавьте базовые настройки для обслуживания статических файлов в любом проекте Django. Вы можете скопировать и вставить следующие настройки в свой settings.py :

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
PROJECT_ROOT   =   os.path.join(os.path.abspath(__file__))
STATIC_ROOT  =   os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'

# Extra lookup directories for collectstatic to find static files
STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static'),
)
  • Добавьте Белый шум в список MIDDLEWARE сразу после Security Middleware , который должен быть сверху:

  • Добавьте STATICFILES_STORAGE в свой settings.py .0

Настройка базы данных

Мы используем dj-database-url для настройки нашей базы данных. Добавьте эти строки в нижней части вашего settings.py :

import dj_database_url 
prod_db  =  dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(prod_db)

Мы используем || dj-database-url || для настройки нашей базы данных. Добавьте эти строки в нижней части вашего || settings.py ||:

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

Мы можем использовать pip freeze и передать вывод в requirements.txt файл для этого:

$ pip freeze > requirements.txt

Ваш requirements.txt должен включать в себя следующие:

whitenoise==5.2.0
dj-database-url==0.5.0
Django==3.0.9
gunicorn==20.0.4
psycopg2==2.8.5
pytz==2020.1

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

Подключите Приложение Heroku К Git

Теперь нам нужно создать приложение Heroku:

$ heroku create herokuappname

Он отобразит сообщение “готово” с двумя URL-адресами в этом направлении:

Creating ⬢ herokuappname... done
https://herokuappname.herokuapp.com/ | https://git.heroku.com/herokuappname.git

Это означает, что в Heroku cloud для вашего приложения был создан репозиторий Git. URL-адрес https://herokuappname.herokuapp.com/ будет использоваться для доступа к вашему приложению в любом месте, но нам все равно нужно сделать еще один шаг перед запуском нашего приложения, то есть нам нужно отправить наш код в репозиторий.

Инициализируйте пустой репозиторий в каталоге проекта:

$ git init
> Initialized empty Git repository in /herokuappname/.git/

Подключите свое приложение Heroku к пустому git репозиторию:

$ heroku git:remote -a herokuappname
> set git remote heroku to https://git.heroku.com/herokuappname.git

Добавление файлов в промежуточную область:

$ git add .

Зафиксируйте изменения/файлы:

$ git commit -m "first commit for all files"

Наконец, переместите проект в git repo, размещенный на Heroku:

$ git push master heroku

Если все пойдет хорошо, вы увидите такой результат:

Counting objects: 26, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (20/20), done.
Writing objects: 100% (26/26), 32.13 KiB | 0 bytes/s, done.
Total 26 (delta 1), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
.....
.....
remote: -----> Launching...
remote:        Released v1
remote:        https://herokuappname.herokuapp.com/ deployed to Heroku
remote: 
remote: Verifying deploy... done.
To https://git.heroku.com/herokuappname.git
[new branch]      master -> master

collectstatic Ошибка

Вы можете получить ошибку, связанную с collectstatic при запуске команды git push heroku master . Это связано с каталогом статических файлов, и вы можете обойти его с помощью следующей команды:

$ heroku config:set     DISABLE_COLLECTSTATIC=1  
Setting DISABLE_COLLECTSTATIC and restarting ⬢ herokuappname... done, v2  
DISABLE_COLLECSTATIC: 1

Он скажет Heroku не запускать команду collectstatic во время развертывания приложения. Вы можете запустить его позже, используя bower :

$ heroku run 'bower install --config.interactive=false;grunt prep;python manage.py collectstatic --noinput'

Это может произойти по многим причинам, включая, но не ограничиваясь ими:

  • Ваш СТАТИЧЕСКИЙ список FILES_DIRS пуст в settings.py или не настроен должным образом.
  • Ваш каталог static не содержит файлов для отслеживания git . Вы можете добавить любой временный файл в свой каталог static , чтобы он работал.

Перенос базы данных

Последний шаг-отразить ваши модели в базе данных Heroku, запустив миграцию:

$ heroku run python manage.py migrate

Вот и все, ваше приложение запущено и работает на heroku! Вы можете получить доступ к нему по адресу [appname].herokuapp.com . URL-адрес в вашем случае будет http://herokuappname.herokuapp.com/ .

Добавление пользовательского доменного имени

Каждое приложение на Heroku размещено на .herokuapp.com но вы можете изменить его на свое доменное имя, если оно у вас есть. Процесс прост:

список приложений heroku
  • Выберите Настройки на панели навигации и прокрутите вниз, чтобы найти раздел Домен :
настройки домена heroku
  • Нажмите на кнопку Добавить домен , где вы сможете добавить свое доменное имя.

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

Вывод

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

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