Я занимался своим проектом на Django и React JS и столкнулся с проблемой. Мне нужно протестировать своё API реализованное на Django REST API и React. Проблема в том что мне нужно сделать их раздельно, а как реализовать передачу API на локальных серверах я не смог найти. Я решил сделать бекенд-часть на удалённом сервере и принимать апи на локальный. Лучшим на мой взгляд решением был Heroku.
Установка Heroku
Надо пройти регистрацию на heroku. В этом нет ничего сложного, просто вводите данные, подтверждаете на почте аккаунт, и вперед.
Установка командной строки heroku., слева-вверху видим burger меню, клацаем по нему и выбираем — Documentation -> Python, нажимаем Get Start With Python. Дальше слева нажимаем Set Up и выбираем установку heroku console на вашу операционную систему, тут нет ничего сложного, просто устанавливаем как вам удобно и все.
Закрываем пока что браузер и заходим в командную строку или bash. Переходим в папку с нашим django-проектом и открываем проект в текстовом редакторе (в моем случае Pycharm). Дальше нам придется работать с системой контроля версий git. Если у вас нет данной утилиты, то вы ее можете скачать по адресу — git-scm.com/downloads. Пройдите простую установку и возвращайтесь к данной статье.
В нашей консоли прописываем команду:
git init
После чего создаем в каталоге проекта файл .gitignore. В нем мы можем записать все файлы которые мы хотим проигнорировать при загрузке на сервер. Допустим на сервере я буду использовать базу данных MySQL, по этому файл db.sqlite3 мне не нужен.
Пишем этот код:
pychache/
*.pyc
db.sqlite3
После пишем в bush 3 команды
git add .
git commit -m "GIT init"
Теперь входим в наш heroku через консоль. Пишем:
heroku login
Дальше вводим сначала E-mail, нажимаем Enter. Потом пароль и опять же Enter.
Вот мы и вошли. Дальше создаем приложение, мы это будем делать через консоль так что вводим в нее следующее:
heroku create
Команда создает приложение. После этой команды через пробел можно написать имя приложения. В противном случае heroku с генерирует его автоматически и выведет в консоль.
Дальше создаем несколько файлов, для того что бы 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
Теперь переходим в settings.py и делаем следующие изменения:
ALLOWED_HOSTS = ['*']
Добавляем staticroot если у вас его нет:
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
Настраиваем работу с базой данных. Устанавливаем утилиту для более удобной работы:
pip install dj-database-url
переходим опять в настройки и пишем:
import dj_database_url
db_from_env = dj_database_url.config()
Последний файл который нам нужен — requirements.txt, в нем будут все установленные библиотеки:
pip freeze -> requirements.txt
У нас создался файл со всеми пакетами. Можете записать в него различные пакеты с их версиями.
В файле 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 в настройках приложения, которое мы сделали, в разделе базы данных. Эти данные будут зашифрованы в ссылке.
Ну и финал, загружаем на сервер.
Переходим в консоль и пишем такие команды:
git add .
git commit -m "Diploy"
git push heroku master
После успешной загрузки нужно провести миграцию базы данных
Переходим в консоль и пишем такие команды:
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
Думаю многим это будет полезно, потому что этой информации в одном видео или одной статье я не нашёл, хотя потратил добрых несколько дней, вылазило много ошибок, не деплоилась статика и т.д.
Удачи в ваших проектах!