Обзор высокого уровня
HTTP -> IIS -> ISAPI -> FastCGI -> WSGI (приложение Flask)
Шаги настройки
Шаг 1. Установите необходимые двоичные файлы
- Установить Python (2.7 или 3.x - я использовал 3.3)
- Установить pip-Win (я использовал версию 1.6)
- Установите pywin32 (я использовал версию 218)
- Установите расширение IIS FastCGI с помощью fcgisetup 1.5
Шаг 2. Установите дополнительные бинарные пакеты
Я установил pyodbc
с помощью установщика .exe с этого сайта . Установка из исходного кода (например, pip, для установки в виртуальную среду) требует компилятора C / C ++.
Шаг 3: Получить копию wfastcgi.py
Выберите версию, которая будет работать для вас, желательно ту, которая поддерживает Python 3.3 (я использовал David Ebbo ). Вы можете хотеть "официальную" версию отсюда .
Установите скрипт wfastcgi.py
в C:\Inetpub\wwwroot
и убедитесь, что учетная запись, которая будет обслуживать ваше приложение (по умолчанию «Сетевая служба»), имеет к нему доступ для чтения.
Шаг 4: Установить virtualenv
В Системные пакеты сайта
C:\Python33\Scripts\pip.exe install virtualenv
(если вы используете Python 3.3 и установили все в папку по умолчанию)
Шаг 5. Установите приложение Flask
Вы можете установить приложение практически в любом месте системы. Вы можете установить его в C:\Inetpub
. Для этого урока мы будем называть корневую папку вашего приложения установкой %APPROOT%
. (Не ставьте кавычки в переменной среды.)
Убедитесь, что учетная запись, которая будет обслуживать ваше приложение (по умолчанию «Сетевая служба»), имеет доступ на чтение ко всем файлам сценария. Эта команда:
cacls "%APPROOT%" /S:"D:PAI(A;OICI;FA;;;BA)(A;OICIIO;FA;;;CO)(A;OICI;0x1200a9;;;NS)(A;OICI;FA;;;SY)"
предоставит вашему приложению следующие разрешения:
- BUILTIN \ Администраторы: полный контроль над этой папкой, подпапками и файлами
- CREATOR OWNER: Полный контроль только для подпапок и файлов
- NT AUTHORITY \ NETWORK SERVICE: разрешения на чтение для этой папки, подпапок и файлов
- NT AUTHORITY \ SYSTEM: полный контроль над этой папкой, подпапками и файлами
Добавьте любую необходимую локальную конфигурацию (мое приложение использует файл local.cnf, который игнорируется системой контроля версий) - например, URL базы данных.
Убедитесь, что ваше приложение содержит файл Web.config
в формате %APPROOT%
- информацию о формате файла см. В разделе ниже.
Шаг 6: создайте virtualenv для вашего приложения
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) . Обязательно укажите локальный путь для узла (веб-сайт или виртуальный каталог), который вы создаете, к корневой папке вашего приложения Flask. wfastcgi.py
использует локальный путь для идентификации приложения Flask для обработки запросов.
Предоставьте права доступа Read и Script ( Run Scripts ) для узла.
Шаг 9: настроить fcgiext.ini
Этот файл находится в том же каталоге, что и fcgiext.dll
, установленный на шаге 1 (по умолчанию %SYSTEMROOT%\system32\inetsrv
).
При настройке этого файла вам нужно несколько параметров:
- {идентификатор сайта} : числовой идентификатор сайта, который вы можете найти на подробной (правой) панели Диспетчер служб IIS , когда «Веб-сайты» выбрано из дерева в левой части окна.
- {имя приложения} : имя раздела в
fcgiext.ini
, который предоставляет параметры для обработчика FastCGI (ISAPI). Вы выбираете это значение - выберите то, что представляет ваше приложение.
- {путь к приложению} : для виртуального каталога - URL-путь на веб-сайте к виртуальному каталогу, который необходимо обработать.
- {Approot} : путь к корневому каталогу вашего приложения.
Используйте эти параметры для:
Шаг 10. Настройка обработки FastCGI для целевых URL-адресов
Используя Диспетчер информационных служб Интернета (IIS) , выберите «Свойства ...» в контекстном меню (щелчок правой кнопкой мыши) узла (веб-сайт или виртуальный каталог), который будет обслуживаться вашей колбой. приложение и:
На вкладке «Домашний каталог» (веб-сайт) или «Виртуальный каталог» (виртуальный каталог) нажмите кнопку «Конфигурация ...».
В разделе «Карты приложений с подстановочными знаками» используйте кнопку «Вставить ...», чтобы добавить сопоставление с подстановочными знаками:
- Исполняемый файл - это библиотека расширения FastCGI, установленная на шаге 1. Его расположение по умолчанию:
%SYSTEMROOT%\system32\inetsrv\fcgiext.dll
.
- Убедитесь, что для параметра «Убедитесь, что файл существует» установлено значение . Приложения Flask выполняют свою собственную маршрутизацию, которая не обязательно связана с файлами на диске.
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 cЗначительно зависает в IIS 7. Начиная с этой версии, FastCGI имеет поддержку напрямую через IIS и не настраивается через расширение (т. е. шаг 1.4 не является необходимым, а fcgiext.ini
не контролирует поведение FastCGI для IIS 7+ и не требуетсоздать / редактировать его).Вместо этого убедитесь, что CGI включен в Службы IIS в Панель управления> Программы и компоненты> Включение или отключение функций Windows .
Web.config
IIS 7 - это первая версия IIS, которая считывает параметры конфигурации, относящиеся к FastCGI, из файла Web.config
.Ваш файл Web.config
должен содержать в элементе <configuration>
элемент <system.webServer>
, содержащий элемент <handlers>
, содержащий элемент <add>
с атрибутами:
- path:
*
- глагол:
*
- модули:
FastCgiModule
- resourceType:
Unspecified
- requireAccess:
Script
- scriptProcessor: хитрый
Атрибут scriptProcessor
Этот атрибут элемента <add>
должен содержать полный путь к интерпретатору PythonФайл .exe
, который вы хотите использовать (файл в подпапке Scripts
вашего Python virtualenv), затем |
и затем полный путь к файлу wfastcgi.py
, который вы используете.Поскольку эти пути зависят от настроек компьютера, на котором выполняется ваше приложение, вам может потребоваться установить этот атрибут в процессе развертывания.
Настройка IIS для всего сервера
- В
inetmgr
щелкните узел сервера в дереве и затем выберите Настройки FastCGI в центральной панели.Появится список пар исполняемый / аргумент. - Добавьте запись для полных путей к
python.exe
и wfastcgi.py
, которые вы используете.Оба должны быть заданы так же, как они отображаются в элементе <handlers>/<add>
в вашем Web.config
. - Убедитесь, что в новой записи приложения FastCGI установлена переменная среды
PYTHONPATH
, включающая коренькодовая база вашего приложения.Совет по добавлению пустой записи PYTHONPATH
в <applicationSettings>
вашего Web.config
может не относиться к этой версии IIS.