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


Настройка веб-приложений 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 больше не поддерживается и может привести к ошибкам.

Чтобы использовать 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 копирует только файлы проекта на сервер. Вы отвечаете за всю конфигурацию на стороне сервера.