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

9

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

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

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

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

Epcylon
источник

Ответы:

8

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

МНОГО ЛУЧШЕГО СПОСОБА ЭТОГО ИСПОЛЬЗОВАНИЯ PyISAPIe, ISAPI EXTENSION . 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-скриптом.

user6281
источник
Поскольку хостинг является общим, основная проблема заключается в том, как хостинг-провайдер настроит PyISAPIe в соответствии с моими потребностями, а также различными потребностями других своих клиентов. Я не смог найти инструкции по настройке Django с WSGI на домашней странице ... Если ничего не поможет, я просто использую подход CGI. С менее чем 400 запросами в неделю , я думаю, мы можем жить с решением CGI, пока не решим сменить хостинг.
Epcylon
1

Как настроить 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

импортировать os, io, sys ret = "environment: \ r \ n" для параметра в os.environ.keys (): ret = ret + "% s =% s \ r \ n"% (param, os.environ [ param]) ret = ret + "\ r \ nArgs:" для аргумента в 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: // localhost / 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 должен быть преобразован в порт, который затем можно выбрать select () ed, но я этого не дал любая попытка)

Роберт ван Гил
источник
0

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

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

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

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

squillman
источник