Регистрируемся на 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
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