Назад | Перейти на главную страницу

Как объяснить установку Django / Python новичку в Python, использующему общий сервер IIS

По независящим от меня причинам наш веб-сайт размещен у хостинг-провайдера, который использует IIS для своих серверов. В настоящее время они предлагают PHP и ASP, а также Python и Perl через cgi-скрипты.

Я хочу сделать редизайн, переписать наш сайт и перейти с PHP на установку Python / Django. Хостинг-провайдер открыт для предложений, но ясно, что «Мы действительно не знаем, что такое Python и как он работает, но если вы можете объяснить это нам, мы постараемся настроить вас на все, что вам нужно». .

Тем не менее, я мог бы знать, как настроить Django в среде общего хостинга на apache / mod_python, но я понятия не имею, как он будет настроен в IIS, и уж тем более не знаю, как он будет настроен для среды общего хостинга. Я немного погуглил, но большинство ресурсов, которые я нахожу, предполагают, что системный администратор 1) знает Python / Django и 2) использует выделенный хостинг IIS для своего сайта.

Может ли кто-нибудь объяснить, как я могу объяснить этот процесс своему хостинг-провайдеру, или дать мне указания на хорошие, подробные ресурсы, которые я могу направить своему хостинг-провайдеру? Имейте в виду, что люди, управляющие хостингом, могут знать "все" о IIS, но не имеют представления, как работать с Python.

Если вы застряли в использовании IIS, используйте PyISAPIe вместо CGI, если можете. Инструкции и ссылки для PyISAPIe приведены ниже. Ваш веб-хост будет знать гораздо больше о расширениях ISAPI, если они управляют IIS, чем о Python, и им не нужно много знать о Python с PyISAPIe.

НАМНОГО ЛУЧШИЙ СПОСОБ ДЕЛАТЬ ЭТО ИСПОЛЬЗОВАТЬ PyISAPIe, РАСШИРЕНИЕ ISAPI.. PyISAPIe намного быстрее, чем CGI на IIS7. Это похоже на mod_python на Apache. На домашней странице проекта PyISAPIe есть инструкции по настройке Django с WSGI через PyISAPIe. Это повысит вашу производительность до разумных скоростей для общедоступного веб-сайта с высокой посещаемостью.

Установка Django в IIS + Python через среду CGI будет ужасно медленной для любого производственного использования. Вы никогда не должны использовать это для веб-сайта, на котором вы ожидаете обрабатывать больше, чем несколько запросов в минуту. Это также сильно ограничивает вас в том, что вы можете кэшировать в памяти в структуре кеширования Django, поскольку процесс приложения Django перезапускается с каждым новым запросом.

На нормальном веб-сервере, таком как Apache, lighttpd и т. Д., С mod_python, интерпретатор Python, запускающий процесс Django, остается в памяти и инициализируется каждым новым рабочим потоком Apache, который обрабатывает множество запросов с течением времени. Это означает, что Python + Django не завершается и не перезапускается для каждого нового запроса. В настройке FastCGI веб-сервер (например, Apache или lighttpd) создает сокет (домен UNIX или TCP), через который он взаимодействует с приложением FastCGI (ваше веб-приложение Django) по протоколу FastCGI. То же самое и с настройками HTTP-прокси (они говорят HTTP вместо FastCGI). В среде CGI вызывается интерпретатор Python, который запускает приложение Django, полностью заново для каждого запроса, поэтому приложение не может сохранять состояние между запросами в памяти и не может правильно кэшировать где-либо, кроме базы данных.

Хватит разглагольствовать, если вам нужно использовать IIS + CGI + Django, вот как сделать эту ужасную ужасную вещь: Использовать следующий код чтобы создать свой собственный сценарий CGI, который запускает ваше приложение Django (он переводится между CGI и WSGI). Вам нужно будет немного отредактировать скрипт, чтобы он указывал на ваше приложение и код Django. Это сценарий CGI, которому нужно будет передавать запросы. Далее вам нужно перенаправить / переписать все запросы в ваш CGI-скрипт ...

В IIS6 вам понадобится эквивалент mod_rewrite, например IISRewrite, который, как мне кажется, платный и с закрытым исходным кодом. Наконец, в IIS7 Microsoft включила модуль перезаписи URL. Документация к нему находится Вот. Инструкции по созданию правил перезаписи в IIS7: Вот. Вы захотите перенаправить все по целевому базовому URL-адресу для обработки вашим сценарием CGI.

Как настроить Python на FastCGI на IIS

Вот как настроить Python на FastCGI IIS 7+, открыв путь для достойной настройки DJango.

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

В этом примере не используется консоль управления IIS, но отображается содержимое файлов конфигурации.

Шаг 1

Установите Python + хороший отладчик (в этом примере используется WingIDE, который я нашел отличный инструмент). В этом примере предполагается, что папка c: \ python27

Шаг 2

Создайте веб-папку, например, на localhost c: \ inetpub \ wwwroot \ mypythonfolder, и поместите в нее следующий файл web.config:

Обратите внимание на | вертикальная черта в директиве scriptProcessor. Это используется IIS для сопоставления сценария с приложением fastCgi (шаг 3). Он должен посимвольно соответствовать настройкам полного пути + вертикальной черты + аргументов из шага 3 ниже.

Шаг 3

В файле applicationHost.config в папке c: \ windows \ system32 \ inetsrc \ config поместите в раздел следующее:

    <fastCgi>
        <application fullPath="c:\python27\python.exe" arguments="c:\python27\lib\mylib\myfcgi.py" monitorChangesTo="C:\Python27\Lib\r4a\r4afcgi.py" stderrMode="ReturnStdErrIn500" maxInstances="4" idleTimeout="300" activityTimeout="300" requestTimeout="90" instanceMaxRequests="200" protocol="NamedPipe" queueLength="1000" flushNamedPipe="true" rapidFailsPerMinute="10" />
    </fastCgi>

Шаг 4

В c: \ python27 \ lib \ mylib \ myfcgi.py поместите следующий код:

import wingdbstub

import os, io, sys ret = "environment: \ r \ n" для параметра в os.environ.keys (): ret = ret + "% s =% s \ r \ n"% (param, os.environ [ param]) ret = ret + "\ r \ nArgs:" для arg в sys.argv: ret = ret + arg handle = io.open ("c: \ temp \ myfcgi.log", 'wb') handle.write (ret) handle.close ()

Шаг 5

Убедитесь, что у IUSR есть права на запись в вашу папку c: \ temp

Шаг 6

Поместите wingdbstub.py и wingdebugpw в свою папку c: \ python27 \ lib \ mylib \. Это позволит отладку в wingide. Эти файлы поставляются с установкой вашего крыла. Примечание: если Python также необходимо скомпилировать ваш код в wingstub.pyc, IUSR потребуются права на запись в эту папку, поскольку процесс python будет запущен под этой учетной записью IIS.

Шаг 6

Откройте wingdb и установите точку останова в строке import os, io, sys

Шаг 7

Нажмите в своем браузере http: // локальный / mypythonfolder

Если все работает правильно, то теперь должен быть запущен wingide для отображения работающего кода в точке останова. Если нет: - либо проблема с брандмауэром. Процесс python связывается с интерфейсом WingIDE через TCP-соединение - или есть проблема с безопасностью внутри wingide. Ему нужна соответствующая версия файла wingdebugpw, который в основном содержит пароль или токен, который проверяет доступ к вашей установке wingide. Если бы это было не так, любой, у кого есть tcp-доступ к вашему компьютеру, мог отлаживать ваш код.

Шаг 8

Убедитесь, что в c: \ temp создан файл журнала. Это также должно сработать, если вы не можете выполнить шаг 7

Шаг 9

Обратите внимание, что эта страница запускает отладчик, но не возвращает страницу веб-браузеру. Немного предыстории: веб-сервер передает fastcgi через так называемые «записи». Это означает, что каждый отдельный пользовательский запрос поступает в ваше приложение, упакованный в несколько отдельных «записей». Каждая запись представляет собой структуру данных, которая указывает начало запроса, строку запроса, переменные публикации и т. Д. Распаковка этих записей в один запрос является довольно громоздкой, она соответствует спецификации fastcgi для http://www.fastcgi.com/devkit/doc/fcgi-spec.html#S1

В качестве содержимого c: \ python27 \ lib \ mylib \ myfcgi.py я только что добавил копию zoofcgi.py, предоставленную Helicontech. Этот файл python может декодировать эти записи и обслуживать страницу, и его довольно интересно отлаживать. Также обратите внимание, что Helicontech дополнительно предоставляет dll, которая находится между IIS и zoofcgi.py, но эта dll не является строго необходимой. Я считаю, что он реализует слегка улучшенную и общую версию реализации fastcgi, предоставляемую msft. Однако, когда вы используете их dll, когда вы хотите выполнить свой код, процесс завершается довольно быстро, и IIS / DLL убивает ваш процесс python, когда он приходит к выводу, что ответ не возвращается в течение секунды или 2.

Вот и все. В принципе, связь между IIS и вашим кодом Python осуществляется с помощью именованных каналов. Вы должны иметь возможность настроить его с помощью сокетов tcp, но я не смог выяснить, какой порт используется (я считаю, что stdin должен быть преобразован в порт, который затем можно выбрать () ed, но я не дал этого любая попытка)

Я не пробовал это с Python, но он отлично работал как CGI с Perl. ActiveState's продукты легко интегрируются с IIS. У меня был большой успех с ActivePerl. У них также есть ActivePython что могло бы (вероятно) также сработать там. Тогда я думаю, вы бы просто скачали Django установить это.

РЕДАКТИРОВАТЬ: Хорошо, так что избавьтесь от кажущейся интеграции с IIS ... ОДНАКО, вот статья о как интегрироваться в IIS. Вы также можете рассмотреть Железный питон как ваш дистрибутив для Windows.

Что касается провайдера, я сомневаюсь, что им нужно знать больше, чем о платформе веб-разработки, такой как ASP / ASP.NET, и что Python - это язык, используемый для разработки с ней.

Что касается установки, о которой я упоминал выше, я собираюсь попробовать это и посмотреть, как это будет. Я опубликую на нем заметки, если все заработает нормально!