Подтвердить что ты не робот

Как развернуть приложение Flask в IIS?

Может ли кто-нибудь помочь мне получить приложение Flask, работающее на IIS 6? Я попытался использовать isapi-wsgi, но когда я посещаю адрес виртуального каталога, я получаю страницу с надписью "Указанный модуль не может быть найден". Существуют ли другие варианты для этого?

Ниже представлен Python script, который я написал для isapi-wsgi. Виртуальный каталог был создан, и все было нормально в диспетчере IIS, но сайт не работал.

from wof import app
import os

app.secret_key=os.urandom(24)

import isapi_wsgi
def __ExtensionFactory__():
    return isapi_wsgi.ISAPISimpleHandler(app)

if __name__ == '__main__':
    from isapi.install import *
    params = ISAPIParameters()
    sm = [ScriptMapParams(Extension="*", Flags=0)]
    vd = VirtualDirParameters(Name="WOFPy_Sondes", Description="ISAPI-WSGI for WOFPY Sondes test", ScriptMaps=sm, ScriptMapUpdate="replace")
    params.VirtualDirs = [vd]
    HandleCommandLine(params)
4b9b3361

Ответ 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 выполняют свою собственную маршрутизацию, которая не обязательно имеет какое-либо отношение к файлам на диске.

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.

Ответ 3

Я никогда не использую IIS, но IIS поддерживает CGI-шлюз, поэтому вы должны иметь возможность адаптировать CGI с WSGI.

IIS <--> CGI <--> WSGI

Чтобы запустить WSGI как CGI script, вы можете использовать CGIHandler в стандартной библиотеке Python.