Як пояснити встановлення Django / Python для новичка Python, який працює на спільному сервері IIS [закрито]


9

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

Я хочу зробити переробку, переписати наш веб-сайт і хочу перейти з PHP на налаштування Python / Django. Хостинг-провайдер відкритий для пропозицій, але зрозуміло, що "Ми насправді не знаємо, що таке Python чи як він працює, але якщо ви можете нам пояснити це, ми спробуємо встановити вам все, що вам потрібно" .

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

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

Відповіді:


8

Якщо ви застрягли у використанні IIS, використовуйте PyISAPIe замість CGI, якщо можете. Інструкції та посилання для PyISAPIe нижче. Ваш веб-хост дізнається набагато більше про розширення ISAPI, якщо вони керуватимуть IIS, ніж про Python, і їм не потрібно буде багато знати про Python з PyISAPIe.

МОЛЬШИЙ кращий спосіб зробити це ВИКОРИСТАННЯ PyISAPIe, РОЗШИРЕННЯ ІСАПІ . 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. Ditto для налаштування проксі 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.


Оскільки хостинг є спільним, головне питання полягає в тому, як би хостинг-провайдер налаштував PyISAPIe відповідно до моїх потреб, а також різних потреб інших клієнтів. Не вдалося знайти інструкції щодо налаштування Джанго за допомогою WSGI на домашній сторінці ... Якщо все інше не вдасться, я просто використаю підхід CGI. Маючи менше 400 запитів на тиждень , я думаю, що ми можемо жити з рішенням CGI, поки не вирішимо перейти на хостинг.
Епсілон

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). Він повинен відповідати символу за символом налаштуванням fullpath + pipe + + аргументів із кроку 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 = "середовище: \ r \ n" для парами в os.environ.keys (): ret = ret + "% s =% s \ r \ n"% (param, os.environ [ param]) ret = ret + "\ r \ nArgs:" for arg in 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 \. Це дозволить налагоджувати в крилатій частині. Ці файли надаються при встановленні крила. Примітка: якщо Python також повинен скомпілювати ваш код у wingstub.pyc, IUSR потребує прав на запис у цю папку, оскільки процес Python буде запущений під цим обліковим записом IIS

Крок 6

Відкрийте wingdb і встановіть точку розриву на лінії 'import os, io, sys'

Крок 7

Натисніть у своєму браузері http: // localhost / mypythonfolder

Якщо все працює правильно, тепер слід спрацьовувати, щоб відобразити запущений код у точці розриву. Якщо ні: - або проблема з брандмауером. Процес python зв’язується з інтерфейсом WingIDE через tcp-з'єднання - або виникає проблема із захистом всередині крила. Для цього потрібна належна версія файлу wingdebugpw, яка в основному містить пароль або маркер, що підтверджує доступ до вашої інсталяції. Якщо це не так, хтось із доступом до 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 та вашим пітон-кодом здійснюється з іменованими каналами. Ви повинні бути в змозі налаштувати його за допомогою сокетів tcp, але я не зміг зрозуміти, який порт використовується (я вважаю, що stdin повинен бути перетворений на порт, який потім можна вибрати () ed, але я цього не дав будь-яка спроба)


0

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

РЕДАКТУЙ: Добре, так подряпайте уявну інтеграцію з IIS ... ТАКОЖ, ось стаття про те, як інтегруватися в IIS . Ви також можете розглянути Iron Python як ваш дистрибутив для вікна Windows.

Для провайдера я б сумнівався, що вони повинні знати більше, ніж це платформа для веб-розробок, як ASP / ASP.NET, і що Python - це мова, яка використовується для її розробки.

Що стосується установки, про яку я згадував вище, я спробую це і побачити, як вона спрацьовує. Я опублікую нотатки про нього, якщо я зроблю це нормально!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.