Поделиться через


Настройка веб-приложений Python для IIS

При использовании служб IIS в качестве веб-сервера на компьютере Windows (включая виртуальных машинах Windows в Azure), необходимо настроить веб-приложение Python для правильной обработки кода Python. Конфигурация выполняется с помощью параметров в файле web.config для веб-приложения Python. В этой статье описывается настройка необходимых параметров.

Необходимые условия

  • Python в Windows установлен. Чтобы запустить веб-приложение, сначала установите требуемую версию Python непосредственно на хост-компьютере Windows, как описано на установке интерпретаторов Python.

    • Определите расположение интерпретатора python.exe. Для удобства можно добавить это расположение в переменную среды PATH.
  • Необходимые пакеты установлены. Для выделенного узла можно использовать глобальную среду Python для запуска приложения, а не виртуальной среды. Соответственно, все требования приложения можно установить в глобальную среду, выполнив команду pip install -r requirements.txt.

Задайте web.config, чтобы указать интерпретатор Python

Файл web.config для приложения Python указывает веб-серверу IIS (версии 7 или более поздней версии), работающему в Windows, о том, как он должен обрабатывать запросы Python через HttpPlatformHandler (рекомендуется) или FastCGI. Visual Studio версии 2015 и более ранних версий автоматически вносят эти изменения. Для Visual Studio 2017 и более поздних версий необходимо вручную изменить файл web.config.

Если проект еще не содержит файл web.config, его можно добавить, щелкнув правой кнопкой мыши каталог проекта, выбрав Добавить > новый элемент и найдите web.config или создав пустой XML-файл web.config.

Вариант 1. Настройка HttpPlatformHandler

Модуль HttpPlatform передает подключения сокета непосредственно к автономному Python-процессу. Эта сквозная передача позволяет запускать любой веб-сервер, который вам нравится, но для этого требуется скрипт запуска, на котором выполняется локальный веб-сервер. Этот подход обычно выполняется с помощью веб-платформы Python, например Flask или Django. Скрипт указывается в элементе <httpPlatform> файла web.config. Атрибут processPath указывает на интерпретатор Python расширения сайта. Атрибут arguments указывает на скрипт запуска, на котором выполняется локальный веб-сервер, в данном случае runserver.pyи любые аргументы, которые вы хотите предоставить:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="c:\python36-32\python.exe"
                  arguments="c:\home\site\wwwroot\runserver.py --port %HTTP_PLATFORM_PORT%"
                  stdoutLogEnabled="true"
                  stdoutLogFile="c:\home\LogFiles\python.log"
                  startupTimeLimit="60"
                  processesPerApplication="16">
      <environmentVariables>
        <environmentVariable name="SERVER_PORT" value="%HTTP_PLATFORM_PORT%" />
      </environmentVariables>
    </httpPlatform>
  </system.webServer>
</configuration>

В этом примере переменная среды HTTP_PLATFORM_PORT содержит порт, который должен прослушивать локальный сервер для подключений из localhost. В этом примере также показано, как создать другую переменную среды, SERVER_PORT. При необходимости можно создавать и назначать переменные среды.

Вариант 2. Настройка обработчика FastCGI

Кроме того, вы можете использовать FastCGI для настройки приложений. FastCGI — это интерфейс, который работает на уровне запроса. Веб-сервер IIS принимает входящие подключения и перенаправляет каждый запрос в WSGI-приложение, которое работает в одном или нескольких постоянных процессах Python.

Заметка

Хотя проект можно настроить с помощью FastCGI, рекомендуется использовать HttpPlatformHandler для настройки приложений, так как проект WFastCGI WFastCGI больше не поддерживается и может привести к ошибкам.

Чтобы использовать FastCGI, сначала установите и настройте пакет wfastcgi, как описано в pypi.org/project/wfastcgi/.

Затем измените файл web.config приложения, чтобы включить полные пути к исполняемому файлу python.exe и файлу wfastcgi.py в ключе PythonHandler. В следующих шагах предполагается, что Python установлен в папке c:\python36-32, а код приложения находится в папке c:\home\site\wwwroot. Настройте эти значения для путей соответствующим образом.

  1. Измените запись PythonHandler в файле web.config, чтобы путь соответствовал расположению установки Python. Дополнительные сведения см. в справочнике по конфигурации IIS (iis.net).

    <system.webServer>
       <handlers>
         <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
             scriptProcessor="c:\python36-32\python.exe|c:\python36-32\wfastcgi.py"
             resourceType="Unspecified" requireAccess="Script"/>
       </handlers>
    </system.webServer>
    
  2. В разделе <appSettings> файла web.config добавьте ключи для WSGI_HANDLER, WSGI_LOG (необязательно) и PYTHONPATH:

    <appSettings>
       <add key="PYTHONPATH" value="c:\home\site\wwwroot"/>
       <!-- The handler here is specific to Bottle; see the next section. -->
       <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
       <add key="WSGI_LOG" value="c:\home\LogFiles\wfastcgi.log"/>
    </appSettings>
    

    Эти <appSettings> значения доступны приложению в качестве переменных среды:

    • Значение ключа PYTHONPATH может быть свободно расширено, но оно должно содержать основную директорию вашего приложения.
    • Ключ WSGI_HANDLER должен указывать на приложение WSGI, импортируемое из приложения.
    • Ключ WSGI_LOG является необязательным, но этот ключ рекомендуется для отладки приложения.
  3. Задайте запись WSGI_HANDLER в файле web.config соответствующим образом для используемой платформы:

    • бутылки: добавьте скобки после значения app.wsgi_app, как показано в этом примере. Скобки необходимы, так как объект является функцией, а не переменной. Синтаксис можно увидеть в файле app.py.

      <!-- Bottle apps only -->
      <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
      
    • Flask: измените значение WSGI_HANDLER на <project_name>.app, где <project_name> совпадает с именем проекта. Точный идентификатор можно найти, просмотрев инструкцию from <project_name> import app в файле runserver.py. Например, если проект называется FlaskAzurePublishExample, запись отображается следующим образом:

      <!-- Flask apps only: Change the project name to match your app -->
      <add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
      
    • Django: требуется два изменения для файла web.config для проектов Django.

      • Измените значение WSGI_HANDLER на django.core.wsgi.get_wsgi_application(). Объект находится в файле wsgi.py.

        <!-- Django apps only -->
        <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
        
      • Добавьте следующую запись сразу после записи для ключа WSGI_HANDLER. Замените значение DjangoAzurePublishExample именем проекта:

        <add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
        
  4. приложения Django только: в файле settings.py проекта Django добавьте домен или IP-адрес сайта в запись ALLOWED_HOSTS. Замените "1.2.3.4" URL-адресом или IP-адресом:

    # Change the URL or IP address to your specific site
    ALLOWED_HOSTS = ['1.2.3.4']
    

    Если вы не добавляете URL-адрес в результаты массива, вы увидите следующую ошибку:

    DisallowedHost at / Invalid HTTP_HOST header: '\<site URL\>'. You might need to add '\<site URL\>' to ALLOWED_HOSTS.
    

Если массив пуст, Django автоматически разрешает 'localhost' и '127.0.0.1' в качестве узлов. Если вы добавите рабочий URL-адрес, узловые сайты не допускаются автоматически. По этой причине может потребоваться сохранить отдельные копии settings.py файла для разработки и продакшена или, например, использовать переменные среды для управления значениями во время выполнения.

Развертывание в IIS или виртуальной машине Windows

Если в проекте есть правильный файл web.config, вы можете опубликовать его на компьютере под управлением IIS из обозревателя решений . Щелкните проект правой кнопкой мыши, выберите Опубликовать, а затем выберите IIS, FTP и т. д.. В этом случае Visual Studio копирует только файлы проекта на сервер. Вы отвечаете за всю конфигурацию на стороне сервера.