Ответ 1
Обзор высокого уровня
HTTP → IIS → ISAPI → FastCGI → WSGI (приложение для фляг)
Шаги настройки
Шаг 1: Установка обязательных двоичных файлов
- Установить Python (2.7 или 3.x - я использовал 3.3)
- Установить pip-Win (я использовал версию 1.6)
- Установить pywin32 (я использовал версию 218)
- Установите расширение IIS FastCGI с помощью fcgisetup 1.5
Шаг 2: Установка дополнительных двоичных пакетов
Я установил pyodbc
с помощью установщика .exe с этого сайта. Для установки из источника (например, для установки в виртуальную среду) требуется компилятор C/С++.
Шаг 3: Получите копию wfastcgi.py
Выберите версию, которая будет работать для вас, предпочтительно, которая поддерживает Python 3.3 (я использовал Дэвид Эббо). Вам может понадобиться "официальная" версия отсюда.
Установите wfastcgi.py
script в C:\Inetpub\wwwroot
и убедитесь, что учетная запись, которая будет обслуживать ваше приложение (по умолчанию "Сетевая служба" ), имеет доступ к ней.
Шаг 4: Установите virtualenv
В пакеты сайта
C:\Python33\Scripts\pip.exe install virtualenv
(если вы используете Python 3.3 и все установлено в местоположении по умолчанию)
Шаг 5: установите приложение с флягой
-
Вы можете установить приложение практически в любом месте системы. Вы можете установить его под
C:\Inetpub
. В этом уроке мы будем называть корневую папку вашего приложения install%APPROOT%
. (Не помещайте кавычки в переменную окружения.) -
Убедитесь, что учетная запись, которая будет обслуживать ваше приложение (по умолчанию "Сетевая служба" ), имеет доступ для чтения ко всем файлам script. Эта команда:
cacls "%APPROOT%" /S:"D:PAI(A;OICI;FA;;;BA)(A;OICIIO;FA;;;CO)(A;OICI;0x1200a9;;;NS)(A;OICI;FA;;;SY)"
предоставит вашему каталогу приложений следующие разрешения:
- BUILTIN\Administrators: Полный контроль над этой папкой, вложенными папками и файлами
- CREATOR OWNER: Полный доступ только для подпапок и файлов
- NT AUTHORITY\NETWORK SERVICE: Разрешения для чтения для этой папки, подпапок и файлов
- NT AUTHORITY\SYSTEM: полный контроль над этой папкой, вложенными папками и файлами
-
Добавьте любую локальную конфигурацию (мое приложение использует файл local.cnf, который игнорируется системой управления версиями) - например. URL-адреса базы данных.
-
Убедитесь, что ваше приложение содержит
Web.config
файл в%APPROOT%
- см. раздел ниже для информации о формате файла.
Шаг 6: Создайте виртуальную виртуальную машину для вашего приложения
C:\Python33\Scripts\virtualenv.exe --system-site-packages "%APPROOT%\env"
(Выберите другое имя, кроме env
, если ваше приложение уже использует этот каталог.)
Шаг 7: установите пакеты, необходимые вашему приложению для virtualenv
cd "%APPROOT%"
env\Scripts\activate
pip install -r Packages
(Мой проект хранит спецификацию требований в файле с именем Packages
.)
Шаг 8. Создание веб-сайта или виртуального каталога для вашего приложения
Используйте inetmgr.msc
(Пуск → Выполнить..., затем введите inetmgr
в поле редактирования и нажмите ENTER), чтобы запустить диспетчер служб IIS. Не забудьте установить локальный путь для созданного node (веб-сайта или виртуального каталога) в корневую папку вашего приложения Flask. wfastcgi.py
использует локальный путь для идентификации приложения Flask для обработки запросов.
Предоставьте разрешения Прочитать и script (Запуск сценариев) для node.
Шаг 9: Настроить fcgiext.ini
Этот файл находится в том же каталоге, что и fcgiext.dll
, установленном на шаге 1 (по умолчанию %SYSTEMROOT%\system32\inetsrv
).
При настройке этого файла вам нужно несколько параметров:
- {идентификатор сайта}: числовой идентификатор сайта, который вы можете найти на панели подробных сведений (в правой части) диспетчера служб IIS, когда выбрано "Веб-узлы" из дерева в левой части окна.
- {имя приложения}: имя раздела в
fcgiext.ini
, которое предоставляет параметры для обработчика FastCGI (ISAPI). Вы выбираете это значение - выберите то, что представляет ваше приложение. - {путь к приложению}: для виртуального каталога, путь URL-адреса в веб-сайте к виртуальному каталогу, который будет обрабатываться.
- {approot}: путь к корневому каталогу вашего приложения.
Используйте эти параметры для:
-
Сопоставьте запросы FastCGI с разделом обработки:
- Для всего веб-сайта добавьте
*:{site id}={application name}
в раздел[Types]
. - Для виртуального каталога добавьте
*:/lm/w3svc/{site id}/root/{path to app}={application name}
в раздел[Types]
.
- Для всего веб-сайта добавьте
-
Добавьте раздел обработки (
[{application name}]
) с параметрами для этого приложения (полная ссылка):-
ExePath={approot}\env\python.exe
-
Arguments=C:\Inetpub\wwwroot\wfastcgi.py
(или там, где установленwfastcgi.py
адаптер script) -
EnvironmentVars=ENV_VAR1:value,ENV_VAR2:value,etc.
(см. полную ссылку для правил цитирования). Это хорошее место для установки переменной WSGI_LOG - убедитесь, что учетная запись, обслуживающая сайт ( "Сетевая служба" по умолчанию) имеет права на запись для файла и ( если файл не существует), чтобы добавить файл в содержащийся каталог.
-
Шаг 10: настройка обработки FastCGI для целевых URL
Используя диспетчер служб IIS, выберите "Свойства..." в контекстном меню (<имя_пользователя > или веб-сайта), которое будет обслуживаться вашим флеш-приложением, и:
-
На вкладке "Домашний каталог" (Веб-сайт) или "Виртуальный каталог" (Виртуальный каталог) нажмите кнопку "Конфигурация...".
-
В разделе "Карты подстановочных приложений" используйте кнопку "Вставить...", чтобы добавить сопоставление подстановочных знаков:
- Исполняемый файл - это DLL-расширение FastCGI, установленное на шаге 1. Его местоположение по умолчанию -
%SYSTEMROOT%\system32\inetsrv\fcgiext.dll
. - Убедитесь, что "Проверить, что файл существует" не отмечен. Приложения Flask выполняют свою собственную маршрутизацию, которая не обязательно имеет какое-либо отношение к файлам на диске.
- Исполняемый файл - это DLL-расширение FastCGI, установленное на шаге 1. Его местоположение по умолчанию -
Web.config
Этот файл (в этой настройке) читается wfastcgi.py
, не по IIS.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<applicationSettings>
<add key="PYTHONPATH" value=""/>
<add key="WSGI_HANDLER" value="module.application"/>
</applicationSettings>
</configuration>
-
<add>
элементы добавляют переменные среды (os.environ
в Python). -
WSGI_HANDLER
должен быть указан - он сообщаетwfastcgi.py
, как найти объект приложения WSGI. Если значение заканчивается на "()",wfastcgi.py
вызовет именованный объект, ожидая, что он вернет объект приложения WSGI. -
PYTHONPATH
обрабатывается специально -wfastcgi.py
выполняет (переменную) переменную расширения (используя стандартную номенклатуру Windows%VAR%
) по значениюPYTHONPATH
, затем разбивает результат на точки с запятой и добавляет записи доsys.path
перед вызовом приложения WSGI. Посколькуwfastcgi.py
изменяет текущий каталог на путь, указанный в качестве локального пути к веб-сайту или виртуальному каталогу, перед импортом модуля, содержащего объект приложения WSGI, включая пустую строку в PYTHONPATH, приведет к тому, что поиск будет включать в себя ваш каталог приложений Flask в качестве отправной точки. Вы также можете установить PYTHONPATH вfcgiext.ini
(в этом случае он будет включен вsys.path
интерпретатором, а затем снова наwfastcgi.py
). -
WSGI_RESTART_FILE_REGEX
дает регулярное выражение Python, используемое для фильтрации уведомлений об изменении файла для путей, которые должны приводить к перезагрузке процесса обработчика FastCGI. Установите это, чтобы инициировать изменение исходных файлов или файлов конфигурации. Я использую(?i).*\.(py|cnf|config)$
. -
WSGI_LOG
может быть установлен здесь, но я думаю, что он лучше установлен вfcgiext.ini
.
Для IIS 7
Некоторые вещи с FastCGI сильно изменились с IIS 7. Начиная с этой версии, FastCGI поддерживает непосредственно через IIS и не настраивается через расширение (то есть, шаг 1.4 не нужен, а fcgiext.ini
не контролирует поведение FastCGI для IIS 7 +, и нет необходимости создавать/редактировать его). Вместо этого убедитесь, что CGI включен в Информационные службы Интернета в Панели управления > Программы и функции > Включение и отключение функций Windows... p >
Web.config
IIS 7 - первая версия IIS для чтения настроек конфигурации, связанных с FastCGI, из файла Web.config
. Ваш Web.config
файл должен содержать в элементе <configuration>
элемент <system.webServer>
, содержащий элемент <handlers>
, содержащий элемент <add>
с атрибутами:
- путь:
*
- глагол:
*
- модули:
FastCgiModule
- resourceType:
Unspecified
- requireAccess:
Script
- scriptProcessor: сложный
Атрибут scriptProcessor
Этот атрибут элемента <add>
должен содержать полный путь к файлу-интерпретатору Python .exe
, который вы хотите использовать (тот, который находится в подпапке Scripts
вашего виртуального винта Python), а затем |
, а затем полный путь к файлу wfastcgi.py
, который вы используете. Поскольку эти пути зависят от настройки компьютера, на котором работает ваше приложение, вы можете захотеть, чтобы этот атрибут был установлен как часть процесса развертывания.
Настройка сервера IIS
- В
inetmgr
нажмите на сервере node в дереве, а затем выберите Настройки FastCGI в центральной панели. Появится список пар "исполняемый/аргумент". - Добавьте запись для полных путей к вашим
python.exe
иwfastcgi.py
, которые вы используете. Оба должны быть указаны так же, как они отображаются в элементе<handlers>/<add>
вWeb.config
. - Обязательно настройте переменную среды
PYTHONPATH
в новой записи приложения FastCGI, чтобы включить корень вашей прикладной кодовой базы. Совет по добавлению пустойPYTHONPATH
записи в<applicationSettings>
вашегоWeb.config
может не применяться к этой версии IIS.