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

Введение Heroku [https://www.heroku.com/] - это облачная платформа, предоставляющая услуги хостинга. Он поддерживает несколько языков программирования, включая PHP, Node.js и Python. Это платформа как услуга (PaaS), которая позволяет вам управлять приложениями веб-сайтов, одновременно заботясь о ваших серверах, сетях, хранилище и других облачных компонентах. В этой статье мы рассмотрим, как развернуть приложение Django на Heroku с помощью Git. Вы можете выполнить те же действия и развернуть приложение.

Вступление

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

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

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

Предпосылки

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

  • Git
  • Учетная запись Heroku и интерфейс командной строки
  • Приложение Django

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

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

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

Аккаунт Heroku

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

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

 $ 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 - это файл с именем Procfile без расширения файла, помещенный в корень вашего приложения. В нем перечислены типы процессов в приложении, и каждый тип процесса является объявлением команды, которая выполняется при запуске контейнера / динамометрической станции этого типа процесса.

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

 $ pip install django gunicorn 

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

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

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

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

Runtime.txt

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

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

 python-xxx 

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

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

Это дополнительная мера безопасности в Django для предотвращения атак HTTP-заголовка хоста, разрешая обслуживание сайта только на хосте / доменах, которые добавлены в список ALLOWED_HOSTS Если Debug = True и ALLOWED_HOSTS - [] то по умолчанию разрешен 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 

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

 $ pip install whitenoise 

Мы уже настроили gunicorn , давайте добавим конфигурацию для whitenoise и 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'), 
 ) 
  • Добавьте WhiteNoise в MIDDLEWARE сразу после SecurityMiddleware который должен быть наверху:

     MIDDLEWARE = [ 
     'django.middleware.security.SecurityMiddleware', 
     'whitenoise.middleware.WhiteNoiseMiddleware', 
    
     'django.contrib.sessions.middleware.SessionMiddleware', 
     'django.middleware.common.CommonMiddleware', 
     'django.middleware.csrf.CsrfViewMiddleware', 
     'django.contrib.auth.middleware.AuthenticationMiddleware', 
     'django.contrib.messages.middleware.MessageMiddleware', 
     ] 
    
  • Добавьте STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' в свой 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) 

Requirements.txt

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 

Это означает, что для вашего приложения был создан репозиторий Git в облаке Heroku. 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 размещенный на 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' 

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

  • Ваш STATICFILES_DIRS пуст в settings.py или настроен неправильно.
  • В вашем static каталоге нет файлов для отслеживания git Вы можете добавить любой временный файл в свой static каталог, чтобы он работал.

Перенести базу данных

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

 $ heroku run python manage.py migrate 

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

Добавление собственного доменного имени

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

список приложенийheroku{.ezlazyload}

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

настройки доменаheroku{.ezlazyload}

  • Нажмите на Добавить домен, где вы сможете добавить свое доменное имя.

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

Заключение

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

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

comments powered by Disqus