Рубрики
Без рубрики

От проекта до производства с Python

Мы надеемся, что вы и ваши близкие останетесь в безопасности от пандемии Covid-19. В результате его … с меткой Python, WebDev, учебным пособием.

Мы надеемся, что вы и ваши близкие останетесь в безопасности от пандемии Covid-19. В результате его влияния на большие собрания, Pycon 2020 был отменено Изменено на онлайн -мероприятие Анкет Несмотря на то, что невозможность собраться лично была обескураживанием для организаторов, докладчиков и посетителей, сообщество Python поделилось виртуальными пятью пятью и объятиями с Pycon US 2020 онлайн. Мы Записал наш запланированный семинар Heroku для мероприятия , на котором основан этот пост в блоге.

Представьте, что вы только что провели последние две недели, вкладывая всю свою энергию в приложение. Это великолепно, и вы, наконец, готовы поделиться им в Интернете. Как ты сделал это? В этом посте мы собираемся пройти практический процесс, направленный на то, что разработчики Python развертывают свое местное приложение в Heroku.

Приложение, работающее на Heroku, работает лучше всего как 12-факло приложение Анкет Это на самом деле концепция, которую Хероку отстаивал более 10 лет назад. Это идея, что вы создаете приложение с учетом надежных перераспределений. Большая часть этого семинара на самом деле не специфична для Героку, а скорее о том, чтобы принимать регулярное приложение Django и обеспечение его соответствия 12 -факторной методологии приложения, которая стала стандартом, который большинство поставщиков развертывания облака не только поддерживают, но и рекомендуют.

Предварительные условия

Прежде чем завершить этот семинар, мы собираемся сделать несколько предположений о вас, дорогой читатель. Во -первых, это не будет учебником Django. Если вы ищете введение в Django, Их документация имеет несколько отличных учебных пособий, чтобы следовать Анкет Вам также понадобится немного Git Знакомство, и установите его на машине.

Чтобы завершить этот семинар, вам понадобится несколько вещей:

  1. Аккаунт на Heroku Анкет Это совершенно бесплатно и не требует никакой платежной информации.
  2. Heroku Cli Анкет Как только ваше приложение будет на Heroku, это облегчит управление им.
  3. Вам нужно клонировать репозиторий для этого рабочего корабля и иметь возможность открыть его в текстовом редакторе.

Со всем этим отсортировано, пришло время начать!

Оглянись

С клонированным проектом и доступным на вашем компьютере, найдите время, чтобы исследовать его структуру. Мы будем изменять Manage.py и Требования.txt файлы, а также настройки.py и wsgi.py в Получив запуск папка.

Обновление .gitignore

Начнем с того, что мы будем обновлять файл gitignore. Файл Gitignore исключает файлы который вы не хотите проверять в своем репозитории. Чтобы развернуться в Heroku, вам технически не нужен файл Gitignore. Вы можете успешно развернуть без него, но настоятельно рекомендуется всегда иметь его (и не только для Heroku). Гитиньоре может быть важным для удержания паролей и ключей учетных данных, больших двоичных файлов, локальных конфигураций или чего -либо еще, что вы не хотите подвергать публике.

Скопируйте следующий блок кода и вставьте его в файл Gitignore в корне вашего проекта:

/venv
__pycache__
db.sqlite3 # not needed if you're using Postgres locally
gettingstarted/static/

Вен каталог содержит Виртуальная среда С пакетами, необходимыми для вашей местной версии Python. Точно так же __pycache__ каталог содержит предварительно скомпилированные модули, уникальные для вашей системы Анкет Мы не хотим проверять нашу базу данных ( db.sqlite3 ), так как мы не хотим раскрывать какие -либо локальные данные. Наконец, статические файлы будут автоматически сгенерированы для нас во время процесса сборки и развертывания в Heroku, поэтому мы исключим Получение запуска/статического/ каталог.

Иди и беги GIT Статус На вашем терминале, чтобы убедиться, что Gitignore является единственным файлом, который был изменен. После этого звоните git добавить , тогда git commit -m "Шаг 1 добавить git игнорировать" Анкет

Модулизуйте свои настройки

Далее мы хотим модулизировать наши настройки Django. Для этого добавьте новую папку внутри начиная называется Настройки Анкет Затем переместите настройки.py Файл в этот каталог. Поскольку эта схема именования немного сбивает с толку, давайте продолжим и переименованы в этот файл в base.py . Мы назовем это так, потому что это будет служить базовой (или по умолчанию) конфигурации, из которой будут извлечены все другие конфигурации. Если что -то вроде dev.py или local.py Вместо этого имеет смысл, не стесняйтесь использовать это вместо этого!

Местные проекты имеют только одну среду для отслеживания: вашей местной машины. Но как только вы захотите развернуться в разные места, важно отслеживать, какие настройки идут куда. Таким образом, гнездование наших настройки позволяет нам легко отслеживать, где находятся эти настройки, а также воспользоваться трубопроводами Heroku с непрерывной доставкой.

Перемещая и переименуя файл настроек, наше приложение Django теперь имеет две разбитые ссылки. Давайте исправим их, прежде чем мы пойдем дальше.

Первый в wsgi.py в вашем Получив запуск папка. Откройте это и на строка 12 Вы увидите, что модуль настроек Django по умолчанию устанавливается на Получение запуска. Settings , файл, которого больше не существует:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "gettingstarted.settings")

Чтобы исправить это, добавьте имя только что созданного файла в подпапке «Настройки». Например, так как мы назвали наши base.py , теперь линия должна выглядеть так:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "gettingstarted.settings.base")

После сохранения это перейдите по одному каталогу, чтобы Manage.py . На строка 6 , вы увидите, что тот же по умолчанию установлена для модуля настройки Django. Еще раз, добавьте .base До конца этой линии, затем привермите их обоих, чтобы GIT.

Непрерывные трубопроводы

В жизненном цикле развертывания приложения обычно есть четыре этапа:

  1. Вы создаете свое приложение на этапе разработки на своей местной машине, чтобы убедиться, что оно работает.
  2. Затем наступает этап обзора, где вы проверяете, пройдут ли ваши изменения с полным набором тестов вашей базы кода.
  3. Если это хорошо, вы объединяете свои изменения в постановку. Здесь у вас есть условия как можно ближе к общественности, возможно, с некоторыми фиктивными данными, чтобы более точно предсказать, как изменение повлияет на ваших пользователей.
  4. Наконец, если все, что идет хорошо, вы стремитесь к производству, где изменение сейчас живет для ваших клиентов.

Рабочие процессы непрерывной доставки (CD) предназначены для проверки ваших изменений в условиях постепенно ближе и ближе к производству, а также с все более и более подробно. Непрерывная доставка – это мощный рабочий процесс, который может изменить ваш опыт в качестве разработчика после производства своего приложения. Heroku может сэкономить вам много времени здесь, так как мы уже создали инструменты для вас, чтобы иметь непрерывный рабочий процесс доставки. С вашей панели на приборной панели на Heroku вы можете – с простого нажатия кнопки! – Установите трубопровод Добавьте приложения к постановке и производству, и разверните их.

Если вы Подключите репозиторий GitHub , трубопроводы также могут автоматически развертывать и проверять новые PRS, открытые на вашем репо. Предоставляя инструменты и автоматизируя эти процессы, рабочий процесс непрерывной доставки Heroku достаточно мощный, чтобы помочь вам не отставать от цикла разработки.

Добавление нового промежуточного программного обеспечения в base.py

Модуляризация ваших настроек Django – отличный способ воспользоваться этим рабочим процессом непрерывной доставки, разделяя ваши настройки, независимо от того, развернете вы на Heroku или в другом месте, но есть еще одно изменение, которое мы должны внести в base.py .

Статические активы Django работают лучше всего, когда вы также используете белый шум пакет для управления статическими активами. Это действительно легко добавить в ваш проект.

В вашем base.py Файл, прокрутите вниз до строки 43, и вы должны увидеть множество имен пакетов, подобных этим:

MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
    # Whitenoise goes here
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
]

Это ваш список Django Middleware , которые похожи на плагины для вашего сервера. Django загружает ваше промежуточное программное обеспечение в тот заказ, который его перечисляет, поэтому вы всегда хотите сначала свою защиту промежуточного программного обеспечения, но важно добавить Whitenoise в качестве второго шага в этом базовом файле.

Скопируйте следующую строку кода и замените строку с надписью Белизен идет сюда с этим:

"whitenoise.middleware.WhiteNoiseMiddleware",

Мы загрузили отбеливание как промежуточное программное обеспечение, но на самом деле Используйте Сжатие отбеливания, нам нужно установить еще одну переменную. Скопируйте следующий код и вставьте его прямо в конце вашего base.py файл:

STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"

С этим мы закончили с base.py Анкет Поздравляю! Сохраните свою работу и совершите ее GIT.

Настройка heroku.py

Наши базовые настройки завершены, но теперь нам нужны наши настройки Heroku. Создайте новый файл в рамках Получение запуска/настройки называется heroku.py и вставьте следующий блок кода:

"""
Production Settings for Heroku
"""

import environ

# If using in your own project, update the project namespace below
from gettingstarted.settings.base import *

env = environ.Env(
    # set casting, default value
    DEBUG=(bool, False)
)

# False if not in os.environ
DEBUG = env('DEBUG')

# Raises django's ImproperlyConfigured exception if SECRET_KEY not in os.environ
SECRET_KEY = env('SECRET_KEY')

ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')

# Parse database connection url strings like psql://user:pass@127.0.0.1:8458/db
DATABASES = {
    # read os.environ['DATABASE_URL'] and raises ImproperlyConfigured exception if not found
    'default': env.db(),
}

В этом файле вы можете увидеть значения, которые мы перечисляем, – это те, которые мы переоцениваем из наших базовых настроек, так что это настройки, которые будут разными и уникальными для Heroku.

Для этого мы используем один из моих любимых пакетов, Django-environ Анкет Это позволяет нам быстро и легко взаимодействовать с средой операционной системы, не зная об этом. Он имеет встроенные конверсии типа, и, в частности, он имеет автоматический анализ базы данных. Это все, что нам нужно, чтобы разобрать наш URL базы данных Heroku Postgres, который нам дадут. Это просто очень удобно.

Heroku-специфические файлы

Это все, что нам нужно сделать, чтобы получить наше приложение в 12 факториальных факторов, но есть еще три файла, которые нам нужны для развертывания в Heroku.

Требования.txt

В дополнение к пакетам, который уже использует ваш проект, есть еще несколько, которые вам нужно развернуть в Heroku. Если мы посмотрим на предоставленное Требования.txt Файл, вы можете увидеть эти необходимые пакеты здесь. Мы уже говорили о Django, Django-environ и «Беленоуз», и мы уже настроили их для использования. Но два других также важны и необходимы для развертывания.

Первый называется Онломщик Анкет Это рекомендуемый сервер WSGI для Heroku. Мы рассмотрим настройку этого немного. Следующий – Psychopg2 Анкет Это адаптер базы данных Postgres. Тебе это нужно в твоем Требования.txt Файл для развертывания, но вам не нужны изменения кода, чтобы активировать его.

Быстрое примечание: мы сохраняем нашу дискуссию о пакетах простым для этой демонстрации, но когда вы готовы развернуть реальный проект в Heroku, подумайте о замораживании ваших зависимостей. Вы можете сделать это с PIP FREEZE командование Это сделает вашу сборку немного более предсказуемой, блокируя ваши точные версии зависимости в своем репо. Если ваши зависимости не заблокированы, вы можете развернуть одну версию Django однажды, а другой – в следующий.

Runtime.txt

Heroku установит версию Python по умолчанию, если вы не указаете ее, но если вы хотите выбрать свою версию Python, вам понадобится Runtime.txt файл. Создайте один в корневом каталоге, рядом с вашим Требования.txt , Manage.py В .gitignore и остальное. Укажите свою версию Python с префиксом питон- после чего следует версия Major, Minor и Patch, которую вы хотите, чтобы ваше приложение запустилось:

python-3.8.2

Прозвать

Последний файл, который мы должны добавить, – это файл, специфичный для Heroku: Procfile Анкет Это то, что мы используем для указания процессов, которые должно работать наше приложение. Процессы, указанные в этом файле, будут автоматически загружаться на развертывание в Heroku. Создайте файл с именем Procfile В каталоге уровня корня, рядом с вашим Требования.txt и Runtime.txt файлы (Убедитесь, что заработали P Procfile, иначе Heroku может не распознать это!) Копировать вставку следующие строки в нем:

release: python3 manage.py migrate
web: gunicorn gettingstarted.wsgi --preload --log-file -

Выпуск Фаза Развертывание Heroku – лучшее место для выполнения задач, таких как миграция или обновления. Команда, которую мы будем запускать на этом этапе, – это просто запустить мигрировать Задача определена в Manage.py .

Другой процесс – это Интернет Процесс, который очень важен, если не очень важен, для любого веб -приложения. Именно здесь мы передаем нашу конфигурацию надзора, те же вещи, которые нам нужны при запуске сервера локально. Мы передаем его в наш файл WSGI, который находится в начиная каталог, а затем мы передаем еще несколько флагов, чтобы добавить его немного больше конфигурации. -Пелуаза Флаг гарантирует, что приложение может получать запросы чуть быстрее; --журнальный файл Просто указывает, что файл журнала должен быть направлен в Heroku.

Готов к развертыванию

Уйдите на секунду, прежде чем двигаться дальше, и просто дважды проверьте, что вы сохранили и совершили все свои изменения в GIT. Помните, что нам нужны эти изменения в GIT Repo, чтобы они успешно развернулись. После этого давайте будем готовы сделать приложение!

Создание приложения с Heroku Create

Поскольку у нас установлен Heroku CLI, мы можем вызов Хероку создать В командной строке, чтобы сгенерировать приложение для нас:

$ heroku create
Creating app... done, ⬢ mystic-wind-83
Created http://mystic-wind-83.herokuapp.com/ | git@heroku.com:mystic-wind-83.git

Ваше приложение будет назначено случайное имя – в этом примере это Mystic-Wind-83 – А также общедоступный URL.

Установка переменных среды на Heroku

Когда мы создали наши heroku.py Файл настроек, мы использовали Django-environ для загрузки переменных среды в нашу конфигурацию настройки. Эти переменные среды также должны присутствовать в нашей среде Heroku , так что давайте установим их сейчас.

Команда Heroku CLI, которую мы будем использовать для этого Heroku Config: Set Анкет Это приведет в пары ключей в качестве аргументов и установит их в вашей среде выполнения Heroku. Во -первых, давайте настроим наших разрешенных хостов. Введите следующую строку и замените Your_unique_url с URL -адресом, сгенерированным Хероку создать :

$ heroku config:set ALLOWED_HOSTS=

Затем давайте установим наш модуль настройки Django. Это то, что определяет, какие настройки конфигурации мы используем на этой платформе. Вместо использования дефолта база , мы хотим, чтобы настройки Heroku-специфики:

$ heroku config:set DJANGO_SETTINGS_MODULE=gettingstarted.settings.heroku

Наконец, нам нужно создать СЕКРЕТНЫЙ КЛЮЧ . Для этой демонстрации не имеет значения, какова ее ценность. Вы можете использовать надежный хэш -генератор, такой как MD5 , или генератор диспетчера паролей. Просто обязательно сохраните это значение в безопасности, не используйте его и никогда не проверяйте его в исходном коде! Вы можете установить его, используя ту же команду CLI:

$ heroku config:set SECRET_KEY=

Предоставляя нашу базу данных

Локально, Django настроен на использование базы данных SQLite, но мы производимся. Нам нужно что -то немного более надежное. Давайте предоставим базу данных Postgres для производства.

Во -первых, давайте проверим, есть ли у нас база данных. Heroku Addons Команда скажет нам, если кто -то существует:

$ heroku addons
No add-ons for app mystic-wind-83.

Для нашего приложения не существует надстройки, что имеет смысл-мы только что создали его! Чтобы добавить базу данных Postgres, мы можем использовать аддон: создать командовать как это:

$ heroku addons:create heroku-postgresql:hobby-dev

Heroku предлагает несколько уровней баз данных Postgres. Hobby-dev это бесплатный уровень, так что вы можете поиграть с этим, не заплатив копейки.

Иду вживую

Время пришло. Ваш код готов, ваше приложение Heroku настроено, вы готовы к развертыванию. Это легкая часть!

Просто введите

$ git push heroku master

И мы позаботимся об остальном! Вы увидите, как ваши журналы сборки прокручиваются через ваш терминал. Это покажет вам, что мы устанавливаем от вашего имени и где вы находитесь в процессе сборки. Вы также увидите Выпуск Фаза также, что мы указали ранее.

Масштабирование

Последним шагом является масштаб нашего веб -процесса. Это создает новые Dynos, или, другими словами, копии вашего кода на серверах Heroku для обработки большего веб -трафика. Вы можете сделать это, используя следующую команду:

$ heroku ps:scale web=1

Чтобы увидеть ваше приложение онлайн, введите Heroku Open на терминале. Это должно открыть веб -браузер с сайтом, который вы только что создали.

Отладка

Если вы нажмете несколько загвоздок, не волнуйтесь, у нас есть несколько советов, которые могут помочь:

  • Все ваши изменения сохранены и зарегистрированы в GIT?
  • Ваши изменения на Мастер ветвь или они на другой ветви? Убедитесь, что все, что вы развернете, все ваши изменения в этой ветви GIT.
  • Вы развернули из корневого каталога вашего проекта? Вы также звонили Хероку создать Из корневого каталога вашего проекта? Если нет, это может абсолютно вызвать поездку.
  • Вы удалили что -нибудь из кода в предоставленной демонстрации, которую мы не обсуждали?

логирование

Если вы проходите через этот список и все еще имеете проблемы, посмотрите на свои файлы журнала. В дополнение к вашим журналам сборки, которые сообщат вам, успешно ли ваше приложение развернуто или нет, у вас есть доступ ко всем журналам, созданным Heroku и вашим приложением. Вы можете добраться до этого по нескольким различным способам, но самый быстрый способ – просто запустить следующую команду:

$ heroku logs --tail

Отдаленная консоль

Другой инструмент, который у вас есть, – Хероку бежать Bash командование Это обеспечивает вам прямой доступ от вашего терминала к динации Heroku с использованием вашего кода. Если вы вводите лауреат Вы можете видеть, что это ваше развернутое приложение. Может быть полезно проверить, что то, что здесь, соответствует тому, что локально на вашей машине. Если нет, вы можете увидеть некоторые проблемы.

Завершая

Поздравляем с успешным развертыванием вашего производственного приложения на Heroku!

Чтобы помочь вам узнать о Heroku, у нас также есть огромная техническая документация. Наш Dev Center Это где вы найдете большую часть нашего технического правления и поддерживаемой информации о технологиях. Если у вас есть техническая проблема, скорее всего, кто -то другой задал тот же вопрос, и на него отвечают на наши документы на помощь. Используйте эти ресурсы для решения ваших проблем, а также для изучения лучших практик при развертывании в Heroku.

Оригинал: “https://dev.to/heroku/from-project-to-productionized-with-python-mcc”