changed 3 years ago
Published Linked with GitHub

Деплой


Регистрируемся на heroku по указанной ссылкее https://heroku.com/

Ещё нужно установить heroku toolbelt


В активной виртуальной среде введите следующие
команды:

pipenv install dj-database-url
pipenv install dj-static
pipenv install static3
pipenv install gunicorn
pipenv install whitenoise
pipenv install psycopg2

Heroku необходимо знать, от каких пакетов зависит наш проект, поэтому мы воспользуемся pip для построения файла со списком. Оставаясь в активной виртуальной среде, введите следующую команду:

pip freeze > requirements.txt


Если вы не укажете версию Python, то Heroku будет использовать собственную версию Python по умолчанию. Убедитесь в том, что Heroku использует ту же версию Python, которая используется у вас.

Создайте новый файл с именем runtime.txt в одном каталоге с файлом manage.py и введите следующую команду:

python-3.8.9


Settings.py

STATIC_ROOT = 'staticfiles'
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

if os.getcwd() == '/app':
    import dj_database_url
    DATABASES = {
        'default': dj_database_url.config(default='postgres://localhost')
    }

    Поддержка заголовка 'X-Forwarded-Proto' для request.is_secure().
    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

    # Разрешены все заголовки хостов.
    ALLOWED_HOSTS = ['*']
    # Конфигурация статических ресурсов
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
    )

MIDDLEWARE_CLASSES = (
    # Simplified static file serving.
    # https://warehouse.python.org/project/whitenoise/
    'whitenoise.middleware.WhiteNoiseMiddleware',
    ...

Файл Procfile сообщает Heroku, какие процессы должны запускаться для правильной работы проекта. Это однострочный файл, который должен быть сохранен под именем Procfile (символ P верхнего регистра, без расширения) в одном каталоге с файлом manage.py.

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


Также необходимо внести изменения в файл wsgi.py для Heroku, потому что конфигурация для Heroku несколько отличается от той, которая использовалась ранее:

import os
from django.core.wsgi import get_wsgi_application
from dj_static import Cling

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "learning_log.settings")
application = Cling(get_wsgi_application())

Используем git

git init
git add .
git commit -am "Ready for deployment to heroku."
git status

Запускаем heroku

heroku login
heroku create
git push heroku master

После ввода этих команд проект развернут, но еще не настроен полностью. Чтобы проверить, что серверный процесс был запущен правильно, введите команду heroku ps


Теперь мы можем открыть приложение в браузере командой heroku open


Вы должны выполнить команду migrate, чтобы подготовить базу данных и применить все миграции, сгенерированные в ходе разработки. Для выполнения команд Django и Python в проектах Heroku используется команда heroku run.

heroku run python manage.py migrate


Создание суперпользователя в Heroku

heroku run bash
python manage.py createsuperuser
exit

Безопасность проекта

DEBUG = False

if...
    ALLOWED_HOSTS = ['learning-log.herokuapp.com']

Закрепление и отправка изменений

git commit -am "Set DEBUG=False for Heroku."
git push heroku master

Select a repo