owned this note
owned this note
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
```
---