Configurar aplicativos Web do Python para o IIS
Ao usar os Serviços de Informações da Internet (IIS) como um servidor Web em um computador Windows (incluindo máquinas virtuais do Windows no Azure), você precisa configurar o aplicativo Web Python para permitir que o IIS processe corretamente o código Python. A configuração é realizada por meio de ajustes no arquivo web.config
para o aplicativo Web em Python. Este artigo descreve como definir as configurações necessárias.
Pré-requisitos
Python no Windows instalado. Para executar um aplicativo Web, primeiro instale a versão necessária do Python diretamente no computador host do Windows, conforme descrito em Instalar interpretadores do Python.
- Identificar o local do interpretador
python.exe
. Para sua conveniência, você pode adicionar esse local à variável de ambiente PATH.
- Identificar o local do interpretador
Pacotes necessários instalados. Para um host dedicado, você pode usar o ambiente global do Python para executar o aplicativo em vez de um ambiente virtual. Da mesma forma, você pode instalar todos os requisitos do aplicativo no ambiente global executando o comando
pip install -r requirements.txt
.
Configurar o web.config para apontar para o interpretador do Python
O arquivo web.config
do aplicativo em Python instrui o servidor Web do IIS (versão 7 ou posterior) em execução no Windows sobre como ele deve tratar as solicitações do Python por meio de HttpPlatformHandler (recomendado) ou FastCGI. As versões do Visual Studio 2015 e anterior fazem essas modificações automaticamente. No Visual Studio 2017 e posterior, você deve modificar o arquivo web.config
manualmente.
Se o projeto ainda não contiver um arquivo web.config
, você pode adicionar um clicando com o botão direito do mouse no diretório do projeto, selecionando Adicionar > Novo Item e procurando por web.config
ou criando um arquivo XML web.config
em branco.
Opção 1: Configurar o HttpPlatformHandler
O módulo HttpPlatform passa conexões de soquete diretamente para um processo de Python autônomo. Essa passagem permite que você execute qualquer servidor Web que desejar, mas ela requer um script de inicialização que executa um servidor Web local. Essa abordagem é comumente feita usando um framework web Python, como Flask ou Django. Você especifica o script no elemento <httpPlatform>
do arquivo web.config
. O atributo processPath
aponta para o interpretador Python da extensão do site. O atributo arguments
aponta para o script de inicialização que executa um servidor Web local, neste caso, runserver.py
, e quaisquer argumentos que você deseja fornecer:
<?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>
Neste exemplo, a variável de ambiente HTTP_PLATFORM_PORT
contém a porta na qual o servidor local deve escutar as conexões do localhost
. Este exemplo também mostra como criar outra variável de ambiente, SERVER_PORT
. Você pode criar e atribuir variáveis de ambiente conforme necessário.
Opção 2: Configurar o manipulador do FastCGI
Como alternativa, você pode usar o FastCGI para configurar seus aplicativos. O FastCGI é uma interface que funciona no nível da solicitação. O IIS recebe conexões de entrada e encaminha cada solicitação para um aplicativo WSGI em execução em um ou mais processos Python persistentes.
Observação
Embora você possa configurar seu projeto usando o FastCGI, recomendamos usar o HttpPlatformHandler para configurar seus aplicativos, pois o projeto WFastCGI não é mais mantido e pode resultar em bugs.
Para usar o FastCGI, primeiro instale e configure o pacote wfastcgi, conforme descrito em pypi.org/project/wfastcgi/.
Em seguida, modifique o arquivo web.config
do aplicativo para incluir os caminhos completos para o executável python.exe
e o arquivo wfastcgi.py
na chave PythonHandler
. As etapas a seguir pressupõem que o Python esteja instalado na pasta c:\python36-32 e o código do aplicativo esteja na pasta c:\home\site\wwwroot. Ajuste esses valores para seus caminhos corretamente.
Modifique a entrada
PythonHandler
no arquivoweb.config
para que o caminho corresponda ao local de instalação do Python. Para obter mais informações, confira Referência de configuração do 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>
Na seção
<appSettings>
do arquivoweb.config
, adicione chaves paraWSGI_HANDLER
,WSGI_LOG
(opcional) ePYTHONPATH
:<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>
Esses valores
<appSettings>
estão disponíveis para seu aplicativo como variáveis de ambiente:- O valor da chave
PYTHONPATH
pode ser estendido livremente, mas deve incluir a raiz do aplicativo. - A chave
WSGI_HANDLER
deve apontar para um aplicativo WSGI importável do seu aplicativo. - A chave
WSGI_LOG
é opcional, mas é recomendada para a depuração do aplicativo.
- O valor da chave
Defina a entrada
WSGI_HANDLER
nos arquivosweb.config
de acordo com a estrutura que você está usando:Bottle: inclua parênteses depois do valor
app.wsgi_app
conforme mostrado no exemplo. Os parênteses são necessários porque o objeto é uma função, não uma variável. Você pode ver a sintaxe no arquivoapp.py
.<!-- Bottle apps only --> <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
Flask: altere o valor de
WSGI_HANDLER
para<project_name>.app
, em que<project_name>
corresponde ao nome do seu projeto. Você pode localizar o identificador exato examinando a instruçãofrom <project_name> import app
no arquivorunserver.py
. Por exemplo, se o projeto fosse denominadoFlaskAzurePublishExample
, a entrada seria semelhante ao seguinte:<!-- Flask apps only: Change the project name to match your app --> <add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
Django: duas alterações são necessárias no arquivo
web.config
para projetos do Django.Altere o valor de
WSGI_HANDLER
paradjango.core.wsgi.get_wsgi_application()
. O objeto está no arquivowsgi.py
.<!-- Django apps only --> <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
Adicione a seguinte entrada imediatamente após a entrada da chave
WSGI_HANDLER
. Substitua o valorDjangoAzurePublishExample
pelo nome do projeto:<add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
Somente aplicativos Django: no arquivo
settings.py
do projeto do Django, adicione o domínio de URL do site ou o endereço IP à entradaALLOWED_HOSTS
. Substitua "1.2.3.4" pelo seu URL ou endereço IP:# Change the URL or IP address to your specific site ALLOWED_HOSTS = ['1.2.3.4']
Se você não adicionar o URL aos resultados da matriz, verá o seguinte erro:
DisallowedHost at / Invalid HTTP_HOST header: '\<site URL\>'. You might need to add '\<site URL\>' to ALLOWED_HOSTS.
Quando a matriz está vazia, o Django permite automaticamente 'localhost'
e '127.0.0.1'
como hosts. Se você adicionar o URL de produção, esses sites de host não serão permitidos automaticamente. Por esse motivo, convém manter cópias do arquivo settings.py
de desenvolvimento e de produção separadas ou usar variáveis de ambiente para controlar os valores de runtime.
Implantar IIS ou uma máquina virtual do Windows
Quando tiver o arquivo web.config
correto no projeto, você pode publicar no computador que está executando o IIS do Gerenciador de Soluções. Clique com o botão direito do mouse no projeto, selecione Publicar e, em seguida, selecione IIS, FTP etc. Nessa situação, o Visual Studio copiará somente os arquivos de projeto para o servidor. Você é responsável por toda a configuração do lado do servidor.