Как стать автором
Обновить

Как поставить Django на сервер heroku в 2021 году

Я занимался своим проектом на Django и React JS и столкнулся с проблемой. Мне нужно протестировать своё API реализованное на Django REST API и React. Проблема в том что мне нужно сделать их раздельно, а как реализовать передачу API на локальных серверах я не смог найти. Я решил сделать бекенд-часть на удалённом сервере и принимать апи на локальный. Лучшим на мой взгляд решением был Heroku.

Установка Heroku

  1. Надо пройти регистрацию на heroku. В этом нет ничего сложного, просто вводите данные, подтверждаете на почте аккаунт, и вперед.

  2. Установка командной строки heroku., слева-вверху видим burger меню, клацаем по нему и выбираем — Documentation -> Python, нажимаем Get Start With Python. Дальше слева нажимаем Set Up и выбираем установку heroku console на вашу операционную систему, тут нет ничего сложного, просто устанавливаем как вам удобно и все.

  3.  Закрываем пока что браузер и заходим в командную строку или bash. Переходим в папку с нашим django-проектом и открываем проект в текстовом редакторе (в моем случае Pycharm). Дальше нам придется работать с системой контроля версий git. Если у вас нет данной утилиты, то вы ее можете скачать по адресу — git-scm.com/downloads. Пройдите простую установку и возвращайтесь к данной статье.

  4. В нашей консоли прописываем команду:

    git init

    После чего создаем в каталоге проекта файл .gitignore. В нем мы можем записать все файлы которые мы хотим проигнорировать при загрузке на сервер. Допустим на сервере я буду использовать базу данных MySQL, по этому файл db.sqlite3 мне не нужен.

    Пишем этот код:

    pychache/

    *.pyc

    db.sqlite3

    После пишем в bush 3 команды

    git add .

    git commit -m "GIT init"

  5. Теперь входим в наш heroku через консоль. Пишем:

    heroku login

    Дальше вводим сначала E-mail, нажимаем Enter. Потом пароль и опять же Enter.

    Вот мы и вошли. Дальше создаем приложение, мы это будем делать через консоль так что вводим в нее следующее:

    heroku create

    Команда создает приложение. После этой команды через пробел можно написать имя приложения. В противном случае heroku с генерирует его автоматически и выведет в консоль.

  6. Дальше создаем несколько файлов, для того что бы heroku понял что мы загружаем и как:

    Procfile

    runtime.txt

    В runtime сразу пишем этот код:

    python-3.8.5

    После python-, пишите вашу версию python.

    Procfile:

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

    Вместо appname пишите название своего проекта.

    Дальше устанавливаем сам gunicorn для обслуживания django через wsgi:

    pip install gunicorn

    Сразу же устанавливаем whitenoise для работы со статическими файлами:

    pip install whitenoise

  7. Теперь переходим в settings.py и делаем следующие изменения:

    ALLOWED_HOSTS = ['*']

    Добавляем staticroot если у вас его нет:

    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

  8. Настраиваем работу с базой данных. Устанавливаем утилиту для более удобной работы:

    pip install dj-database-url

    переходим опять в настройки и пишем:

    import dj_database_url

    db_from_env = dj_database_url.config()

  9. Последний файл который нам нужен — requirements.txt, в нем будут все установленные библиотеки:

    pip freeze -> requirements.txt

    У нас создался файл со всеми пакетами. Можете записать в него различные пакеты с их версиями.

  10. В файле Settings в разделе MIDDLEWARE добавить строчку: 

    'whitenoise.middleware.WhiteNoiseMiddleware'

    В файле Settings в разделе DATABASES добавить строчки: 

    {

       'default': {

           'ENGINE': 'django.db.backends.postgresql',

           'NAME': 'd5v3d2atr7p0m8',

           'HOST': 'ec2-54-157-12-250.compute-1.amazonaws.com',

           'PORT': 5432,

           'USER': 'ailtolfpzdtopz',

           'PASSWORD': '8f7e1e93c7a51c0d944f491447f0d518e933b77d1c2398ed40002c7b6f3d33b7',

    }

    где NAME, HOST, PORT, USER, PASSWORD берутся из ссылки, которую нужно взять на сайте Heroku в настройках приложения, которое мы сделали, в разделе базы данных. Эти данные будут зашифрованы в ссылке.

  11. Ну и финал, загружаем на сервер.

    Переходим в консоль и пишем такие команды:

    git add .

    git commit -m "Diploy"

    git push heroku master

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

    Переходим в консоль и пишем такие команды:

    heroku run python manage.py makemigrations

    heroku run python manage.py migrate

    Все готово теперь при изменении проекта нужно запускать команды:

    git add .

    git commit -m "Diploy"

    git push heroku master

    P.S.

    Для того чтобы наш API мог принимать любой домен нужно сделать следующие изменения:

    Переходим в консоль и пишем такие команды:

    pip install django-cors-headers

    pip freeze -> requirements.txt

    В файле Settings в разделе INSTALLEDAPPS добавить строчку:

    'corsheaders',

     и в разделе MIDDLEWARE добавить строчку в самый верх списка: 

    'corsheaders.middleware.CorsMiddleware',

    В файле Settings добавить строку в конец:

    CORS_ALLOW_ALL_ORIGINS = True

    После этого делаем стандартные действия по изменению Heroku:

    git add .

    git commit -m "Diploy"

    git push heroku master

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

Удачи в ваших проектах!

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.