Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При использовании служб 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. Настройте эти значения для путей соответствующим образом.
Измените запись
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>
В разделе
<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
является необязательным, но этот ключ рекомендуется для отладки приложения.
- Значение ключа
Задайте запись
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" />
приложения 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 копирует только файлы проекта на сервер. Вы отвечаете за всю конфигурацию на стороне сервера.