Российский Новый Университет
Опубликован: 25.01.2016 | Доступ: свободный | Студентов: 2234 / 161 | Длительность: 16:40:00
Лекция 14:

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

< Лекция 13 || Лекция 14: 12 || Лекция 15 >

Цель лекции: Рассмотреть особенности развертывания проектов 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 в работу.

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

После того, как вы установили сервер 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.

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

< Лекция 13 || Лекция 14: 12 || Лекция 15 >
Константин Боталов
Константин Боталов

Вроде легкие вопросы и ответы знаю правильные, но система считает иначе и правильные ответысчитает неправильными. Приходится выполнть по несколько раз. Это я не правильно делаю или тест так составлен?

Владимир Филипенко
Владимир Филипенко

Листинг показывает в 4-ой лекции, что установлен Django 1.8.4. Тут же далее в этой лекции указаны настройки, которые воспринимает Django 1.7 и младше.