Размещение проекта Django на Heroku
Оглавление
- Демонстрация: Что вы будете создавать
- Обзор проекта
- Предварительные условия
- Шаг 1: Создание каркаса проекта Django для размещения
- Шаг 2: Создайте локальный репозиторий Git
- Шаг 3: Создайте бесплатную учетную запись Heroku
- Шаг 4: Установите командную строку Heroku
- Шаг 5: Войдите в систему с помощью командной строки Heroku
- Шаг 6: Создайте приложение Heroku
- Шаг 7: Разверните свой проект Django на Heroku
- Шаг 8: Настройка реляционной базы данных
- Заключение
- Следующие шаги
Смотрите сейчас, к этому уроку прилагается соответствующий видеокурс, созданный командой Real Python. Посмотрите его вместе с письменным руководством, чтобы углубить свое понимание: Разместите свой проект на Django на Heroku
Как начинающий веб-разработчик, вы создали свое приложение-портфолио и поделились своим кодом на GitHub. Возможно, вы надеетесь привлечь технических рекрутеров для получения вашей первой работы в области программирования. Многие выпускники coding bootcamp, скорее всего, делают то же самое. Чтобы выделиться из толпы и повысить свои шансы на то, чтобы вас заметили, вы можете начать размещать свой проект на Django онлайн.
Для любительского проекта на Django вам понадобится хостинг, который будет бесплатным, быстрым в настройке, удобный в использовании и хорошо интегрированный с вашим существующим технологическим стеком. Хотя Страниц на GitHub идеально подходят для размещения статических веб-сайтов и веб-сайтов с JavaScript, вам понадобится веб-сервер для запуска вашего проекта Flask или Django.
Существует несколько основных поставщиков облачных платформ, работающих по разным моделям, но в этом руководстве вы познакомитесь с Heroku. Он соответствует всем требованиям — он бесплатный, быстрый в настройке, удобный в использовании и хорошо интегрирован с Django - и является любимым поставщиком облачных платформ для многих стартапов.
В этом руководстве вы узнаете, как:
- Запустите свой проект на Django онлайн за считанные минуты
- Разверните свой проект в Heroku с помощью Git
- Используйте Библиотеку интеграции Django-Heroku
- Подключите свой проект Django к автономной реляционной базе данных
- Управлять конфигурацией вместе с конфиденциальными данными
Чтобы продолжить, вы можете загрузить код и другие ресурсы, перейдя по ссылке ниже:
Получите исходный код: Нажмите здесь, чтобы просмотреть сопутствующий проект Django, а также снимки отдельных шагов, выполненных в этом руководстве.
Демонстрация: Что вы будете создавать
Вы собираетесь создать простой проект на Django и развернуть его в облаке прямо из терминала. В конце у вас будет общедоступная ссылка на ваше первое приложение Heroku.
Вот минутное видео, демонстрирующее необходимые шаги, от инициализации пустого репозитория Git до просмотра готового проекта в браузере. Подождите и досмотрите до конца, чтобы получить краткий обзор того, что вы найдете в этом руководстве:
В дополнение к шагам, показанным на скринкасте выше, вы найдете еще несколько позже, но этого должно быть достаточно, чтобы дать вам общее представление о том, как вы будете работать с Heroku в этом руководстве.
Обзор проекта
В этом руководстве речь идет не столько о создании какого-либо конкретного проекта, сколько о размещении одного из них в облаке с помощью Heroku. Хотя Heroku поддерживает различных языков и веб-фреймворков, вы будете придерживаться Python и Django. Не волнуйтесь, если у вас под рукой нет проектов на Django. На первом шаге вы познакомитесь с разработкой нового проекта на Django, что позволит вам быстро приступить к работе. В качестве альтернативы вы можете воспользоваться готовым примером проекта, который вы найдете позже.
Как только ваш проект на Django будет готов, вы зарегистрируете бесплатную учетную запись на Heroku. Далее вы загрузите удобный инструмент командной строки, который поможет вам управлять вашими приложениями онлайн. Как показано на скринкасте выше, командная строка - это быстрый способ работы с Heroku. Наконец, вы получите развернутый проект Django, размещенный на вашем недавно настроенном экземпляре Heroku. Вы можете думать о своем конечном результате как о заполнителе для ваших будущих проектных идей.
Предварительные условия
Прежде чем приступить к работе, убедитесь, что вы знакомы с основами веб-фреймворка Django и что вам удобно использовать его для создания простого проекта.
Примечание: Если у вас больше опыта работы с Flask, чем с Django, то вы можете ознакомиться с аналогичным руководством по Развертыванию приложения на примере Python Flask с использованием Heroku.
У вас также должен быть установлен и настроен клиент Git, чтобы вы могли удобно взаимодействовать с платформой Heroku из командной строки. Наконец, вам следует серьезно подумать об использовании виртуальной среды для вашего проекта. Если у вас еще нет на примете конкретного инструмента для создания виртуальной среды, вы скоро найдете несколько вариантов в этом руководстве.
Шаг 1: Создание каркаса проекта Django для размещения
Чтобы разместить веб-приложение Django в облаке, вам нужен работающий проект Django. Для целей данного руководства, это не обязательно должно быть сложным. Не стесняйтесь использовать один из своих хобби-проектов или создать образец приложения для портфолио, если у вас мало времени, а затем перейти к созданию локального репозитория Git. В противном случае оставайтесь здесь и создавайте совершенно новый проект с нуля.
Создайте виртуальную среду
Рекомендуется начинать каждый проект с создания изолированной виртуальной среды, которая не будет использоваться совместно с другими проектами. Это поможет упорядочить ваши зависимости и избежать конфликтов версий пакетов. Некоторые менеджеры зависимостей и инструменты упаковки, такие как Pipenv или poetry, автоматически создают виртуальные среды и управляют ими в соответствии с рекомендациями. Многие IDE, такие как PyCharm, также делают это по умолчанию, когда вы начинаете новый проект.
Однако самый надежный и переносимый способ создания виртуальной среды Python - это сделать это вручную из командной строки. Вы можете использовать внешний инструмент, такой как virtualenvwrapper, или напрямую вызвать встроенный модуль venv. В то время как virtualenvwrapper хранит все среды в предопределенной родительской папке, venv ожидается, что вы укажете папку для каждой среды отдельно.
В этом руководстве вы будете использовать стандартный модуль venv. Обычно виртуальную среду размещают в корневой папке проекта, поэтому давайте сначала создадим ее и заменим на нее рабочий каталог:
$ mkdir portfolio-project
$ cd portfolio-project/
кодовый блок>
Теперь вы находитесь в папке portfolio-project, которая станет домашней для вашего проекта. Чтобы создать здесь виртуальную среду, просто запустите модуль venv и укажите путь к вашей новой среде. По умолчанию именем папки становится имя среды. Если вы хотите, вы можете вместо этого присвоить ей пользовательское имя с необязательным аргументом --prompt:
$ python3 -m venv ./venv --prompt portfolio
кодовый блок>
Путь, начинающийся с начальной точки (.), указывает на то, что он относится к текущему рабочему каталогу. Хотя эта точка и не обязательна, она ясно показывает ваши намерения. В любом случае, эта команда должна создать подкаталог venv в вашем корневом каталоге portfolio-project:
portfolio-project/
│
└── venv/
Этот новый подкаталог содержит копию интерпретатора Python и несколько сценариев управления. Теперь вы готовы установить в него зависимости от проекта.
Установка зависимостей проекта
Большинство реальных проектов зависят от внешних библиотек. Django - это сторонний веб-фреймворк, который не поставляется с Python "из коробки". Вы должны установить его вместе с его собственными зависимостями в виртуальной среде вашего проекта.
Не забудьте активировать свою виртуальную среду, если вы еще этого не сделали. Для этого вам нужно будет выполнить команды в одном из сценариев оболочки, доступных в подпапке bin/ виртуальной среды. Например, если вы используете Bash, то создайте исходный код activate скрипта:
$ source venv/bin/activateпредварительно> кодовый блок>В командной строке теперь должен отображаться префикс с названием вашей виртуальной среды, указывающий на то, что она активирована. Вы можете перепроверить, на какие исполняемые файлы указывают конкретные команды:
(portfolio) $ which python /home/jdoe/portfolio-project/venv/bin/pythonпредварительно> кодовый блок>Приведенный выше вывод подтверждает, что при запуске
pythonбудет запущен соответствующий файл, расположенный в вашей виртуальной среде. Теперь давайте установим зависимости для вашего проекта Django.Вам понадобится довольно свежая версия Django. В зависимости от того, когда вы читаете это, может быть доступна более новая версия. Чтобы избежать потенциальных проблем с совместимостью, вы можете указать ту же версию, которая использовалась на момент написания этого руководства:
(portfolio) $ python -m pip install django==3.2.5предварительно> кодовый блок>Это приведет к установке версии Django 3.2.5. В именах пакетов регистр не учитывается, поэтому не имеет значения, вводите ли вы, например,
djangoилиDjango.Примечание: Иногда вы увидите предупреждение о том, что доступна более новая версия
pip. Обычно игнорировать это предупреждение не опасно, но вам следует рассмотреть возможность обновления по соображениям безопасности, если вы работаете в производственной среде:(portfolio) $ python -m pip install --upgrade pipпредварительно> кодовый блок>Кроме того, вы можете отключить проверку версии в конфигурационном файле, если это вас беспокоит и вы осознаете возможные последствия.
Установка Django приводит к появлению нескольких дополнительных транзитивных зависимостей, которые вы можете выявить, перечислив их:
(portfolio) $ python -m pip list Package Version ---------- ------- asgiref 3.4.1 Django 3.2.5 pip 21.1.3 pytz 2021.1 setuptools 56.0.0 sqlparse 0.4.1предварительно> кодовый блок>Поскольку вы хотите, чтобы другие пользователи могли загружать и запускать ваш код без проблем, вам необходимо обеспечить повторяемость сборок. Для этого и существует зависание. Он выводит примерно тот же набор зависимостей с их подзависимостями в специальном формате:
(portfolio) $ python -m pip freeze asgiref==3.4.1 Django==3.2.5 pytz==2021.1 sqlparse==0.4.1предварительно> кодовый блок>По сути, это аргументы для команды
pip install. Однако обычно они заключены в один или несколько файлов требований, которыеpipможно использовать за один раз. Чтобы создать такой файл, вы можете перенаправить вывод командыfreeze:(portfolio) $ python -m pip freeze > requirements.txtпредварительно> кодовый блок>Этот файл должен быть сохранен в вашем репозитории Git, чтобы другие пользователи могли установить его содержимое, используя
pipследующим образом:(portfolio) $ python -m pip install -r requirements.txtпредварительно> кодовый блок>На данный момент ваша единственная зависимость - это Django и его дочерние зависимости. Однако вы должны помнить о необходимости повторно создавать и фиксировать файл требований каждый раз, когда добавляете или удаляете какие-либо зависимости. Именно здесь могут пригодиться менеджеры пакетов, упомянутые ранее.
Покончив с этим, давайте начнем новый проект на Django!
Запуск проекта на Django
Каждый проект Django состоит из похожих файлов и папок, которые соответствуют определенным соглашениям об именовании. Вы могли бы создать эти файлы и папки вручную, но обычно это быстрее и удобнее сделать автоматизированным способом.
Когда вы устанавливаете Django, он предоставляет утилиту командной строки для административных задач, таких как загрузка новых проектов. Инструмент находится в подпапке
bin/вашей виртуальной среды:(portfolio) $ which django-admin /home/jdoe/portfolio-project/venv/bin/django-adminпредварительно> кодовый блок>Вы можете запустить его в командной оболочке и передать имя вашего нового проекта, а также целевой каталог, в котором будут созданы файлы и папки по умолчанию:
(portfolio) $ django-admin startproject portfolio .предварительно> кодовый блок>В качестве альтернативы вы могли бы добиться того же результата, вызвав модуль
django:(portfolio) $ python -m django startproject portfolio .предварительно> кодовый блок>Обратите внимание на точку в конце обеих команд, которая указывает на ваш текущий рабочий каталог,
portfolio-project, в качестве пункта назначения. Без нее команда создала бы другую родительскую папку с тем же именем, что и у вашего проекта.Если вы получаете сообщение об ошибке
command not foundилиModuleNotFoundисключение, убедитесь, что вы активировали ту же виртуальную среду, в которой вы установили Django. Некоторые другие распространенные ошибки заключаются в том, что ваш проект называется так же, как один из встроенных объектов, или в том, что вы не используете допустимый идентификатор Python.Примечание: Запуск нового проекта на Django с нуля с помощью инструментов администрирования является быстрым и гибким процессом, но в дальнейшем потребует много ручного труда. Если вы планируете разместить веб-приложение производственного уровня, вам потребуется настроить безопасность, источники данных и многое другое. Выбор шаблона проекта , соответствующего рекомендациям, может избавить вас от головной боли.
После этого у вас должен получиться такой макет каталога:
portfolio-project/ │ ├── portfolio/ │ ├── __init__.py │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py │ ├── venv/ │ ├── manage.py └── requirements.txtВы создали приложение для управления с именем
portfolio, которое содержит настройки на уровне проекта и основной файл с шаблонами URL-адресов, среди прочего. Вы также создали скриптmanage.py, который удобно оборачиваетdjango-adminи подключается к вашему проекту.Теперь у вас есть простой, но работоспособный проект на Django. На этом этапе вы обычно запускаете одно или несколько приложений Django и определяете их представления и модели, но в этом руководстве они не нужны.
Обновить схему локальной базы данных (необязательно)
Этот шаг необязателен, но если вы хотите использовать Django admin для просмотра или определения пользовательских приложений и моделей, то в конечном итоге вам потребуется обновить схему базы данных . По умолчанию Django предоставляет файловую базу данных SQLite, которая удобна для тестирования и запуска на локальном сервере разработки. Таким образом, вам не нужно устанавливать и настраивать полноценную базу данных, такую как MySQL или PostgreSQL.
Чтобы обновить схему базы данных, выполните подкоманду
migrate:(portfolio) $ python manage.py migrateпредварительно> кодовый блок>После успешного применения всех ожидающих миграций, вы найдете новый файл с именем
db.sqlite3в корневой папке вашего проекта:portfolio-project/ │ ├── portfolio/ │ ├── __init__.py │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py │ ├── venv/ │ ├── db.sqlite3 ├── manage.py └── requirements.txtВы можете просмотреть его содержимое с помощью утилиты командной строки
sqlite3, встроенного в Python модуляsqlite3или вашего любимого инструмента администрирования баз данных. К настоящему времени этот файл должен содержать несколько таблиц для внутренних приложений, отвечающих за аутентификацию, управление сеансами и так далее, а также метатаблицу для отслеживания примененных миграций.Запустите локальный сервер разработки
Прежде чем увеличивать сложность, добавляя Heroku поверх вашего проекта, имеет смысл протестировать все на локальном компьютере. Это может избавить вас от множества ненужных отладочных операций. К счастью, Django поставляется с облегченным веб-сервером для целей разработки, который практически не требует настройки.
Примечание: Технически вы можете воспользоваться тем же сервером разработки, который встроен в Django на Heroku. Однако он не был разработан для обработки реального трафика и не является безопасным. Вам лучше использовать WSGI сервер, такой как Gunicorn.
Чтобы запустить сервер разработки, введите следующую команду в окне вашего терминала, в котором вы ранее активировали виртуальную среду:
(portfolio) $ python manage.py runserverпредварительно> кодовый блок>Сервер будет запущен с локального хоста по умолчанию через порт 8000. Вы можете изменить номер порта, если другое приложение уже использует 8000. Сервер будет отслеживать изменения в исходных файлах проекта и автоматически перезагружать их при необходимости. Пока сервер все еще работает, перейдите по URL-адресу в вашем веб-браузере:
http://127.0.0.1:8000/предварительно> кодовый блок>Хост
127.0.0.1представляет собой один из IP-адресов в интерфейсе виртуальной локальной сети. Если все прошло нормально и вы не изменили настройки проекта по умолчанию, то вам следует перейти на страницу приветствия Django:Страница приветствия Django на Localhost
Ура! Ракета взлетела, и ваш проект на Django готов к развертыванию в облаке.
Шаг 2: Создайте локальный репозиторий Git
Теперь, когда у вас есть работающий проект на Django, пришло время сделать следующий шаг к его размещению в облаке. В этом разделе вы изучите доступные варианты создания и развертывания приложений на платформе Heroku. Вы также создадите локальный репозиторий Git для своего проекта, если еще этого не сделали. В конце этого шага вы будете готовы к глубокому погружению в набор инструментов Heroku.
Heroku предлагает как минимум пять различных способов развертывания вашего проекта:
- Git: Отправка коммитов в удаленный репозиторий Git на Heroku
- GitHub: Автоматически запускает развертывание при объединении запросов на извлечение
- Docker: Перенести Docker изображения в реестр контейнеров Heroku
- API: Автоматизируйте свое развертывание программным путем
- Веб: Развертывание вручную с панели управления Heroku
Самый простой и ориентированный на разработчиков метод - это первый. Многие разработчики программного обеспечения уже используют Git ежедневно, поэтому барьер для входа в Heroku может быть довольно низким. Команда
gitпозволяет многое сделать в Heroku, именно поэтому в этом руководстве вы будете использовать Git.Инициализируем пустой репозиторий Git
Остановите сервер разработки с помощью комбинации клавиш Ctrl+C или Cmd+C или откройте другое окно терминала, затем инициализируйте локальный репозиторий Git в корневой папке вашего проекта:
$ git initпредварительно> кодовый блок>Чтобы это сработало, не имеет значения, активна ваша виртуальная среда или нет. Следует создать новую подпапку
.git, которая будет содержать историю файлов, отслеживаемых Git. Папки, названия которых начинаются с точки, скрыты в macOS и Linux. Если вы хотите проверить, успешно ли вы их создали, воспользуйтесь командойls -a, чтобы просмотреть эту папку.Укажите Неотслеживаемые файлы
Полезно указать Git, какие файлы игнорировать, чтобы он больше не отслеживал их. Некоторые файлы не должны быть частью репозитория. Обычно вам следует игнорировать Настройки IDE и редактора кода, файлы конфигурации с конфиденциальными данными, такими как пароли, двоичные файлы, такие как виртуальная среда Python, файлы кэша и данные, такие как база данных SQLite.
Когда вы проверите текущее состояние вашего нового репозитория Git, он выведет список всех файлов, присутствующих в рабочем каталоге, и предложит добавить их в репозиторий:
$ git status On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) .idea/ __pycache__/ db.sqlite3 manage.py portfolio/ requirements.txt venv/ nothing added to commit but untracked files present (use "git add" to track)предварительно> кодовый блок>Вместо того, чтобы добавлять все эти файлы и папки, вы захотите заставить Git игнорировать некоторые из них, например:
.idea/__pycache__/db.sqlite3venv/Папка
.idea/предназначена только для PyCharm. Если вы используете Visual Studio Code или другой редактор, вам нужно будет добавить соответствующие файлы и папки в этот список. Добавление дополнительных шаблонов имен файлов позволит другим разработчикам безопасно использовать редакторы и среды разработки по своему выбору без необходимости слишком часто обновлять список.Git ищет специальный файл с именем
.gitignore, который обычно помещается в корневую папку вашего репозитория. Каждая строка содержит конкретное имя файла или общий шаблон имени файла, который следует исключить. Вы можете отредактировать этот файл вручную, но гораздо быстрее создать его из заранее определенного набора компонентов, используя gitignore.io веб-сайт:![]()
Вы заметите, что ввод gitignore.io в адресной строке перенаправит браузер на более подробный домен, принадлежащий Toptal.
Здесь вы можете выбрать язык программирования, библиотеки и инструменты, которые будете использовать. Когда вы будете удовлетворены своим выбором, нажмите кнопку Создать. Затем либо скопируйте и вставьте результат в текстовый редактор и сохраните его как
.gitignoreв корневой папке вашего проекта, либо запомните URL-адрес и используйте cURL в командной строке, чтобы загрузить файл:$ curl https://www.toptal.com/developers/gitignore/api/python,pycharm+all,django > .gitignoreпредварительно> кодовый блок>Если вы обнаружите, что постоянно вводите этот URL-адрес, то можете задать в своей командной строке псевдоним , который будет проще всего запомнить:
$ git ignore python,pycharm+all,django > .gitignoreпредварительно> кодовый блок>Часто существует несколько способов достижения одной и той же цели, и изучение различных вариантов может многому вас научить. В любом случае, после создания файла
.gitignoreстатус вашего хранилища должен выглядеть следующим образом:$ git status On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) .gitignore manage.py portfolio/ requirements.txt nothing added to commit but untracked files present (use "git add" to track)предварительно> кодовый блок>Оставшиеся шаги по созданию локального репозитория Git - это подготовка ваших изменений и их сохранение при первой фиксации.
Выполните первую фиксацию
Помните, что для работы с Heroku через Git вам необходимо перенести свой код в удаленный репозиторий Git. Для этого у вас должен быть хотя бы один коммит в вашем локальном репозитории. Сначала добавьте ваши новые файлы в промежуточную область, которая является буфером между вашим рабочим деревом и локальным репозиторием. Затем еще раз проверьте статус, чтобы убедиться, что вы ничего не пропустили:
$ git add . $ git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: .gitignore new file: manage.py new file: portfolio/__init__.py new file: portfolio/asgi.py new file: portfolio/settings.py new file: portfolio/urls.py new file: portfolio/wsgi.py new file: requirements.txtпредварительно> кодовый блок>Эти файлы готовы к фиксации, поэтому давайте сделаем их снимок и сохраним в локальном репозитории:
$ git commit -m "Initial commit"предварительно> кодовый блок>Всегда рекомендуется предоставлять описательное сообщение о фиксации, которое поможет вам ориентироваться в истории изменений. Как правило, в вашем сообщении должно быть объяснено , почему вы внесли изменения. В конце концов, любой желающий может просмотреть журнал Git, чтобы точно узнать , что изменилось.
Итак, что вы узнали на данный момент? Вы знаете, что развертывание новых версий на платформе Heroku обычно предполагает передачу ваших локальных коммитов на удаленный Git-сервер. Вы создали локальный репозиторий Git и выполнили свой первый коммит. Далее вам нужно создать свою бесплатную учетную запись на Heroku.
Шаг 3: Создайте бесплатную учетную запись Heroku
На этом этапе вы готовы зарегистрироваться в бесплатной учетной записи Heroku и настроить ее по своему вкусу.
Django позиционирует себя как веб-фреймворк для перфекционистов, соблюдающих сроки. Heroku придерживается аналогичного подхода к размещению веб-приложений в облаке и стремится сократить время разработки. Это высокоуровневая и безопасная Платформа как услуга (PaaS), которая снимает с ваших плеч бремя управления инфраструктурой и позволяет сосредоточиться на том, что для вас важнее всего, — написании кода.
Интересный факт: Heroku основан на Amazon Web Services (AWS), еще одной популярной облачной платформе, работающей в основном в Модель "Инфраструктура как услуга" (IaaS). Он гораздо более гибкий, чем Heroku, и может быть более доступным по цене, но требует определенного уровня знаний.
У многих стартапов и небольших компаний на ранних стадиях разработки нет команды квалифицированных DevOps-инженеров. Heroku может быть удобным решением с точки зрения окупаемости инвестиций для этих компаний.
Зарегистрируйтесь
Чтобы начать использовать Heroku, посетите страницу регистрации на Heroku, заполните регистрационную форму и дождитесь получения электронного письма со ссылкой для подтверждения вашей учетной записи. После этого вы попадете на страницу настройки пароля. После настройки вы сможете перейти к своей новой панели управления Heroku. Первое, что вам будет предложено сделать, это прочитать и принять условия предоставления услуг.
Включить многофакторную аутентификацию (необязательно)
Этот шаг является необязательным, но Heroku может потребовать от вас пройти многофакторную аутентификацию (MFA), чтобы усилить защиту вашей учетной записи и обеспечить ее сохранность. Эта функция также известна как двухфакторная аутентификация (2FA), поскольку обычно проверка вашей личности состоит всего из двух этапов.
Забавный факт: В какой-то момент мой личный аккаунт Netflix был взломан, и кто-то смог воспользоваться моей кредитной картой даже спустя долгое время после того, как я отменил подписку. С тех пор я включаю двухфакторную аутентификацию во всех своих онлайн-сервисах.
После входа в личный кабинет Heroku нажмите на свой аватар ninja в правом верхнем углу, выберите Настройки учетной записи, а затем прокрутите вниз, пока не увидите Раздел многофакторной аутентификации. Нажмите кнопку с надписью Настройка многофакторной аутентификации и выберите методы проверки:
- Средство проверки подлинности Salesforce
- Генератор одноразовых паролей
- Ключ безопасности
- Встроенный аутентификатор
- Коды восстановления
Какой из этих методов проверки вам следует выбрать?
Salesforce является материнской компанией, которая приобрела Heroku в 2010 году, и именно поэтому они продвигают свое фирменное мобильное приложение в качестве первого варианта. Однако, если вы уже используете другое приложение для проверки подлинности в другом месте, выберите опцию Генератор одноразовых паролей и отсканируйте QR-код с помощью своего приложения.
Для использования Ключа безопасности требуется внешний аппаратный USB-токен, в то время как для использования встроенного средства аутентификации можно использовать отпечаток пальца вашего устройства считыватель, например, если он прилагается.
И, наконец, коды восстановления могут использоваться в качестве дополнительного пароля. Даже если вы планируете использовать приложение для проверки подлинности только на своем телефоне, вам следует загрузить коды восстановления в качестве резервной копии. Без альтернативного способа подтвердить свою личность вы никогда больше не сможете войти в свою учетную запись Heroku, если потеряете, повредите или обновите свой телефон. Поверьте мне, я был в этом уверен!
Раньше Heroku предлагала другой метод проверки с помощью SMS, отправляемого на ваш телефон, но они отказались от него из-за проблем с безопасностью.
Добавьте способ оплаты (необязательно)
Если вам неудобно сообщать Heroku номер своей кредитной карты, ничего страшного. Сервис будет продолжать работать бесплатно, с разумными ограничениями. Однако, даже если вы не планируете тратить ни копейки на размещение своего проекта Django в облаке, вы все равно можете рассмотреть возможность подключения своих платежных реквизитов. Вот почему.
На момент написания этого руководства вы будете получать только 550 часов в месяц с бесплатной учетной записью. Это примерно 22 дня использования одного экземпляра компьютера по 24 часа в сутки. Когда вы подтверждаете свою учетную запись с помощью кредитной карты, этот резерв увеличивается до 1000 бесплатных часов в месяц.
Примечание: Независимо от того, подтверждаете ли вы свою учетную запись или нет, веб-приложения бесплатного уровня, которые не получают никакого HTTP-трафика в течение 30 минут, автоматически переходят в режим ожидания. Это экономит количество свободных часов, но может ухудшить работу пользователей, если ваше приложение не получает регулярного трафика. Если кто-то захочет воспользоваться вашим веб-приложением, пока оно находится в режиме ожидания, повторный запуск займет несколько секунд.
Другие преимущества проверки вашей учетной записи включают в себя возможность использования бесплатных дополнений, таких как реляционная база данных, настройка пользовательского домена, и многое другое. Просто помните, что если вы решите поделиться своей платежной информацией с Heroku, то стоит включить многофакторную аутентификацию.
До сих пор вы взаимодействовали с Heroku через их веб-интерфейс. Хотя это, несомненно, удобно и интуитивно понятно, самый быстрый способ разместить свой проект на Django онлайн - это использовать командную строку.
Шаг 4: Установите командную строку Heroku
Работа в терминале - необходимый навык для любого разработчика. Поначалу ввод команд может показаться пугающим, но после того, как вы увидите его мощь, это становится вашей второй натурой. Для удобства работы разработчика вам необходимо установить Интерфейс командной строки Heroku (CLI).
Интерфейс CLI Heroku позволит вам создавать веб-приложения и управлять ими прямо из терминала. На этом шаге вы узнаете о нескольких основных командах и о том, как отображать документацию к ним. Сначала следуйте инструкциям по установке для вашей операционной системы. По завершении подтвердите успешность установки с помощью следующей команды:
$ heroku --versionпредварительно> кодовый блок>Если команда
herokuбыла найдена и вы используете последнюю версию командной строки Heroku, то вы можете включить автозаполнение в своей командной оболочке. Он автоматически завершает выполнение команд и их аргументов, когда вы нажимаете клавишу Tab, что экономит время и предотвращает опечатки.Примечание: Для работы инструмента требуется Node.js сервер, который входит в комплект большинства методов установки. Это также проект с открытым исходным кодом, что означает, что вы можете ознакомиться с его исходным кодом на GitHub.
Интерфейс командной строки Heroku имеет модульную архитектуру плагинов, что означает, что его функции являются автономными и следуют одному и тому же шаблону. Чтобы получить список всех доступных команд, введите
heroku helpили простоherokuв вашем терминале:$ heroku CLI to interact with Heroku VERSION heroku/7.56.0 linux-x64 node-v12.21.0 USAGE $ heroku [COMMAND] COMMANDS access manage user access to apps addons tools and services for developing, extending, (...) apps manage apps on Heroku auth check 2fa status (...)предварительно> кодовый блок>Иногда название команды может не указывать на то, что она делает. Если вы хотите узнать больше подробностей о конкретной команде и посмотреть краткие примеры ее использования, если таковые имеются, то используйте флаг
--help:$ heroku auth --help check 2fa status USAGE $ heroku auth:COMMAND COMMANDS auth:2fa check 2fa status auth:login login with your Heroku credentials auth:logout clears local login credentials and invalidates API session auth:token outputs current CLI authentication token. auth:whoami display the current logged in userпредварительно> кодовый блок>Здесь вы запрашиваете дополнительную информацию о команде
auth, используя флаг--help. Вы можете видеть, что заauthдолжно следовать двоеточие (:) и другая команда. Набравheroku auth:2fa, вы просите командную строку Heroku проверить состояние вашей настройки двухфакторной аутентификации:$ heroku auth:2fa --help check 2fa status USAGE $ heroku auth:2fa ALIASES $ heroku 2fa $ heroku twofactor COMMANDS auth:2fa:disable disables 2fa on accountпредварительно> кодовый блок>Команды Heroku CLI являются иерархическими. Часто они содержат одну или несколько подкоманд, которые вы можете указать после двоеточия, как в примере выше. Кроме того, некоторые из этих подкоманд могут иметь псевдоним, доступный на верхнем уровне иерархии команд. Например, ввод
heroku auth:2faприводит к тому же эффекту, что и вводheroku 2faилиheroku twofactor:$ heroku auth:2fa Two-factor authentication is enabled $ heroku 2fa Two-factor authentication is enabled $ heroku twofactor Two-factor authentication is enabledпредварительно> кодовый блок>Все три команды дают одинаковый результат, что позволяет выбрать ту, которую легче запомнить.
В этом коротком разделе вы установили CLI Heroku на свой компьютер и познакомились с его синтаксисом. Вы увидели несколько удобных команд. Теперь, чтобы получить максимальную отдачу от этого инструмента командной строки, вам нужно войти в свою учетную запись Heroku.
Шаг 5: Войдите в систему с помощью командной строки Heroku
Вы можете установить интерфейс командной строки Heroku даже без создания учетной записи Heroku. Однако вам необходимо подтвердить свою личность и доказать, что у вас есть соответствующая учетная запись Heroku, чтобы сделать с ней что-то значимое. В некоторых случаях у вас может быть даже несколько учетных записей, поэтому вход в систему позволяет вам указать, какую из них использовать в данный момент.
Как вы узнаете позже, вы не остаетесь в системе постоянно. Это хорошая привычка - входить в систему, чтобы убедиться, что у вас есть доступ и вы используете правильную учетную запись. Самый простой способ войти в систему - это выполнить команду
heroku login:$ heroku login heroku: Press any key to open up the browser to login or q to exit:предварительно> кодовый блок>При этом откроется ваш веб-браузер по умолчанию и будут получены ваши сессионные файлы cookie, если вы ранее входили в панель управления Heroku. В противном случае вам потребуется ввести свое имя пользователя, пароль и, возможно, другое подтверждение личности, если вы включили двухфакторную аутентификацию. После успешного входа в систему вы можете закрыть вкладку или окно браузера и вернуться к терминалу.
примечание: Вы также можете войти в систему с помощью автономного режима путем добавления
--interactiveфлаг, чтобы команда, которая будет запрашивать имя пользователя и пароль вместо того, чтобы запускать веб-браузер. Однако это не сработает при включенной многофакторной аутентификации.Доступ к вашим сессионным файлам cookie является временным, когда вы входите в систему с помощью интерфейса командной строки, поскольку Heroku генерирует новый токен авторизации, который будет действителен в течение ограниченного времени. Он хранит токен в стандартном файле
.netrcв вашем домашнем каталоге , но вы также можете проверить его с помощью панели управления Heroku илиheroku authиheroku authorizations. плагины:$ heroku auth:whoami jdoe@company.com $ heroku auth:token › Warning: token will expire today at 11:29 PM › Use heroku authorizations:create to generate a long-term token f904774c-ffc8-45ae-8683-8bee0c91aa57 $ heroku authorizations Heroku CLI login from 54.239.28.85 059ed27c-d04a-4349-9dba-83a0169277ae global $ heroku authorizations:info 059ed27c-d04a-4349-9dba-83a0169277ae Client: <none> ID: 059ed27c-d04a-4349-9dba-83a0169277ae Description: Heroku CLI login from 54.239.28.85 Scope: global Token: f904774c-ffc8-45ae-8683-8bee0c91aa57 Expires at: Fri Jul 02 2021 23:29:01 GMT+0200 (Central European Summer Time) (in about 8 hours) Updated at: Fri Jul 02 2021 15:29:01 GMT+0200 (Central European Summer Time) (1 minute ago)предварительно> кодовый блок>Политика истечения срока действия на момент написания этого руководства кажется немного сбойной. В официальной документации указано, что по умолчанию он должен оставаться действительным в течение одного года, в то время как интерфейс Heroku CLI показывает около одного месяца, что также соответствует истечению срока действия сеансового файла cookie. Повторное использование токена вручную с помощью веб-интерфейса Heroku сокращает это время примерно до восьми часов. Но если вы проверите, каков фактический срок годности, то увидите, что это совершенно другой срок годности. Не стесняйтесь изучить это самостоятельно, если вам интересно узнать о политике истечения срока действия в то время, когда вы будете следовать этому руководству.
В любом случае, команда
heroku loginпредназначена только для разработки. В производственной среде вы обычно создаете авторизацию пользователя с длительным сроком действия, срок действия которой никогда не истекает с помощьюauthorizationsплагина. Это может быть удобно для создания сценариев и автоматизации с помощью Heroku API.Шаг 6: Создайте приложение Heroku
На этом шаге вы создадите свое первое приложение Heroku и узнаете, как оно интегрируется с Git. К концу работы у вас будет общедоступный доменный адрес для вашего проекта.
В проекте Django приложения представляют собой независимые блоки кода, которые инкапсулируют функциональные возможности, используемые повторно. С другой стороны, Приложения Heroku работают как масштабируемые виртуальные компьютеры, способные разместить весь ваш проект на Django. Каждое приложение состоит из исходного кода, списка зависимостей, которые необходимо установить, и команд для запуска вашего проекта.
Как минимум, у вас будет одно приложение Heroku на проект, но нередко их бывает и больше. Например, вы можете захотеть запустить программу разработки , промежуточные и производственные версии вашего проектируйте все одновременно. Каждый из них может быть подключен к разным источникам данных и обладать разным набором функций.
Примечание: Конвейеры Heroku позволяют создавать, продвигать и удалять приложения по запросу, чтобы упростить рабочий процесс непрерывная доставка. Вы даже можете подключить GitHub, чтобы каждая функциональная ветвь получала временное приложение для тестирования.
Чтобы создать свое первое приложение с использованием интерфейса командной строки Heroku, убедитесь, что вы уже вошли в систему Heroku, и запустите либо команду
heroku apps:create, либо ее псевдоним:$ heroku create Creating app... done, ⬢ polar-island-08305 https://polar-island-08305.herokuapp.com/ | https://git.heroku.com/polar-island-08305.gitпредварительно> кодовый блок>По умолчанию выбирается случайное имя приложения, которое гарантированно будет уникальным, например
polar-island-08305. Вы также можете выбрать свое собственное, но оно должно быть уникальным для всей платформы Heroku, потому что это часть доменного имени, которое вы получаете бесплатно. Вы быстро узнаете, занято ли оно:$ heroku create portfolio-project Creating ⬢ portfolio-project... ! ▸ Name portfolio-project is already takenпредварительно> кодовый блок>Если подумать о том, сколько людей используют Heroku, то неудивительно, что кто-то уже создал приложение с названием
portfolio-project. Когда вы запускаете командуheroku createв репозитории Git, Heroku автоматически добавляет новый удаленный сервер в ваш файл.git/config:$ tail -n3 .git/config [remote "heroku"] url = https://git.heroku.com/polar-island-08305.git fetch = +refs/heads/*:refs/remotes/heroku/*предварительно> кодовый блок>Последние три строки в вашем файле конфигурации Git определяют удаленный сервер с именем
heroku, который указывает на ваше уникальное приложение Heroku.Как правило, после клонирования репозитория у вас будет один удаленный сервер — например, на GitHub или Bitbucket — в вашей конфигурации Git. Однако в локальном репозитории может быть несколько Git remotes. Позже вы будете использовать эту функцию для выпуска новых приложений и их развертывания в Heroku.
Примечание: Иногда работа с Git может привести к путанице. Если вы заметили, что случайно создали приложение Heroku вне вашего локального репозитория Git или через веб-интерфейс, вы все равно можете добавить соответствующий Git remote вручную. Сначала измените свой каталог на корневую папку project. Затем перечислите свои приложения, чтобы найти нужное название:
$ heroku apps === jdoe@company.com Apps fathomless-savannah-61591 polar-island-08305 sleepy-thicket-59477предварительно> кодовый блок>После того, как вы определили название вашего приложения — в данном случае,
polar-island-08305— вы можете использовать командуgit remote addили соответствующий плагинgitв интерфейсе интерфейса Heroku, чтобы добавить удаленный названныйheroku:$ heroku git:remote --app polar-island-08305 set git remote heroku to https://git.heroku.com/polar-island-08305.gitпредварительно> кодовый блок>При этом будет добавлен удаленный сервер с именем
heroku, если не указано иное.Когда вы создавали новое приложение, оно сообщало вам свой общедоступный веб-адрес в домене
.herokuapp.com. В этом руководстве общедоступным веб-адресом былhttps://polar-island-08305.herokuapp.com, но ваш будет другим. Попробуйте перейти в веб-браузере к своему уникальному домену и посмотрите, что произойдет дальше. Если вы не можете вспомнить точный URL-адрес, просто введите командуheroku openв терминале, находясь в корневой папке проекта. Это откроет новое окно браузера и выберет нужный ресурс:Пустое приложение Heroku
Отличная работа! Ваше приложение Heroku уже отвечает на HTTP-запросы. Однако в данный момент оно пустое, поэтому Heroku отображает общий вид заполнителя вместо вашего содержимого. Давайте развернем ваш проект Django в этом пустом приложении.
Шаг 7: Разверните свой проект Django на Heroku
На данный момент у вас есть все необходимое для начала размещения вашего проекта Django на Heroku. Однако, если вы попытаетесь развернуть свой проект на Heroku сейчас, это приведет к сбою, поскольку Heroku не знает, как создавать, упаковывать и запускать ваш проект. Он также не знает, как установить определенные зависимости Python, перечисленные в вашем файле требований. Сейчас вы это исправите.
Выберите пакет сборки
Heroku автоматизирует многие этапы развертывания, но для этого необходимо знать настройки вашего проекта и технологический стек. Рецепт создания и развертывания проекта известен как пакет сборки. Уже доступно несколько официальных пакетов сборки для многих серверных технологий, включая Node.js, Ruby, Java, PHP, Python, Go, Scala и Clojure. Кроме того, вы можете найти сторонние пакеты сборки для менее популярных языков, таких как C.
Вы можете установить его вручную при создании нового приложения или позволить Heroku определить его на основе файлов в вашем репозитории. Один из способов для Heroku распознать проект на Python - это найти файл
requirements.txtв корневом каталоге вашего проекта. Убедитесь, что вы его создали, что, возможно, было сделано с помощьюpip freezeпри настройке вашей виртуальной среды, и что вы сохранили его в локальном репозитории.Некоторыми другими файлами, которые помогут Heroku распознать проект на Python, являются
Pipfileиsetup.py. Heroku также распознает веб-фреймворк Django и обеспечивает для него специальную поддержку. Таким образом, если ваш проект включает в себяrequirements.txt,Pipfile, илиsetup.py, то для установки пакета сборки обычно не требуется никаких действий, если только вы не имеете дело с каким-то крайним случаем.Выберите версию Python (необязательно)
По умолчанию Heroku выберет последнюю версию Python для запуска вашего проекта. Однако вы можете указать другую версию интерпретатора Python, поместив файл
runtime.txtв корневой каталог вашего проекта, не забыв зафиксировать его:$ echo python-3.9.6 > runtime.txt $ git add runtime.txt $ git commit -m "Request a specific Python version"предварительно> кодовый блок>Обратите внимание, что ваша версия Python должна включать все
major.minor.patchкомпоненты семантического управления версиями. Хотя для Python поддерживается всего несколько сред выполнения, обычно вы можете настроить версию исправления. Также есть бета-версия для PyPy.Укажите процессы, которые будут выполняться
Теперь, когда Heroku знает, как создать ваш проект на Django, ему нужно знать, как его запустить. Проект может состоять из нескольких компонентов, таких как веб-компонент, фоновые рабочие элементы, реляционная база данных, База данных NoSQL, запланированные задания и так далее. Каждый компонент выполняется в отдельном процессе.
Существует четыре основных типа процессов:
web: Получает HTTP-трафикworker: Выполняет работу в фоновом режимеclock: Выполняет запланированное заданиеrelease: Запускает задачу перед развертываниемВ этом руководстве вы рассмотрите только веб-процесс, потому что каждому проекту Django нужен хотя бы один веб-процесс. Вы можете определить его в файле с именем
Procfile, который должен быть помещен в корневой каталог вашего проекта:portfolio-project/ │ ├── .git/ │ ├── portfolio/ │ ├── __init__.py │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py │ ├── venv/ │ ├── .gitignore ├── db.sqlite3 ├── manage.py ├── Procfile ├── requirements.txt └── runtime.txtпредварительно> кодовый блок>
Procfile- это единый, не зависящий от языка формат для определения процессов, составляющих ваш проект. Он проинструктирует Heroku о том, как запускать ваш веб-сервер. Хотя работа со встроенным сервером разработки не рекомендуется для запуска проекта Django в рабочей среде, вы можете использовать его для этого упражнения:$ echo "web: python manage.py runserver 0.0.0.0:\$PORT" > Procfile $ git add Procfile $ git commit -m "Specify the command to run your project"предварительно> кодовый блок>Чтобы сделать сервер доступным из внешнего мира Heroku cloud, вы указываете адрес как
0.0.0.0вместо адреса по умолчаниюlocalhost. Это позволит привязать сервер к общедоступному сетевому интерфейсу. Heroku предоставляет номер порта через переменную окруженияPORT.Теперь вы можете протестировать эту конфигурацию, запустив свой проект Django локально с помощью интерфейса CLI Heroku:
$ heroku localпредварительно> кодовый блок>По умолчанию, если вы явно не укажете тип процесса, будет запущен процесс
web. Командаheroku localаналогична командеheroku local web. Кроме того, если вы не установите номер порта с флагом--port, то он будет использовать порт по умолчанию5000.Теперь вы указали процессы, которые хотите запустить в Heroku. Когда вы откроете URL-адрес
http://localhost:5000/в своем веб-браузере, вы снова увидите знакомую rocket на странице приветствия Django. Однако, чтобы получить доступ к тому же ресурсу через общедоступный интерфейс по адресуhttp://0.0.0.0:5000/, вам необходимо изменить конфигурацию Django, иначе вы получите сообщение об ошибке Неверный запрос.Настройка Django
Ранее вы создали простой проект на Django, и теперь пришло время настроить его так, чтобы он был готов к запуску на вашем экземпляре Heroku. Настройка проекта Django позволяет вам точно настроить различные параметры , начиная от учетных данных базы данных и заканчивая механизмом шаблонов.
Чтобы получить доступ к вашему проекту Django через нелокальный сетевой адрес, вам необходимо указать
ALLOWED_HOSTSв настройках вашего проекта. Помимо этого, Django buildpack для Python запускает для вас командуcollectstatic, для которой требуется указать параметрSTATIC_ROOT. Независимо от того, используете ли вы Heroku или нет, при развертывании проекта Django необходимо изменить еще несколько параметров конфигурации, но на данном этапе они не обязательны.Вместо того, чтобы настраивать Django вручную, вы можете воспользоваться ярлыком и установить удобный пакет
django-heroku, который позаботится обо всем этом и не только.Примечание: Пакет
django-herokuбольше не поддерживается, а соответствующий репозиторий на GitHub был заархивирован. Возможно, это не проблема, если вы просто хотите промочить ноги при развертывании проекта Django на Heroku. Однако для использования в производственных приложениях вы можете попробовать форк под названиемdjango-on-heroku,, который Адам предложил в разделе комментариев ниже. В качестве альтернативы вы можете использовать экспериментальный пакет сборки, описанный Эриком Мэттесом в его блоге.Прежде чем продолжить, убедитесь, что вы находитесь в нужной виртуальной среде, и не забудьте обновить файл требований, когда закончите:
(portfolio) $ python -m pip install django-heroku (portfolio) $ python -m pip freeze > requirements.txtпредварительно> кодовый блок>Это заменит содержимое вашего файла требований самыми последними зависимостями проекта. Затем добавьте эти две строки кода на Python в свой файл
portfolio/settings.pyи не забудьте после этого вернуться в корневую папку проекта:(portfolio) $ pushd portfolio/ (portfolio) $ echo "import django_heroku" >> settings.py (portfolio) $ echo "django_heroku.settings(locals())" >> settings.py (portfolio) $ popdпредварительно> кодовый блок>В качестве альтернативы, используйте
cd portfolio/иcd ..вместо командpushdиpopd, если они не работают в вашей оболочке.Поскольку вы добавили выходные данные команд
echoс операторами добавления перенаправления (>>), приведенных выше, теперь у вас есть две строки кода в самом низу вашего файла настроек Django:# portfolio/settings.py # ... import django_heroku django_heroku.settings(locals())предварительно> кодовый блок>Это обновит переменные в вашем локальном пространстве имен, добавив в них значения, основанные на макете вашего проекта и переменных среды. Наконец, не забудьте зафиксировать свои изменения в локальном репозитории Git:
(portfolio) $ git commit -am "Automatic configuration with django-heroku"предварительно> кодовый блок>Теперь у вас должна быть возможность получить доступ к веб-серверу Django, используя имя хоста
0.0.0.0. Без этого вы не смогли бы посещать свое приложение через общедоступный домен Heroku.Настройка приложения Heroku
Вы выбрали пакет сборки и версию Python для своего проекта. Вы также указали веб-процесс для получения HTTP-трафика и настроили свой проект на Django. На последнем этапе настройки перед развертыванием вашего проекта Django в Heroku необходимо настроить переменные среды в удаленном приложении Heroku.
Независимо от вашего облачного провайдера, важно позаботиться об управлении конфигурацией . В частности, конфиденциальная информация, такая как пароли к базе данных или секретный ключ, используемый для криптографической подписи сеансов Django, не должна храниться в коде. Вы также должны не забыть отключить режим отладки, так как это может сделать ваш сайт уязвимым для хакерских атак. Однако в этом руководстве оставьте все как есть, так как у вас не будет никакого пользовательского контента для показа.
Обычным средством передачи таких данных являются переменные среды. Heroku позволяет управлять переменными среды приложения с помощью команды
heroku config. Например, вы можете захотеть прочитать секретный ключ Django из переменной окружения вместо того, чтобы жестко кодировать его в файлеsettings.py.Поскольку вы установили
django-heroku, вы можете позволить ему обрабатывать детали. Он обнаруживает переменную окруженияSECRET_KEYи использует ее для установки секретного ключа Django для криптографической подписи. Крайне важно сохранить этот секретный ключ в безопасности. Вportfolio/settings.pyнайдите автоматически сгенерированную строку, где Django определяет переменнуюSECRET_KEYи прокомментируйте ее:# SECURITY WARNING: keep the secret key used in production secret! # SECRET_KEY = 'django-insecure-#+^6_jx%8rmq9oa(frs7ro4pvr6qn7...предварительно> кодовый блок>Вместо того, чтобы закомментировать переменную
SECRET_KEY, вы могли бы также полностью удалить ее. Но пока придержите коней, потому что она может вам понадобиться через секунду.Когда вы попытаетесь запустить
heroku localсейчас, он будет жаловаться, что секретный ключ Django больше не определен, и сервер не запустится. Чтобы решить эту проблему, вы могли бы установить переменную в вашей текущей терминальной сессии, но удобнее создать специальный файл с именем.envсо всеми вашими переменными для локального тестирования. Командная строка Heroku распознает этот файл и загрузит переменные среды, определенные в нем.Примечание: Git не должен отслеживать файл
.env, который вы только что создали. Он уже должен быть указан в вашем файле.gitignore, если вы выполнили предыдущие шаги и использовали веб-сайт gitignore.io.Быстрый способ сгенерировать случайный секретный ключ - использовать инструмент командной строки OpenSSL:
$ echo "SECRET_KEY=$(openssl rand -base64 32)" > .envпредварительно> кодовый блок>Если на вашем компьютере не установлен OpenSSL и вы используете Linux или macOS, вы также можете сгенерировать секретный ключ с помощью Генератора псевдослучайных чисел Unix:
$ echo "SECRET_KEY=$(head -c 32 /dev/urandom | base64)" > .envпредварительно> кодовый блок>Любой из этих двух методов обеспечит получение действительно случайного секретного ключа. Возможно, у вас возникнет соблазн использовать гораздо менее безопасный инструмент, такой как
md5sum, и ввести в него текущую дату, но на самом деле это небезопасно, поскольку злоумышленник может перечислить возможные выходные данные.Если ни одна из приведенных выше команд не работает в вашей операционной системе, то временно раскомментируйте переменную
SECRET_KEYизportfolio/settings.pyи запустите оболочку Django в вашей активной виртуальной среде:(portfolio) $ python manage.py shellпредварительно> кодовый блок>Оказавшись там, вы сможете сгенерировать новый случайный секретный ключ с помощью встроенных утилит управления Django:
>>> from django.core.management.utils import get_random_secret_key >>> print(get_random_secret_key()) 6aj9il2xu2vqwvnitsg@!+4-8t3%zwr@$agm7x%o%yb2t9ivt%предварительно> кодовый блок>Возьмите этот ключ и используйте его для установки переменной
SECRET_KEYв вашем файле.env:$ echo 'SECRET_KEY=6aj9il2xu2vqwvnitsg@!+4-8t3%zwr@$agm7x%o%yb2t9ivt%' > .envпредварительно> кодовый блок>Команда
heroku localавтоматически выбирает переменные среды, определенные в вашем файле.env, поэтому теперь она должна работать должным образом. Не забудьте снова закомментировать переменнуюSECRET_KEY, если вы ее раскомментировали!Последним шагом является указание секретного ключа Django для удаленного приложения Heroku:
$ heroku config:set SECRET_KEY='6aj9il2xu2vqwvnitsg@!+4-8t3%zwr@$agm7x%o%yb2t9ivt%' Setting SECRET_KEY and restarting ⬢ polar-island-08305... done, v3 SECRET_KEY: 6aj9il2xu2vqwvnitsg@!+4-8t3%zwr@$agm7x%o%yb2t9ivt%предварительно> кодовый блок>Это навсегда установит новую переменную среды в удаленной инфраструктуре Heroku, которая немедленно станет доступной для вашего приложения Heroku. Вы можете указать эти переменные среды на панели управления Heroku или с помощью интерфейса командной строки Heroku:
$ heroku config === polar-island-08305 Config Vars SECRET_KEY: 6aj9il2xu2vqwvnitsg@!+4-8t3%zwr@$agm7x%o%yb2t9ivt% $ heroku config:get SECRET_KEY 6aj9il2xu2vqwvnitsg@!+4-8t3%zwr@$agm7x%o%yb2t9ivt%предварительно> кодовый блок>Позже вы можете заменить его другим значением или полностью удалить. Смена секретов часто является хорошей идеей для устранения угроз безопасности. Как только происходит утечка секретной информации, вы должны быстро изменить ее, чтобы предотвратить несанкционированный доступ и ограничить ущерб.
Сделать релиз приложения
Возможно, вы заметили, что при настройке переменной окружения с помощью команды
heroku config:setв выходных данных появляется своеобразная строка"v3", которая напоминает номер версии. Это не совпадение. Каждый раз, когда вы модифицируете свое приложение, развертывая новый код или меняя конфигурацию, вы создаете новый выпуск, который увеличивает то v-число, которое вы видели ранее.Чтобы просмотреть хронологическую историю выпусков вашего приложения, снова воспользуйтесь командной строкой Heroku:
$ heroku releases === polar-island-08305 Releases - Current: v3 v3 Set SECRET_KEY config vars jdoe@company.com 2021/07/02 14:24:29 +0200 (~ 1h ago) v2 Enable Logplex jdoe@company.com 2021/07/02 14:19:56 +0200 (~ 1h ago) v1 Initial release jdoe@company.com 2021/07/02 14:19:48 +0200 (~ 1h ago)предварительно> кодовый блок>Элементы в списке сортируются от самых новых к самым старым. Номер выпуска всегда увеличивается. Даже если вы вернете свое приложение к предыдущей версии, оно создаст новую версию, чтобы сохранить полную историю.
Создание новых версий приложений с помощью Heroku сводится к тому, чтобы поместить код в ваш локальный репозиторий Git, а затем перенести вашу ветку на удаленный сервер Heroku. Однако, прежде чем вы это сделаете, всегда дважды проверяйте
git statusна наличие любых незафиксированных изменений и добавляйте их в локальный репозиторий по мере необходимости, например:$ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: portfolio/settings.py no changes added to commit (use "git add" and/or "git commit -a") $ git add . $ git commit -m "Remove a hardcoded Django secret key"предварительно> кодовый блок>Хотя вы можете запустить любую локальную ветвь, она должна быть переведена в определенную удаленную ветвь, чтобы развертывание заработало. Heroku развертывается только из удаленных ветвей
mainилиmaster{. Если вы последовали этому примеру и создали свой репозиторий с помощью командыgit init, то ваша ветка по умолчанию должна называтьсяmaster. В качестве альтернативы, если вы создали его на GitHub, то он будет называтьсяmain.Поскольку на удаленном сервере Heroku существуют как
main, так иmasterветки, вы можете использовать сокращенный синтаксис для запуска сборки и развертывания:$ git push heroku masterпредварительно> кодовый блок>Здесь
masterотносится как к вашему локальному, так и к удаленному филиалу. Если вы хотите перейти к другой локальной ветви, укажите ее название, например,bugfix/stack-overflow, затем двоеточие (:) и удаленную целевую ветвь:$ git push heroku bugfix/stack-overflow:masterпредварительно> кодовый блок>Давайте теперь перенесем ветку по умолчанию в Heroku и посмотрим, что произойдет дальше:
$ git push heroku master (...) remote: Compressing source files... done. remote: Building source: remote: remote: -----> Building on the Heroku-20 stack remote: -----> Determining which buildpack to use for this app remote: -----> Python app detected remote: -----> Using Python version specified in runtime.txt remote: -----> Installing python-3.9.6 remote: -----> Installing pip 20.2.4, setuptools 47.1.1 and wheel 0.36.2 remote: -----> Installing SQLite3 remote: -----> Installing requirements with pip (...) remote: -----> Compressing... remote: Done: 60.6M remote: -----> Launching... remote: Released v6 remote: https://polar-island-08305.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy... done. To https://git.heroku.com/polar-island-08305.git * [new branch] master -> masterпредварительно> кодовый блок>Отправка кода на Heroku аналогична отправке кода на GitHub, Bitbucket или другой удаленный Git-сервер. Кроме того, это также запускает процесс сборки. Heroku определит подходящий пакет сборки на основе файлов вашего проекта. Он будет использовать интерпретатор Python, указанный в вашем файле
runtime.txt, и установит зависимости изrequirements.txt.На практике удобнее отправить свой код только один раз на выбранный вами Git-сервер, такой как GitHub, и позволить ему запустить сборку на Heroku через веб-интерфейс. Вы можете прочитать об интеграции с GitHub в официальной документации Heroku, если хотите изучить это подробнее.
Примечание: При первом загрузке кода в Heroku может потребоваться некоторое время, поскольку платформе необходимо развернуть новую среду Python, установить зависимости и создать образ для своих контейнеров. Однако последующие развертывания будут выполняться быстрее, поскольку установленные зависимости уже будут кэшированы.
Вы можете перейти в своем браузере к общедоступному URL-адресу приложения Heroku. В качестве альтернативы, набрав команду
heroku openв своем терминале, вы сможете сделать это за себя:Проект Django, размещенный в открытом доступе
Поздравляем! Вы только что сделали свой проект общедоступным.
Шаг 8: Настройка реляционной базы данных
Отличная работа! Вы почти закончили с настройкой хостинга для вашего проекта Django на Heroku. Осталось еще одно, заключительное условие, так что подождите минуту-другую.
До сих пор вы использовали файловую базу данных SQLite, предварительно настроенную в Django. Она подходит для тестирования на вашем локальном компьютере, но не будет работать в облаке. В Heroku используется временная файловая система, которая забывает все изменения с момента вашего последнего развертывания или перезагрузки сервера. Для сохранения ваших данных в облаке вам потребуется автономный компонент database engine.
В этом руководстве вы будете использовать бесплатный экземпляр PostgreSQL, предлагаемый Heroku, в качестве полностью управляемой базы данных как сервиса. При желании вы можете использовать другой движок базы данных, но PostgreSQL обычно не требует дополнительной настройки.
Настройка сервера PostgreSQL
Когда Heroku обнаруживает фреймворк Django в вашем проекте, он автоматически запускает бесплатный, но ограниченный экземпляр PostgreSQL. Он устанавливает переменную среды
DATABASE_URLс общедоступным URL-адресом для базы данных вашего приложения. Подготовка выполняется при первом развертывании приложения, что можно подтвердить, проверив включенные дополнения и переменные конфигурации:$ heroku addons Add-on Plan Price State ──────────────────────────────────────────────── ───────── ───── ─────── heroku-postgresql (postgresql-trapezoidal-06380) hobby-dev free created └─ as DATABASE The table above shows add-ons and the attachments to the current app (...) $ heroku config === polar-island-08305 Config Vars DATABASE_URL: postgres://ytfeiommjakmxb...amazonaws.com:5432/dcf99cdrgdaqba SECRET_KEY: 6aj9il2xu2vqwvnitsg@!+4-8t3%zwr@$agm7x%o%yb2t9ivt%предварительно> кодовый блок>Обычно вам нужно было бы явно использовать эту переменную в
portfolio/settings.py, но поскольку вы установили модульdjango-heroku, нет необходимости указывать URL-адрес базы данных или имя пользователя и пароль. Он автоматически выберет URL-адрес базы данных из переменной среды и настроит параметры для вас.Более того, вам не нужно устанавливать драйвер базы данных для подключения к вашему экземпляру PostgreSQL, предоставленному Heroku. С другой стороны, желательно выполнять локальную разработку с использованием базы данных того же типа, что и в производственной среде. Это обеспечивает паритет между вашими средами и позволяет вам воспользоваться преимуществами расширенных функций, предоставляемых данным компонентом database engine.
Когда вы установили
django-heroku, он уже получилpsycopg2как переходную зависимость:(portfolio) $ pip list Package Version --------------- ------- asgiref 3.4.1 dj-database-url 0.5.0 Django 3.2.5 django-heroku 0.3.1 pip 21.1.3 psycopg2 2.9.1 pytz 2021.1 setuptools 56.0.0 sqlparse 0.4.1 whitenoise 5.2.0предварительно> кодовый блок>
psycopg2это драйвер Python для базы данных PostgreSQL. Поскольку драйвер уже присутствует в вашей среде, вы можете начать использовать PostgreSQL в своем приложении прямо сейчас.Для бесплатного тарифного плана hobby-dev Heroku накладывает некоторые ограничения. У вас может быть не более 10 000 строк, которые должны занимать 1 ГБ памяти. У вас не может быть более 20 подключений к вашей базе данных. Кэш отсутствует, а производительность ограничена, помимо многих других ограничений.
В любой момент вы можете воспользоваться командой
heroku pg, чтобы просмотреть подробную информацию о вашей базе данных PostgreSQL, подготовленной Heroku:$ heroku pg === DATABASE_URL Plan: Hobby-dev Status: Available Connections: 1/20 PG Version: 13.3 Created: 2021-07-02 08:55 UTC Data Size: 7.9 MB Tables: 0 Rows: 0/10000 (In compliance) - refreshing Fork/Follow: Unsupported Rollback: Unsupported Continuous Protection: Off Add-on: postgresql-trapezoidal-06380предварительно> кодовый блок>Эта краткая сводка содержит информацию о текущем количестве подключений, размере вашей базы данных, количестве таблиц и строк и так далее.
В следующем подразделе вы узнаете, как сделать что-то полезное с вашей базой данных PostgreSQL на Heroku.
Обновить схему удаленной базы данных
Когда вы определяете новые модели в своих приложениях на Django, вы обычно создаете новые файлы миграции и применяете их к базе данных. Чтобы обновить схему удаленного экземпляра PostgreSQL, вам необходимо выполнить те же команды миграции, что и раньше, только в среде Heroku. Позже вы увидите рекомендуемый способ сделать это, а пока вы можете запустить соответствующую команду вручную:
$ heroku run python manage.py migrate Running python manage.py migrate on ⬢ polar-island-08305... up, run.1434 (Free) Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK (...)предварительно> кодовый блок>Плагин
runзапускает временный контейнер под названием одноразовый dyno, который похож на Docker контейнер, имеющий доступ к исходному коду вашего приложения и его конфигурации. Поскольку dynos работают под управлением контейнеров Linux, вы можете выполнить любую команду в одном из них, включая интерактивный сеанс терминала:$ heroku run bash Running bash on ⬢ polar-island-08305... up, run.9405 (Free) (~) $ python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: No migrations to apply.предварительно> кодовый блок>Запуск командной строки Bash во временном динамическом режиме является обычной практикой для проверки состояния вашего приложения Heroku или управления им. Вы можете представить это как вход на удаленный сервер. Единственное отличие заключается в том, что вы запускаете одноразовую виртуальную машину, которая содержит копию файлов вашего проекта и получает те же переменные среды, что и ваш live web dyno.
Однако такой способ переноса базы данных не самый надежный, поскольку вы можете забыть о нем или совершить ошибку в дальнейшем. Вам лучше автоматизировать этот шаг в
Procfile, добавив выделенную строку:web: python manage.py runserver 0.0.0.0:$PORT release: python manage.py migrateпредварительно> кодовый блок>Теперь каждый раз, когда вы выпускаете новый релиз, Heroku будет выполнять все ожидающие миграции:
$ git commit -am "Automate remote migrations" $ git push heroku master (...) remote: Verifying deploy... done. remote: Running release command... remote: remote: Operations to perform: remote: Apply all migrations: admin, auth, contenttypes, sessions remote: Running migrations: remote: No migrations to apply. To https://git.heroku.com/polar-island-08305.git d9f4c04..ebe7bc5 master -> masterпредварительно> кодовый блок>Это по-прежнему позволяет вам выбирать, следует ли на самом деле выполнять какие-либо новые миграции или нет. Если вы выполняете масштабную миграцию, выполнение которой может занять некоторое время, рассмотрите возможность включения режима обслуживания , чтобы избежать повреждения или потери данных во время работы пользователей с вашим приложением:
$ heroku maintenance:on Enabling maintenance mode for ⬢ polar-island-08305... doneпредварительно> кодовый блок>В режиме обслуживания Heroku отобразит эту удобную страницу:
Приложение Heroku в режиме обслуживания
Не забудьте отключить его с помощью
heroku maintenance:offпосле завершения миграции.Заполнить базу данных
Вы создали таблицы базы данных для своих моделей Django, применив миграции, но эти таблицы по большей части остаются пустыми. Рано или поздно вам захочется внести в них какие-то данные. Лучший способ взаимодействия с вашей базой данных - через интерфейс Django admin. Чтобы начать его использовать, сначала необходимо удаленно создать суперпользователя:
$ heroku run python manage.py createsuperuser Running python manage.py createsuperuser on ⬢ polar-island-08305... up, run.2976 (Free) Username (leave blank to use 'u23948'): admin Email address: jdoe@company.com Password: Password (again): Superuser created successfully.предварительно> кодовый блок>Не забудьте создать суперпользователя в базе данных, подключенной к вашему удаленному приложению Heroku, введя перед соответствующей командой
heroku run. После предоставления уникального имени и надежного пароля для суперпользователя вы сможете войти в режим администратора Django и начать добавлять записи в свою базу данных.Вы можете получить доступ к представлению администратора Django, перейдя по пути
/admin, указанному после вашего уникального доменного имени приложения Heroku, например:https://polar-island-08305.herokuapp.com/admin/предварительно> кодовый блок>Вот как это должно выглядеть после входа в систему:
Сайт администратора Django на Heroku
Одним из способов прямого управления вашей удаленной базой данных может быть использование переменной
DATABASE_URLиз Heroku и расшифровка ее отдельных компонентов для подключения через ваш любимый SQL-клиент. В качестве альтернативы, интерфейс Heroku CLI предоставляет удобныйpsqlплагин, который работает как стандартный интерактивный терминал PostgreSQL, но не требует установки какого-либо программного обеспечения:$ heroku psql --> Connecting to postgresql-round-16446 psql (10.17 (Ubuntu 10.17-0ubuntu0.18.04.1), server 13.3 (Ubuntu 13.3-1.pgdg20.04+1)) WARNING: psql major version 10, server major version 13. Some psql features might not work. SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off) Type "help" for help. polar-island-08305::DATABASE=> SELECT username, email FROM auth_user; username | email ----------+------------------ admin | jdoe@company.com (1 row)предварительно> кодовый блок>Обратите внимание, что команда
heroku psqlподключает вас к нужной базе данных в инфраструктуре Heroku, не требуя никаких сведений, таких как имя хоста, имя пользователя или пароль. Кроме того, вам не нужно было устанавливать клиент PostgreSQL для запроса одной из таблиц с помощью SQL.Как разработчик Django, вы, возможно, привыкли полагаться на его объектно-реляционный преобразователь (ORM) вместо того, чтобы вводить SQL-запросы вручную. Вы можете снова воспользоваться интерфейсом CLI Heroku, запустив интерактивную оболочку Django в удаленном приложении Heroku:
$ heroku run python manage.py shell Running python manage.py shell on ⬢ polar-island-08305... up, run.9914 (Free) Python 3.9.6 (default, Jul 02 2021, 15:33:41) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole)предварительно> кодовый блок>Затем импортируйте встроенную модель
Userи используйте ее менеджер для извлечения соответствующих пользовательских объектов из базы данных:>>> from django.contrib.auth.models import User >>> User.objects.all() <QuerySet [<User: admin>]>предварительно> кодовый блок>Вы должны увидеть созданного вами ранее суперпользователя. Использование оболочки Django позволяет запрашивать подключенную базу данных с помощью объектно-ориентированного API. Если вам не нравится оболочка по умолчанию, то вы можете установить альтернативный Python REPL, такой как IPython или bpython, и Django распознает это.
Хорошо, вот и все! У вас есть полноценный проект на Django, размещенный на Heroku, с подключенной реляционной базой данных. Теперь вы можете поделиться общедоступной ссылкой на него, например, в своем файле README на GitHub, чтобы мир оценил вашу работу.
Заключение
Теперь вы знаете, как превратить свои идеи в живые веб-приложения, которые понравятся вашим друзьям и близким. Возможно, кто-то из отдела кадров наткнется на один из ваших проектов и предложит вам работу. Регистрация бесплатной учетной записи Heroku для размещения вашего кода на Django - один из лучших способов войти в мир облачных вычислений.
В этом руководстве вы узнали, как:
- Запустите свой проект на Django онлайн за считанные минуты
- Разверните свой проект в Heroku с помощью Git
- Используйте Библиотеку интеграции Django-Heroku
- Подключите свой проект Django к автономной реляционной базе данных
- Управлять конфигурацией вместе с конфиденциальными данными
Вы можете загрузить окончательный исходный код, а также снимки отдельных шагов, перейдя по ссылке ниже:
Получите исходный код: Нажмите здесь, чтобы просмотреть сопутствующий проект Django, а также снимки отдельных шагов, выполненных в этом руководстве.
Следующие шаги
В этом руководстве лишь поверхностно рассказано о том, что возможно с помощью Heroku. В нем намеренно упущены многие мелкие детали, но Heroku может предложить гораздо больше, даже с учетом ограниченной бесплатной учетной записи. Вот несколько идей, которые следует рассмотреть, если вы хотите вывести свой проект на новый уровень:
Настройка сервера WSGI: Прежде чем публиковать свой проект, первое, что нужно сделать, это заменить встроенный сервер разработки Django на что-то более безопасное и производительное, например, Gunicorn. Django предоставляет удобный контрольный список развертывания с рекомендациями, которые вы можете использовать.
Включить ведение журнала: Приложение, работающее в облаке, не находится под вашим непосредственным контролем, что затрудняет отладку и устранение неполадок, чем если бы оно было запущено на вашем локальном компьютере. Поэтому вам следует включить ведение журнала с помощью одного из дополнений Heroku.
Предоставляйте статические файлы. Используйте внешний сервис, такой как Amazon S3, или сеть доставки контента (CDN), для размещения статических ресурсов, таких как CSS, JavaScript или изображения. Это может значительно разгрузить ваш веб-сервер и использовать преимущества кэширования для ускорения загрузки.
Предоставляйте динамический контент: Из-за эфемерной файловой системы Heroku данные, предоставляемые пользователями вашему приложению, не могут сохраняться в виде локальных файлов. Использование реляционной базы данных или даже базы данных NoSQL не всегда является наиболее эффективным или удобным вариантом. В таких ситуациях вы можете воспользоваться внешним сервисом, таким как Amazon S3.
Добавьте пользовательский домен: По умолчанию ваши приложения Heroku размещаются в домене
.herokuapp.com. Хотя это быстро и полезно для хобби-проекта, вы, вероятно, захотите использовать пользовательский домен в более профессиональных условиях.Добавьте SSL-сертификат: Когда вы определяете пользовательский домен, вам нужно будет предоставить соответствующий SSL-сертификат для доступа к вашему приложению по протоколу HTTPS. В современном мире это просто необходимо, потому что некоторые производители веб-браузеров уже объявили, что в будущем они не будут отображать небезопасные веб-сайты.
Подключение к GitHub: Вы можете автоматизировать свои развертывания, разрешив GitHub запускать новую сборку и выпуск релиза при объединении запроса на извлечение с основной ветвью. Это сокращает количество шагов, выполняемых вручную, и обеспечивает безопасность вашего исходного кода.
Используйте конвейеры Heroku: Heroku рекомендует вам следовать рекомендациям с минимальными усилиями. Он обеспечивает непрерывный рабочий процесс доставки, при необходимости автоматизируя создание тестовых сред.
Включите автоматическое масштабирование: По мере роста вашего приложения потребность в ресурсах будет возрастать. Каждый год перед Рождеством на большинстве платформ электронной коммерции наблюдается всплеск трафика. Современным решением этой проблемы является горизонтальное масштабирование, при котором ваше приложение реплицируется в нескольких копиях, чтобы соответствовать спросу. Автоматическое масштабирование может реагировать на такие скачки, когда это необходимо.
Разделение на микросервисы: Горизонтальное масштабирование лучше всего работает, когда ваш проект состоит из нескольких независимых микросервисов, которые можно масштабировать по отдельности. Такая архитектура может сократить время разработки, но сопряжена со своим набором проблем.
Переход с Heroku: Как только вы освоитесь с Heroku, вы можете подумать о переходе на другую облачную платформу, такую как Google App Engine или даже базовую инфраструктуру Amazon, чтобы снизить ваши расходы.
Продолжайте и ознакомьтесь с официальной документацией и руководствами по Python на веб-сайте Heroku, чтобы найти более подробную информацию по этим темам.
<статус завершения article-slug="django-хостинг-на-heroku" class="btn-group mb-0" data-api-article-bookmark-url="/api/v1/articles/джанго-хостинг-на-heroku/закладка/" data-api-url-адрес статуса завершения статьи="/api/v1/articles/django-хостинг-на-heroku/completion_status/"> статус завершения> <кнопка поделиться bluesky-text="Интересная статья на #Python от @realpython.com :" email-body="Ознакомьтесь с этой статьей о Python:%0A%0AHosting проекта Django на Heroku" email-subject="Статья о Python для вас" twitter-text="Интересная статья о Python от @realpython:" url="https://realpython.com/django-hosting-on-heroku /" url-title="Размещение проекта Django на Heroku"> кнопка поделиться>Смотрите сейчас, к этому уроку прилагается соответствующий видеокурс, созданный командой Real Python. Посмотрите его вместе с письменным руководством, чтобы углубить свое понимание: Разместите свой проект на Django на Heroku
Back to Top





