Partilhar via


Configurar aplicativos Web Python para IIS

Ao usar o IIS (Serviços de Informações da Internet) como um servidor Web em um computador Windows (incluindo máquinas virtuais Windows no Azure), você precisa configurar o aplicativo Web Python para habilitar o IIS a processar corretamente o código Python. A configuração é realizada por meio de configurações no arquivo web.config para o aplicativo Web Python. Este artigo descreve como definir as configurações necessárias.

Pré-requisitos

  • Python foi instalado no Windows. Para executar um aplicativo Web, primeiro instale sua versão necessária do Python diretamente na máquina host Windows, conforme descrito em Instalar interpretadores Python.

    • Identifique a localização do intérprete python.exe. Por conveniência, você pode adicionar esse local à sua variável de ambiente PATH.
  • Pacotes necessários instalados. Para um host dedicado, você pode usar o ambiente Python global para executar seu aplicativo em vez de um ambiente virtual. Assim, você pode instalar todos os requisitos do seu aplicativo no ambiente global executando o comando pip install -r requirements.txt.

Defina web.config para apontar para o interpretador Python

O arquivo web.config para seu aplicativo Python instrui o servidor Web IIS (versão 7 ou posterior) em execução no Windows sobre como ele deve lidar com solicitações Python por meio de HttpPlatformHandler (recomendado) ou FastCGI. As versões 2015 e anteriores do Visual Studio fazem essas modificações automaticamente. Para o Visual Studio 2017 e posterior, você deve modificar o arquivo web.config manualmente.

Se o seu projeto ainda não contém 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 Python autônomo. Essa passagem permite que você execute qualquer servidor Web que desejar, mas requer um script de inicialização que execute um servidor Web local. Essa abordagem geralmente é 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 de 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ê queira 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 conexões de 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 FastCGI

Como alternativa, você pode usar o FastCGI para configurar seus aplicativos. FastCGI é uma interface que funciona no nível de 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 possa configurar o seu projeto utilizando FastCGI, recomendamos usar HttpPlatformHandler para configurar os 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 que o código do aplicativo esteja na pasta c:\home\site\wwwroot. Ajuste esses valores para seus caminhos de acordo.

  1. Modifique a entrada PythonHandler no arquivo web.config para que o caminho corresponda ao local de instalação do Python. Para obter mais informações, consulte 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>
    
  2. Na seção <appSettings> do arquivo web.config, adicione chaves para WSGI_HANDLER, WSGI_LOG (opcional) e 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>
    

    Estes 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 seu aplicativo.
    • A chave WSGI_HANDLER deve apontar para um aplicativo WSGI importável do seu aplicativo.
    • A chave WSGI_LOG é opcional, mas é recomendada para depurar seu aplicativo.
  3. Defina a entrada WSGI_HANDLER no arquivo de web.config conforme apropriado para a estrutura que você está usando:

    • Bottle: Adicione parênteses após o valor app.wsgi_app, conforme mostrado neste exemplo. Os parênteses são necessários porque o objeto é uma função e não uma variável. Você pode ver a sintaxe no arquivo app.py.

      <!-- Bottle apps only -->
      <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
      
    • Flask: Altere o valor WSGI_HANDLER para <project_name>.app onde <project_name> corresponde ao nome do seu projeto. Você pode encontrar o identificador exato observando a instrução from <project_name> import app no arquivo runserver.py. Por exemplo, se o projeto for nomeado FlaskAzurePublishExample, a entrada aparecerá da seguinte maneira:

      <!-- 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 para o arquivo web.config para projetos Django.

      • Altere o valor WSGI_HANDLER para django.core.wsgi.get_wsgi_application(). O objeto está no arquivo wsgi.py.

        <!-- Django apps only -->
        <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
        
      • Adicione a seguinte entrada imediatamente após a entrada para a chave WSGI_HANDLER. Substitua o valor DjangoAzurePublishExample pelo nome do seu projeto:

        <add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
        
  4. aplicações Django apenas: No ficheiro settings.py do projeto Django, adicione o domínio do URL do seu site ou o endereço IP à entrada ALLOWED_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 sua 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 adicionar a sua URL de produção, esses sites de hospedagem não serão automaticamente permitidos. Por esse motivo, convém manter cópias separadas de desenvolvimento e produção do arquivo settings.py ou usar variáveis de ambiente para controlar os valores de tempo de execução.

Implantar no IIS ou em uma máquina virtual do Windows

Quando você tiver o arquivo de web.config correto em seu projeto, poderá publicar no computador que está executando o IIS a partir de Gerenciador de Soluções. Clique com o botão direito do rato no projeto, selecione Publicare depois selecione IIS, FTP, etc.. Nessa situação, o Visual Studio copia apenas os arquivos de projeto para o servidor. Você é responsável por toda a configuração do lado do servidor.