Введение в Django

Развертывание проектов Django

Показывать лекцию целиком

Цель лекции: Рассмотреть особенности развертывания проектов Django; ознакомиться с особенностями настройки проекта Django перед началом развертывания; рассмотреть возможности запуска Django в облаке.

Ключевые термины: django, облако, развертывание, сервер, Apache, ключ, база, платформа, экземпляр, страница, порт, настройка, html, проект, инструмент

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

Рабочий веб-сервер

Мы на протяжении этой книги использовали веб-сервер разработки, который поставляется с Django. Хотя этот сервер идеально подходит для процесса разработки, он определенно не подходит для рабочего веб-сервера, как он не разрабатывался с учетом безопасности или производительности. Таким образом, он определенно не подходит для производства

Есть несколько вариантов для выбора, когда речь заходит о веб-сервере, но Apache, безусловно, является наиболее популярным выбором и команда разработчиков Django фактически рекомендует его. Подробности, как настроить Django с Apache, зависит от вашего хостинга. Некоторые хостинг планы предлагают заранее сконфигурированные под Django хостинги, где вы только должны скопировать файлы проекта на сервер, тогда как другие хостинг планы дают вам свободу для самостоятельной настройки.

Сведения о том, как настроить Apache, различаются в зависимости от ряда факторов, которые выходят за рамки этой книги. Если вы хотите настроить Apache самостоятельно, обратитесь к онлайн-документации Django на https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/apache-auth/.

В этом разделе, мы собираемся развернуть наше приложение Django на Apache и модуль mod_wsgi. Итак, давайте сначала установим эти две вещи.

Выполните следующую команду для установки Apache:

sudo apt-get install apache2

Параметр mod_wsgi является модулем Apache HTTP сервера, который предоставляет интерфейс шлюза веб сервера (WSGI) совместимый интерфейс для хоста web приложений, основанных на Python 2.3+ под Apache.

Выполните следующую команду для установки модуля mod_wsgi:

sudo aptitude install libapache2-mod-wsgi

Django с Apache и модулем mod_wsgi является наиболее популярным способом развертывания Django в работу.

В большинстве случаев машина разработки и машина развертывания различаются. Таким образом советую вам скопировать каталог проекта в каталог /home/bitrix/www/, так как ваши файлы развертывания имеют ограниченные разрешения и доступ.

После того, как вы установили сервер Apache, перейдите на localhost в вашем браузере, обычно это 127.0.0.1. Сделав это, вы должны увидеть страницу Apache по умолчанию, как показано на следующем скриншоте:

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

  • ServerAdmin: Этот адрес электронной почты будет показан если вы не настроили вашу страницу ошибки, которая подскажет пользователю обратиться на этот адрес электронной почты.
  • ServerName: Это имя сервера, под которым вы хотите запустить ваш проект
  • ServerAlias: Это имя сайта, под которым вы хотите запустить проект .
  • WSGIScriptAlias: Здесь находится месторасположение файла проекта wsgi.py, который уже был здесь, когда мы выполнили первую команду для создания проекта Django.
  • Alias: Это псевдоним пути, фактическое расположение каталога на диске, отображаемое в каталог проекта.
  • Теперь нам нужно включить эту конфигурацию данных с помощью команды a2ensite, а для отключения существующей конфигурации, вы можете использовать команду a2dissite.

    Давайте включим файл mytweets .conf для Apache используя следующую команду:

    a2ensite mytweets.conf

    Это включит наш файл mytweets.conf. Вы можете также выключить конфигурацию по умолчанию default 000-default.conf используя следующую команду: a2dissite 000-default.conf

    Проверьте разрешения файлов для статических файлов в вашем проекте. Не забудьте добавть запись разрешенного хоста в файл settings.py.

    Теперь перезапустите сервер:

    sudo service apache2 restart

    Это все, Django теперь запущен в режиме развертывания, то есть, приложение теперь готово к работе.

    Рабочая база данных

    Итак, мы используем SQLite в качестве движка базы данных. Он прост и не требует сервера, размещаемого в памяти. SQLite отлично работает в рабочем режиме для небольших сайтов. Однако настоятельно рекомендуется переключиться на движок базы данных, который использует клиентсерверную модель в рабочей фазе. Как мы видели в предыдущей главе, Django поддерживает несколько движков базы данных, включая все самые популярные. Команда Django рекомендует вам использовать PostgreSQL, но и MySQL должна быть также хороша. Независимо от вашего выбора вам нужно только изменить параметры базы данных в файле settings.py, чтобы переключиться на другой движок базы данных.

    Если вы хотите использовать MySQL, создайте базу данных, имя пользователя и пароль для Django. Затем соответственно измените переменные DATABASE_*. Все остальное должно остаться одинаковым. Это целая точка Django уровня базы данных.

    Отключение режима отладки

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

    В начале, когда мы использовали команду django-admin.py mytweets, которая создавала базовую конфигурацию для проекта, для которого мы использовали параметр debug = True в файле settings.py, когда этот режим был установлен в True. Следующая дополнительная работа осуществляется Django, чтобы помочь вам быстрее отладить проблему. Использование памяти Django является более, так как все запросы хранятся как django.db.connection.queries в базе данных.

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

    Выключить режим отладки довольно легко. Откройте файл settings.py и изменитe у переменной DEBUG значение на False:

    DEBUG = False

    Отключение отладочной информации несет дополнительную пользу; можно повысить производительность веб-сайта, потому что Django не отслеживает данные отладки для отображения.

    Изменение переменных конфигурации

    Существует много переменных конфигурации, которые должны быть созданы или обновлены для работы. Рабочее окружение- это очень агрессивное окружение. Ниже приведен контрольный список, через который вы должны пройти для развертывания. Проверьте файл settings.py тщательно, поскольку каждая настройка должна быть определена правильным образом для защиты проекта.

    Параметры могут быть определены окружением, например, когда вы запускаете настройки локально. Учетные данные базы данных могут измениться, и даже база данных может меняться в зависимости от окружения. Во время проведения процесса развертывания, включите дополнительные возможности безопасности.

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

    Ниже приводятся критические параметры, о которых нужно позаботиться, развертывая Django:

  • secret_key:.Этот ключ должен быть выбран большим, случайным образом и должны держать в тайне. В самом деле рекомендуется никогда не хранить эту информацию в файле settings.py или в хранилище контроля версий. Вместо этого, храните информацию где-то в безопасном файле без контроля версий или в пути окружения:
    import os
    SECRET_KEY = os.environ['SECRET_KEY']
    
    Это импортирует ключ из текущей операционной систе-мы.Альтернативный метод – импорта из файла, который можно сделать с помощью:
    with open('/etc/secret_key.txt') as f:
    SECRET_KEY = f.read().strip()
    
  • ALLOWED_HOSTS: Необходимо иметь реальный хост конфигурации. Когда режим отладки выключен, это используется для защиты от CSRF-атак:
    ALLOWED_HOSTS = [
    '.example.com', # Allow domain and subdomains 
    '.example.com.',	# Also allow FQDN and subdomains
    ]
    
  • ADMIN: Ключ ADMIN содержит имена и адреса электронной почты администраторов сайта. Вы найдете его в файле settings.py закомментированным следующим образом:
    ADMINS = (
    # {'name', 'your_email@domain.com'),	
    )
    
    Вставьте здесь свое имя и адрес электронной почты и удалите символ # для отмены комментирования, для того чтобы получать уведомления по электронной почте об ошибках кода, когда они происходят.

    Когда DEBUG = False и представление вызывает исключение, Django оповестит этих людей по электронной почте о подробностях исключения.

  • Когда DEBUG = False и представление вызывает исключение, Django оповестит этих людей по электронной почте о подробностях исключения.
    EMAIL_HOST 
    
    EMAIL_PORT
    
    EMAIL_HOST_USER 
    
    EMAIL_HOST_PASSWORD 
    
  • Кроме того, веб-приложение теперь имеет свое собственное доменное имя, так что вам необходимо обновить следующие параметры для отражения этого: SITE_HOST и DEFAULT_FROM_EMAIL.

    Наконец если вы используете кэширование, то убедитесь, что вы установили правильные настройки в параметре cache_backend (в идеале, параметр memcached); вам не нужно разрабатывать бэкэнд, в то время как вы находитесь в рабочей фазе.

    Настройка страниц ошибок

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

  • 404.html: Этот шаблон будет отображаться, когда запрошенный URL-адрес не существует; другими словами, когда страница не найдена, например, неожиданное исключение.

    Создайте два файла с любым содержимым по вашему усмотрению. Вы можете например, поместить сообщение "Страница не найдена" в шаблон 404.html или форму поиска.

  • 500.html: Этот шаблон будет отображаться при возникновении внутренней ошибки сервера.

    Рекомендуется, придать этим шаблонам единообразный вид, наследуя их от базового шаблона вашего сайта. Поместите шаблоны наверх в папку templates и Django будет автоматически использовать их.

  • Этого достаточно, чтобы внести изменения в конфигурацию, которые необходимы для работы. Конечно этот раздел далеко не полный и есть другие параметры, которые могут вас заинтересовать. Можно например, настроить Django на уведомление вас по электронной почте, когда запрашиваемая страница не найдена или предоставить список IP-адресов, чтобы можно было увидеть отладочную информацию. Для этого и еще обратитесь к документации Django в файле settings.py.

    Надеюсь этот раздел поможет вам сделать ваш переход от разработки к рабочей фазе более гладким.

    Django на облаке

    Развертывание в веб-разработке изменилось с течением времени. Большая часть стартапов движется к установке в облаке от традиционных методов VPS хостинга, благодаря надежности, производительности и легкости масштабирования.

    Amazon EC2 и Google Compute Engine самые популярные облачные платформы, которые обеспечивают IAS (инфраструктура как сервис).

    Потом, у нас есть другие известные варианты, такие как платформа как сервис(PaaS), где вы выталкиваете ваш код, так же как, вы выталкиваете его в обычный репозиторий, так что он автоматически развернутывается. К ним относятся Google App Engine, Heroku и так далее.

    Давайте представим их по одному.

    EC2

    Развертывание на EC2 просто. Следуйте данным шагам для разверты-вания ваших желаемых настроек на EC2:

  • Создайте учетную запись для AWS. Перейдите на http://aws.amazon.com и нажмите на "Начать работать бесплатно. Создать аккаунт", как показано на следующем скриншоте:
  • Зарегистрируйтесь и добавьте вашу кредитную карту в платежные детали. Когда все будет сделано, войдите и вы увидите панель. Для развертывания нам нужно создать сервер, называемый EC2 экземпляром ( это может рассматриваться как сервер) на AWS.
  • Нажмите на EC2 (в левом верхнем углу), как показано на следующем скриншоте: Как вы можете увидеть на предыдущем скриншоте, у меня нет работающих экземпляров работает (0 Running Instances). Нажмите на Launch Instance для создания нового экземпляра. Это покажет вам доступные образы AWS (которые, как скриншот в VMware или последний доступный диск резервного копирования) для экземпляра:
  • Пролистайте вниз, чтобы выбрать Ubuntu 64-bit instance (сервер Ubuntu).

    Затем выберите тип экземпляра; сперва выберите свободный уровень; это даст каждому новому аккаунту то, что AWS называет тип экземпляра t2.micro. Проверьте другие настройки, так как большинство из них сохраняется по умолчанию. Продвигайтесь к шагу Tag экземпляра и напишите имя экземпляра:

  • Далее еще раз все посмотрите и запустите экземпляр. Также вы должны создать пару ключей для доступа к AWS машине по SSH. Ключ – это файл с расширением pem, который вы используете для того, чтобы войти по SSH на вашу машину удаленно. Создайте пару ключей и скачайте файл pem.

    Убедитесь, что файл PEM имеет разрешение 400. Ваш ключ не должен быть публично просматриваемым, если вы хотите использовать в работе SSH.

    Используйте эту команду при необходимости: chmod 400 mykey.pem.

    Это займет некоторое время, и вернет вас назат на вашу панель как запущенный экземпляр

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

    На правой стороне подробностей, вы можете увидеть публичный DNS: <public dns> и публичный IP: <public ip>. Это все, что вам нужно (и файл .pem, конечно, для входа в экземпляр).

    На компьютере, перейдите к каталогу из терминала, куда вы загрузили файл PEM и наберите $ssh -i <pemfilename="">.pem ubuntu <pubic ip> на вашем терминале.

    В противном случае введите следующее:

    $ssh -i <pemfilename>.pem ubuntu <public dns>.

    Сделав это, вы войдете на удаленный сервер.

    Это ваш онлайн система с нуля. Если вы хотите развернуть веб-сайт самостоятельно с вашей локальной машины, то вы можете обратиться к предыдущим главам и установить все необходимое для виртуального окружения. Django и Apache выполнят развертывание на этом сервере.

    После развертывания, используйте публичный IP, который мы использовали для SSH и вы должны увидеть развернутый сервер.

    Google Compute Engine

    Google Compute Engine работает на той же концепции, как и AWS EC2. В настоящее время, Google Compute Engine, не дает свободного уровня.

    Серверы Google известны надежностью и производительностью для этого. Так что, если вы думаете, что проект в этом нуждается, переходите на него.

    Облако Google дает вам облако SDK, для использования его экземпляров, и большую часть его первоначальной конфигурации можно сделать из-под терминала.

    Чтобы создать экземпляр на Google Compute Engine перейдите к: httpS://Cloud.Google.com/Compute/Docs/QuickStart

    Эта ссылка поможет вам настроить экземпляр, работающий на сервере Apache.

    Открытая гибридная облачная платформа для приложений от Red Hat

    Red Hat предоставляет другое решение для развертывания в облаке, которое является бесплатным с некоторыми ограничениями, с сервисом, названным OpenShift.

    Вы можете создать учетную запись OpenShift и получить бесплатный базовый 3-х динамический основанный на облаке сервер на https://www.openshift.com/app/account/new.

    После создания учетной записи, вы можете перейти на https://openshift.redhat.com/app/console/applications и добавить свою учетную запись.

    OpenShift предоставляет Django репозиторий уже настроенным для вас с предварительными настройками для управления версиями.

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

    OpenShift также дает вам возможность войти на облачный сервер по SSH и основную поддержку.

    Heroku

    Это также является хорошей платформой для гладкого развертывания кода Django в облаке. Как и Google Compute Engine, Heroku также дает вам инструменты SDK для установки и выполнения конфигурационных изменений из-под локального терминала. Вам нужно получить пояс инструментов (SDK для Heroku).

    Создайте учетную запись Heroku на https://signup.heroku.com.Ниже приведены шаги, взятые с https://devcenter.heroku.com/articles/getting-started-with-python. Проверьте наличие последних обновлений. Следующие действия описывают создание и использование Heroku:

  • Сперва, нам нужно установить Heroku Toolbelt. Это предоставит вам доступ к утилите командной строки Heroku:
    $wget - qO-https://toolbelt.heroku.com/install-ubuntu.sh | sh
    Появится следующий экран:

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

  • Будет установлена Heroku Toolbelt на локальный компьютер. Войдите в Heroku из командной строки: $heroku login.
  • Используйте то же имя пользователя и пароль, что и для входа в веб. Давайте взглянем на следующий скриншот:
  • Теперь перейдите к https://devcenter.heroku.com/articles/getting-started-with-django, чтобы развернуть Django на Heroku.
  • Google Application Engine

    Google Application Engine работает по-другому, он не работает на традиционных базах данных, вместо этого он имеет свою собственную базу данных. Таким образом, чтобы развернуть Django на Google Application Engine, мы будем использовать отдельный проект под названием Django-nonrel.

    Django-nonrel это проект, который позволяет разработчикам запускать собственные проекты Django (включая Django ORM) на нереляционных базах данных, одной из которых является хранилище данных Google Application Engine. Это дополняет стандартные традиционные базы данных SQL, которые всегда поддерживались Django. Google Application Engine поставляется с некоторой поддержкой Django, но поддержка главным образом сводится к шаблонам и представлениям. Другие инструменты, которые позволяют быструю разработку, такие как формы, встроенный интерфейс администрирования или аутентификация Django просто не будут работать из коробки. Django-nonrel меняет это для разработчиков Django.

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

    Контрольные вопросы

  • В чем преимущество использования Apache в качестве рабочего сервера?
  • Какие облачные сервисы можно использовать для развертывания проекта Django?
  • Как отключить режим отладки?
  • Какие параметры рабочего почтового сервера следует настроить?
  • В чем отличие рабочего сервера от сервера разработки?
  • Упражнения

    Упражнение 1.

    Разместите ваш проект на EC2 и обеспечьте реальную работу веб-сервиса

    Упражнение

    Разместите ваш проект на Google Compute Engine и обеспечьте реальную работу веб-сервиса

    Упражнение 3.

    Разместите ваш проект на Heroku и обеспечьте реальную работу веб-сервиса

    Упражнение 4.

    Разместите ваш проект на OpenShift и обеспечьте реальную работу веб-сервиса

    Список тем курсовых работ

  • Обзор Amazon EC2
  • Обзор Google Compute Engine
  • Обзор OpenShift
  • Обзор Heroku
  • Обзор Google Application Engine
  • Основы работы с веб-сервером Apache
  • Обзор веб-серверов для рабочей фазы проекта: достоинства и недостатки
  • Облачные технологии как основа современых веб-сервисов
  • Обзор баз данных для рабочей фазы проекта: достоинства и недостатки
  • Разработка проекта: от разработки к развертыванию
  • Краткие итоги

  • рассмотрели особенности настройки рабочего веб-сервера
  • ознакомились с основными параметрами конфигурационного файла Apache
  • определили, какую из баз данных использовать в качестве рабочей
  • узнали, как отключить режим отладки
  • настроили параметры конфигурации
  • рассмотрели особенности развертывания проекта на Amazon EC2
  • рассмотрели, как развернуть проект на Google Compute Engine
  • узнали о возможностях OpenShift
  • ознакомились с Heroku
  • ознакомились с требованиями к генерации ключей
  • Вернуться к учебному плану