Автор оригинала: 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, чтобы подтвердить свою учетную запись. Более подробную информацию о добавлении доменов и поддоменов вы можете найти на этой странице .
Вывод
В этой статье мы развернули приложение Django на Heroku с пользовательским доменным именем, используя Git.
Помимо различных облачных сервисов, Heroku также предлагает одно из лучших времен работы сервера, круглосуточную работу и поддержку команды безопасности.