Django — популярный фреймворк для создания веб-приложений на Python. Его популярность постоянно растет благодаря наличию инструментов быстрой разработки, встроенному административному интерфейсу и высокой скорости работы.
Существует простой и надежный способ развертывания и запуска приложений Django на веб-сервере IIS с помощью Установщик веб-платформы и репозиторий пакетов Helicon Zoo. Helicon Zoo — хранилище популярных веб-фреймворков и приложений для Microsoft IIS. Для развертывания приложений он использует технологии Microsoft Web Platform Installer (WebPI).
С их помощью обрабатываются различные зависимости и происходит процесс установки необходимых компонентов, таких как Python, Django, различных драйверов и модулей баз данных.
Ну и сам модуль Helicon Zoo, который склеивает всё это дело с MS IIS 7.
Как использовать
В веб-разработке существует две достаточно независимые среды — разработка и производство.Helicon Zoo можно использовать как в производстве, так и на машине разработки, или и то, и другое одновременно.
В любом случае последовательность действий примерно такая: Сначала вам необходимо скачать и установить установщик веб-платформы с сайта Microsoft - ( http://www.microsoft.com/web/downloads/platform.aspx ).
WebPI уже содержит большое количество фреймворков и приложений для IIS, таких как PHP, ASP.NET, Wordpress, Drupal, phpBB. Для подключения Helicon Zoo необходимо добавить новый фид в WebPI:
- Запустите WebPI и нажмите «Option».
- В поле «Отобразить дополнительные сценарии» вставьте http://www.helicontech.com/zoo/feed и нажмите Добавить канал
Пустой проект Django — это простой «Привет, мир!» приложение, которое используется для установки всех зависимостей, необходимых для запуска приложения Django и, по сути, пустого проекта Django. Для установки нажмите «Добавить» и «Установить», появится форма со списком зависимостей:
Чтобы принять лицензии и начать загрузку и установку, нажмите «Я принимаю».
После установки и скачивания всех зависимостей установленный проект можно запустить, нажав «Запустить приложение в браузере»:
Это окно означает, что Python, Django и все необходимое для запуска самих приложений только что установлены на ваш компьютер.
Теперь, если это машина для разработки, вы можете начать разработку с этого пустого приложения «Hello Worls».
После того, как вы что-то сделаете с этим приложением, вы можете загрузить его на рабочий сервер со всеми файлами, каталогами, обязательно файлом web.config, и, если ранее на сервере был установлен Blank Django Project (не важно, какой каталог , вам нужны только зависимости), там приложение должно работать.
Каждый раз, когда вы загружаете изменения на сервер, вам необходимо перезапустить пул приложений.
Это особенность Django (и Rails); для других платформ перезагрузка может не потребоваться.
При перезапуске миграция данных будет выполнена автоматически — Manage.py syncdb .
Это позволяет использовать решение на общих хостингах, где у пользователя нет доступа к консоли.
Под капотом
Ядром Helicon Zoo является нативный модуль IIS, который по сути играет роль моста между веб-сервером IIS и фреймворками на базе Ruby, Python, Perl и т.д. Модуль работает по протоколу FastCGI, который уже зарекомендовал себя как надежный и быстрый метод взаимодействия веб-приложений с веб-сервером.Взаимодействие между ними происходит асинхронно, с использованием технологии I/O Completion Port. В качестве транспорта используются либо именованные каналы, либо TCP-сокеты.
Поддерживаются IIS 7, IIS 7.5 и IIS Express. Базовая конфигурация модуля Helicon Zoo находится в раздел файла applicationHost.config. В этом разделе описаны все движки FastCGI, которые будут работать с Zoo. Вот пример описания движка для запуска приложений Python wsgi (в частности приложений Django).
Zoofcgi.py — это исполнитель Python, реализующий транспортировку по именованным каналам:
<engine name="python.2.7.pipe" fullPath="c:\python27\python.exe" arguments="-O %SystemDrive%\Zoo\Workers\python\zoofcgi.py" transport="pipe" />
Веб.
конфигурация
Настройка веб-приложений, работающих через Zoo, осуществляется через файл web.config. Вот пример такого файла для настройки приложения Django для запуска в 32-битном пуле: <Эxml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<heliconZoo>
<application name="django.project.x86" >
<environmentVariables>
<add name="PYTHONPATH" value="%APPL_PHYSICAL_PATH%;%PYTHONPATH%" />
<add name="DJANGO_SETTINGS_MODULE" value="settings" />
<add name="DEPLOY_FILE" value="deploy.py" />
<add name="DEPLOY_LOG" value="log\deploy.log" />
</environmentVariables>
</application>
</heliconZoo>
<handlers>
<add name="django.project.x86" scriptProcessor="python.2.7.pipe" path="*" verb="*" modules="HeliconZoo_x86"
preCondition="bitness32" resourceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>
</configuration>
Вот важные моменты:
- scriptProcess="python.2.7.pipe" — ссылка на движок FastCGI, определенный в applicationHost.config;
- переменная среды PYTHONPATH — путь, по которому Python ищет свои модули; в нашем случае мы добавляем путь к нашему приложению django в PYTHONPATH;
- переменная среды DJANGO_SETTINGS_MODULE — путь Python к файлу конфигурации settings.py приложения Django, например, «mysite.settings»
- переменная среды DEPLOY_FILE — путь к файлу внутри приложения, который будет запущен перед выполнением первого запроса к приложению после перезапуска приложения IIS. В этом файле нужно запустить, например, команды для синхронизации базы данных: 'manage.py syncdb –noinput';
- переменная среды DEPLOY_LOG — путь внутри приложения к файлу, в который будут записываться выходные данные команды DEPLOY_FILE в целях отладки.
Каталог, в котором находится этот файл журнала, должен иметь разрешения на запись для пользователя, запускающего приложение IIS (обычно это группа IIS_IUSRS).
Статический контент
Фреймворк Django не подходит для быстрой и безопасной обработки статических файлов (изображений, скриптов, файлов стилей).Статика должна обрабатываться непосредственно веб-сервером.
Для этого вам нужно поместить все статические файлы в каталог и отключить в нем обработчик запросов в приложении django: <Эxml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<remove name="django.project.x86" />
</handlers>
</system.webServer>
</configuration>
Пример проекта Django на IIS 7
Предположим, наш проект django состоит из трех приложений:- site - сам сайт с шаблонами, статикой, urls.py и settings.py
- блог
- магазин
MEDIA_URL='/media/').
Установив Blank Django Project в корень сайта и скопировав наш django-проект, мы получим следующую структуру каталогов:
/media/ — виртуальный каталог, указывающий на сайт/носитель; у него отключен модуль Zoo, как описано выше.
В корневом файле web.config PYTHONPATH указывает на корень сайта, а для параметра DJANGO_SETTINGS_MODULE установлено значение site.settings: .
<heliconZoo>
<application name="django.project.x86" >
<environmentVariables>
<add name="PYTHONPATH" value="%APPL_PHYSICAL_PATH%" />
<add name="DJANGO_SETTINGS_MODULE" value="site.settings" />
</environmentVariables>
Производительность
И, наконец, самое интересное — тестирование производительности.Подробное тестирование будет позже, пока это просто быстрый тест, но судить по этим результатам вполне можно.
Тестовая машина в качестве сервера - Core 2 Quad 2,4 Ghz, 8 Gb RAM, гигабитная сеть.
Для формирования нагрузки использовался более мощный компьютер с Apache Benchmark. Ubuntu 11.04 Server x64 использовался для тестирования Apache и Nginx. Тесты IIS 7 проводились на Windows Server 2008 R2. Никаких виртуальных машин — честное железо.
В качестве транспорта на Nginx использовался самый продвинутый uwsgi, а также wsgi и fast_cgi для сравнения.
Они также сравнили IIS 7 с PyISAPI. Мы написали два небольших скрипта в качестве тестовых страниц.
Первый отображает текущее время с высоким разрешением — это сделано для того, чтобы страницы не извлекались из кеша.
Второй делает то же самое, но сначала сохраняет результат в базе данных.
Все это через шаблон для использования реальной инфраструктуры Django, база данных — MySQL. Настройки везде дефолтные, потому что.
Цель - протестировать наиболее типичные конфигурации.
Итак, результаты (в запросах в секунду):
Здесь все более-менее понятно и стабильно.
Uwsgi впереди, видимо, за счёт более тесной интеграции с кодом Django — его придётся курить.
PyISAPIe сильно отстаёт, оно и понятно.
А вот с БД результат не такой стабильный.
Почему Nginx+fcgi+MySQL показал такие странные 175 запросов в секунду — непонятно.
Результат MySQL на Windows также удручает, хотя на шаред-хостинге проблема может быть не столь критичной.
Дело в том, что производительность падает в основном из-за какой-то внутренней блокировки в MySQL, при этом сам сервер практически не нагружается, пока генерирует эти 104 запроса.
Можно предположить, что при увеличении количества сайтов на сервере, а соответственно и увеличении количества баз данных, если они не будут блокировать друг друга, общей мощности сервера будет достаточно.
Поэтому мы решили добавить в тесты MS SQL Express. Его результат тоже очевиден — все зависит от самого Python и драйверов баз данных для него, но в целом выглядит вполне прилично.
PyISAPIe с MS SQL Express не работал.
Отдельно хотелось бы отметить способность IIS 7 поддерживать большое количество соединений.
Так IIS 7 + Helicon Zoo легко выдержал тысячи одновременных подключений (нам просто нечего было больше генерировать), а Ubuntu с настройками по умолчанию быстро сдавалась по мере роста количества подключений.
А еще Apache оказался весьма требовательным к памяти.
Так вот, с увеличением количества подключений, Apache за 20 секунд теста съел около 3 ГБ памяти — дальше не проверяли.
выводы
Представленное решение показывает стабильную работу и достойную производительность.Он полностью готов к использованию как в качестве среды разработки, так и в производстве.
Особенно важна возможность использовать Helicon Zoo различными хостинг-провайдерами Windows для предоставления услуг Django своим клиентам.
Хочется надеяться, что с ростом количества серверов Django на Windows его разработчики начнут уделять больше внимания отладке и оптимизации своего кода под платформу Windows. А армия существующих разработчиков Windows может стать хорошим подспорьем для текущих проектов с открытым исходным кодом.
Теги: #python #django #IIS #установщик веб-платформы #helicon Zoo
-
Написание Оператора Kubernetes С Нуля
19 Oct, 24 -
Полный Анализ Экзамена Sad
19 Oct, 24 -
Откровение Из «Раскрутки»
19 Oct, 24