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

Развертывание вашего приложения Django (на рендере)

Когда я закончил свое первое приложение Django, мне было трудно опубликовать его в Интернете, потому что там казалось … Теги с Python, Django, DevOps, начинающими.

Когда я закончил свое первое приложение Django, мне было трудно опубликовать его в Интернете, потому что там, казалось, не было окончательного учебного пособия, объясняющего все разные компоненты. В результате я решил создать учебное пособие, которое я хотел бы получить доступ в то время. Это будет очень дружелюбный, принимая вас через каждый процесс по шагу и объяснил все детально по пути! К концу у вас должен быть не только бегущий веб-сайт или приложение, но и понимать, что происходит, чтобы заставить его запустить. Я предполагаю, что вы знаете Django, являетесь пользователем GitHub/GitLab и имеют хорошее понимание некоторых основных концепций разработки программного обеспечения. Знание командной линии – это приятное! Также обратите внимание, что вариант хостинга я буду объяснять в этом руководстве, это дешевый, но не бесплатный, что означает, что вы будете обвинять в конце месяца.

Основные компоненты развертывания веб-сайта/WebApp

Я уверен, что вы слышали о сервере раньше, но, возможно, не полностью осознают, что это на самом деле. Концепция довольно проста – это компьютерная первичная (и иногда единственная) задача компьютера, которая должна слушать запросы, отправленные другими компьютерами и отправьте ответ на основании этого запроса. Каждая часть веб-сайта работает на серверах и развернуть наше приложение Django, нам понадобится сервер нашего собственного.

Возможно, вы думаете, что наличие вашего собственного компьютера работает все время, похоже на множество обслуживаемых и хлопот – это то, где приходит концепция «облака». Облако – это действительно просто коллекция серверов, управляемых большим корпорацией, которая имеет необходимые ресурсы и средства для сохранения серверов постоянно. Вот почему большинство новых компаний выделяют развертывание своих веб-приложений на облачный провайдер, а не запускать свои собственные серверы.

Наконец, нам также нужен сервер приложений. Именно здесь все могут быть запутаны – в отличие от обычного сервера, сервер приложений не является физическим компьютером. Это кусок программного обеспечения, который постоянно работает и прослушивает указанный порт для любых запросов, полученных от пользователей. Когда вступит запрос, наш сервер приложений связывается с приложением (Django), который определяет, как должен отвечать сервером. После того, как наше приложение создало ответ, сервер приложений будет служить этому ответу обратно пользователю в виде некоторых файлов (HTML, изображение, полезную нагрузку JSON и т. Д.).

Что такое визуализация?

Render станет нашим облачным хозяином для этого руководства. Я выбрал его, потому что он делает развертывание и обновление веб-приложения очень просто (мы попадем в то, как это происходит позже на посте). Это делает его отличным для новых разработчиков! Визуализация часто сравнивается с его ближайшим конкурентом Heroku, который намного более создан, известный и зрелый. Я использовал обе платформы, и нахожу рендеринг, чтобы соответствовать моим личным предпочтениям, поскольку я нахожу пользовательский интерфейс, чтобы быть более интуитивным, чем у Heroku. Основное преимущество Heroku состоит в том, что у него есть свободный уровень, но быстро становится очень дорого, а визуализация остается сравнительно дешевым, поскольку ваше веб-приложение растет у пользователях. Если вы хотите использовать Heroku для этого руководства из-за его свободного уровня, вы все равно можете, поскольку он очень похож на визуализацию. Я определенно не думаю, что Heroku – это плохой выбор, и вы можете принять серьезные приложения на любой из этих платформ!

Настройка среды развития

Я собираюсь начать с проекта Django по умолчанию, но я надеюсь, что мои объяснения помогут вам а также настроить свой собственный проект (если есть проблемы, пожалуйста, оставьте комментарий!). Для справки, я устанавливаю свой проект, следуя Официальное учебное пособие И моя текущая структура файлов выглядит так:

├── db.sqlite3 ├── manage.py ── mysite ├─ ─ insgi.py ├── init.py ├── stations.py ├── urls.py └── wsgi.py

Настройка сервера приложений (Gunicorn)

Как вы, вероятно, знаете, Django Ships с собственным сервером приложений, который вы можете использовать, пока вы разрабатываете свое приложение. Это не подходит для развертывания вашего приложения, потому что он не предназначен для обеспечения безопасности и обрабатывать большой трафик. Вместо этого мы будем использовать Gunicorn, сервер приложений, созданный для приложений Python. Запустите следующую команду, чтобы установить его:

pip install gunicorn

Теперь мы можем запустить наше приложение, используя сервер приложений, который имеет собственную интерфейс командной строки. Хорошая вещь о серверах приложений состоит в том, что они часто поставляются с большим количеством вариантов конфигурации, но это часто может запутать новичков. Я собираюсь поделиться основными конфигурациями для Gunicorn, которые помогут вам начать.

Если вы ориентируетесь в основную папку «Ваши проекты», вы увидите файл под названием WSGI.PY. Если вы не внесли никаких изменений в него, вы должны увидеть что-то вроде этого:

import os
from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
application = get_wsgi_application()

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

gunicorn -w 4 mysite.wsgi:application

Давайте пройдем через это шаг за шагом – у нас есть два аргумента. Первый отмечен W Флаг и назначен значение 4. Это просто говорит оружия, что мы хотим иметь четыре рабочих, работающих параллельно. Работник представляет собой экземпляр сервера приложений, поэтому тем больше рабочих мы выполняем больше запросов, которые мы можем теоретически работать одновременно. Оптимальное значение для этого зависит от того, сколько потоков вы можете запустить и насколько имеется ОЗУ ваш компьютер, Но я нахожу 4, чтобы быть хорошим дефолтом.

Второй аргумент – это путь от нашего текущего каталога в переменную приложения Django, о котором мы говорили как раз перед. Как уже упоминалось, это просто говорит о том, что он должен бежать. После удара введите, вы должны увидеть, что у нас есть наше приложение, работающее в порту 8000, как с обычным сервером разработки!

Добавление поддержки статических файлов

В то время как наш сервер приложений уже работает нормально, он имеет основное ограничение – Django не поддерживает служебные статические файлы (изображения, CSS, JavaScript) в производстве! К счастью, есть действительно простое исправление, используя библиотеку под названием Whitenoise. Давайте установим его:

pip install WhiteNoise

Чтобы он работал в нашем приложении, также действительно просто – просто продлить файл settings.py в главной каталоге проекта с помощью этого кода:

MIDDLEWARE = [
    'whitenoise.middleware.WhiteNoiseMiddleware',
    # ... all your other middleware
]
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

Как мы собираемся развернуть наше приложение – быстрый обзор

На данный момент я думаю, что это хорошо, чтобы получить быстрый обзор того, что мы пытаемся сделать, поэтому следующие шаги имеют смысл. Я буду охватывать, как вы можете использовать Render, чтобы синхронизировать свое приложение через Интернет, просто совершив в свою ветку Master! Вот почему знание Git, а также имея учетную запись GitHub или GitLab, являются обязательными для этого руководства. Вот как это работает:

  • Мы подталкиваем наш код на удаленный репозиторий
  • Визуализация узнает, что мы сделали изменение и загрузите все последние обновления от GitHub/GitLab на сервер
  • Render будет выполнять команду Gunicorn так же, как мы сделали раньше на нашей местной машине

Как видите, работа с рендером действительно просто! Но нам все еще нужно сделать еще несколько вещей. Если вы еще этого не сделали, создайте новый репозиторий для вашего приложения.

«Замораживание» наших библиотек/зависимости

Когда мы толкаем наш код на сервер на рендеринг, мы ограничены файлами в нашем репозитории. Вы не хотите иметь всю свою среду разработки и библиотеки в репозитории, но хорошая альтернатива – просто иметь рендеринг устанавливать все эти для нас на лету. То, как мы можем сделать это, это используя PIP, чтобы написать все наши зависимости в файл (что в любом случае является лучшей практикой, при работе с Git и Django). Затем мы можем использовать этот файл для установки всех этих зависимостей на сервере. Выполнить следующую команду:

pip freeze > requirements.txt

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

asgiref==3.2.3
Django==3.0.3
gunicorn==20.0.4
pytz==2019.3
sqlparse==0.3.0
whitenoise==5.0.1

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

Начало работы на визуализации

Перейти к https://render.com/ и нажмите регистрацию. Создайте новую учетную запись и перейдите на приборную панель. Вы должны увидеть несколько вариантов – нажмите на новый веб-сервис.

Render попросит вас подключиться к вашему поставщику Git, если вы еще этого не сделали. Как только это сделано, выберите репо, которое вы работаете на этом руководстве.

Теперь вы берете в меню конфигурации. В этом меню мы объявляем, как Server Render должен инициализировать приложение, когда изменение сделано в репозиторий Git. Важно то, что мы скажем, чтобы мы подскажете устанавливать все наши зависимости, которые мы сохранили в файле требований. Atxt, который мы создали ранее и запустите приложение с Gunicorn.

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

Если вы видите эту ошибку, есть две проблемы:

  • Вы не добавили домен рендеринга на ваши допустимые хосты (очевидно)
  • У вас есть режим отладки в производстве

Это легко исправлено, возвращаясь к настройкам .py и выполнение следующих изменений:

DEBUG = True
ALLOWED_HOSTS = ['render-tutorial.onrender.com']

Теперь нажимайте эту новую версию через Git и обратите внимание, как Render автоматически обновляет сервер! Вы также можете использовать ручное развертывание, если это не работает.

Вуаля! Приложение работает. Я надеюсь, что вам понравилось это быстрое введение в развертывание с Django и Render. Очевидно, что есть еще несколько способов, которыми мы можем улучшить это, например, использование переменных среды для динамически переключающегося режима отладки в наших Settings.py На основании того, находятся ли мы в режиме производства или нет. Если вы хотите, чтобы я также охватил их, пожалуйста, оставьте комментарий!

Оригинал: “https://dev.to/marcbeaujean/deploying-your-django-app-on-render-2o5k”