Publicar aplicativos Web em Python no Serviço de Aplicativo do Azure no Linux

O Visual Studio possibilita publicar um aplicativo Web do Python no Serviço de Aplicativo do Azure no Linux. Publicar no Serviço de Aplicativo do Azure no Linux inclui copiar os arquivos necessários para o servidor e a configurar um arquivo web.config adequado que instrui ao servidor Web como inicializar o aplicativo.

Observação

O Linux é a única opção de sistema operacional para execução de aplicativos Python no Serviço de Aplicativo. O Python no Windows não é mais suportado, conforme descrito em Documentos do Linux sobre Serviço de Aplicativo - Suporte do Python. No caso do Windows, você pode criar sua própria imagem de contêiner personalizada do Windows e executá-la no Serviço de Aplicativo. Para obter mais informações, confira Usar uma imagem do Docker personalizada.

Pré-requisitos

Versões do Visual Studio

O processo de publicação difere entre o Visual Studio 2017 e posterior e o Visual Studio 2015. Ambas as abordagens são descritas neste artigo.

  • O Visual Studio 2015 automatiza algumas etapas de instalação, incluindo a criação do arquivo web.config, mas essa automação limita o controle e a flexibilidade em longo prazo.

  • O Visual Studio 2017 e posterior requer mais etapas manuais de instalação, mas proporciona um controle mais exato sobre o ambiente do Python.

Para obter mais informações sobre as alterações entre o Visual Studio 2015 e Visual Studio 2017 e posterior, consulte a postagem do blog, Publicar no Azure no Visual Studio 2017.

Criar um projeto de teste

Se você não tiver um projeto existente para publicar, poderá criar um projeto de teste para testar o processo.

  1. No Visual Studio, selecione Arquivo > Novo > Projeto no menu da barra de ferramentas para abrir a caixa de diálogo Criar um novo projeto.

  2. Na caixa de diálogo, digite bottle na caixa Pesquisar, selecione o modelo Projeto Web do Bottle e selecione Avançar.

    O modelo do Projeto Web do Bottle está incluído com a carga de trabalho de desenvolvimento do Python. Para obter mais informações, consulte Modelos de projeto de aplicativo Web em Python.

  3. Insira um nome e uma localização do caminho para o projeto e selecione Criar.

  4. Siga os prompts para instalar pacotes externos, selecione Instalar em um ambiente virtual e escolha o interpretador de base preferencial para o ambiente virtual.

    O ambiente virtual normalmente corresponde à versão do Python instalada no Serviço de Aplicativo.

Quando estiver pronto, você poderá testar o projeto localmente selecionando Depurar > Iniciar Depuração ou usando o atalho de teclado F5.

Criar o Serviço de Aplicativo do Azure de destino

A publicação no Azure requer um Serviço de Aplicativo do Azure de destino para uma assinatura do Azure.

Crie um Serviço de Aplicativo com um aplicativo Web vazio da seguinte maneira:

  1. Faça logon no Portal do Azure.

  2. Vá para a página Serviços de Aplicativos.

  3. Selecione Criar e escolha Aplicativo Web no menu suspenso. A página Criar Aplicativos Web é aberta.

  4. Na guia Básico, configure os seguintes valores:

    Configuração Descrição
    Grupo de Recursos Ignore este campo. O sistema atualiza esse valor depois que você escolhe a configuração de tempo de execução.
    Nome Insira um nome para o aplicativo Web.
    Publicar Selecione Código.
    Pilha de runtime Escolha o tempo de execução Python apropriado no menu suspenso. Depois de escolher um item, o sistema atualiza o campo Grupo de Recursos.
    Região Selecione qualquer região do Azure perto de você.
    Plano de preços Selecione o plano F1 gratuito.

    Para os exemplos neste artigo, você pode ignorar as configurações nas outras guias.

  5. Selecione Examinar + criar. Examine as opções selecionadas e, em seguida, selecione Criar.

  6. (Opcional) Depois que o Serviço de Aplicativo estiver pronto, você poderá acessar o recurso, selecionar Baixar perfil de publicação e salvar o arquivo localmente.

Configurar o Python no Serviço de Aplicativo do Azure

Depois de ter um Serviço de Aplicativo com um aplicativo Web vazio em execução na assinatura, instale a versão desejada do Python. Para a publicação por meio do Visual Studio 2017 e posterior, registre o caminho exato do interpretador do Python instalado com a extensão de site. Para obter mais informações, confira Instalar interpretadores do Python.

Se desejar, você também pode instalar o pacote bottle. No entanto, o pacote é instalado em uma etapa posterior nesta explicação passo a passo.

Publicar no Serviço de Aplicativo – Visual Studio 2017 e posterior

A publicação no Serviço de Aplicativo do Azure através do Visual Studio 2017 e posterior copia somente os arquivos do seu projeto para o servidor. É necessário criar os arquivos pertinentes para configurar o ambiente de servidor.

  1. No Gerenciador de Soluções do Visual Studio, clique com o botão direito do mouse no projeto e selecione Adicionar > Novo Item. Na caixa de diálogo que é exibida, selecione o modelo Azure web.config (Fast CGI) e selecione Adicionar. Essa etapa cria um arquivo web.config na raiz do projeto.

  2. Modifique a entrada PythonHandler no arquivo web.config para que o caminho corresponda à instalação do Python no servidor, conforme descrito em Referência de configuração do IIS (iis.net). Por exemplo, para o Python 3.6.1 x64, a entrada deve ser semelhante ao seguinte:

    <system.webServer>
      <handlers>
        <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
            scriptProcessor="D:\home\Python361x64\python.exe|D:\home\Python361x64\wfastcgi.py"
            resourceType="Unspecified" requireAccess="Script"/>
      </handlers>
    </system.webServer>
    
  3. Defina a entrada WSGI_HANDLER nos arquivos web.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 arquivo app.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ção from <project_name> import app no arquivo runserver.py. Por exemplo, se o projeto fosse denominado "FlaskAzurePublishExample", 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 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 da chave WSGI_HANDLER. Substitua o valor DjangoAzurePublishExample pelo nome do projeto:

        <add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
        
  4. Somente aplicativos Django: no arquivo settings.py do projeto do Django, adicione o domínio de URL do site ou o endereço IP à entrada ALLOWED_HOSTS. Substitua "vspython-test-02.azurewebsites.net" pelo URL:

    # Change the URL to your specific site
    ALLOWED_HOSTS = ['vspython-test-02.azurewebsites.net']
    

    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' como host. Se você adicionar o URL de produção, 'localhost' não será permitido automaticamente como host. 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.

  5. Selecione o modelo.

    1. Em Gerenciador de Soluções, expanda a pasta do projeto.
    2. Clique com o botão direito do mouse na pasta static e selecione Adicionar > Novo Item.
    3. Selecione o modelo Web.config de Arquivos estáticos do Azure e selecione Adicionar.

    Essa ação cria outro arquivo web.config na pasta estático, que desabilita o processamento do Python nessa pasta. Essa configuração envia solicitações para arquivos estáticos para o servidor Web padrão em vez de usar o aplicativo Python.

  6. No Gerenciador de Soluções, salve o projeto, clique com o botão direito do mouse nele e selecione Publicar.

    Captura de tela mostrando como acessar o comando Publish de um projeto no Visual Studio.

  7. Na janela Publicar, especifique o destino da publicação:

    1. Para o Destino, selecione Azure e, em seguida, selecione Avançar.

    2. Para o destino específico, selecione Serviço de Aplicativo do Azure (Windows) e selecione Avançar.

      • Se a caixa de diálogo indicar que outros Componentes necessários precisam existir para concluir a instalação, selecione Concluir. O Instalador do Visual Studio abre. Confirme as opções e selecione Instalar.
    3. Para o Serviço de Aplicativo, selecione o Serviço de Aplicativo apropriado para sua assinatura e selecione Concluir.

      Captura de tela mostrando como preparar o processo de publicação para o Azure no Visual Studio 2017 e versões posteriores usando uma assinatura existente.

      Após a conclusão do processo de criação da publicação, selecione Fechar.

  8. O Visual Studio exibe o status em uma janela "Atividade de Publicação na Web" e também na janela Publicar progresso da criação do perfil. Quando vir a mensagem "Pronto para publicar" para o aplicativo Web, selecione Publicar.

    Captura de tela mostrando como publicar o aplicativo Web no Visual Studio.

  9. Quando a publicação é bem-sucedida, o navegador padrão é aberto no URL do site. O URL do site também será mostrado na janela Publicar.

    Captura de tela mostrando o Browser aberto na URL do site do aplicativo Web publicado.

    Se o URL do site não abrir automaticamente, selecione Abrir site para exibir o aplicativo Web no navegador:

    Captura de tela mostrando como abrir a URL do site do aplicativo Web publicado no Browser.

  10. Quando o navegador abrir, você poderá ver a mensagem "A página não pode ser exibida porque ocorreu um erro interno do servidor". Esta mensagem indica que o ambiente do Python no servidor não está totalmente configurado; nesse caso, execute as seguintes etapas:

    1. Verifique se você tem uma extensão de site Python apropriada instalada. Para obter mais informações, consulte Guia de Início Rápido: Implantar um aplicativo Web Python (Django ou Flask) no Serviço de Aplicativo do Azure.

    2. Verifique mais uma vez o caminho para o interpretador do Python em seu arquivo web.config. O caminho deve corresponder exatamente ao local de instalação da extensão de site escolhida.

    3. Use o console do Kudu para atualizar todos os pacotes listados no arquivo requirements.txt do aplicativo. Navegue até a mesma pasta do Python usada no arquivo web.config, como /home/python361x64. Execute o seguinte comando, conforme descrito na seção Console do Kudu:

      python -m pip install --upgrade -r /home/site/wwwroot/requirements.txt
      

      Se você vir erros de permissão ao executar esse comando, confirme se está executando o comando na pasta de extensão do site. Não execute o comando em uma pasta que tenha uma das instalações padrão do Python do Serviço de Aplicativo. Como você não pode modificar esses ambientes padrão, a tentativa de instalar pacotes certamente falhará.

    4. Para obter uma saída de erro detalhada, adicione a seguinte linha ao arquivo web.config no Node <system.webServer>, que fornece uma saída de erro mais detalhada:

      <httpErrors errorMode="Detailed"></httpErrors>
      
    5. Tente reiniciar o Serviço de Aplicativo depois de instalar novos pacotes. Uma reinicialização não é necessária ao alterar o arquivo web.config, pois o Serviço de Aplicativo executa uma reinicialização automática sempre que o arquivo web.config é alterado.

      Dica

      Ao fazer quaisquer alterações ao arquivo requirements.txt do aplicativo, verifique se você usou novamente o console do Kudu para instalar todos os pacotes listados nesse arquivo.

  11. Depois de configurar totalmente o ambiente do servidor, atualize a página no navegador para ver o aplicativo Web:

    Captura de tela mostrando os resultados da publicação dos aplicativos Bottle, Flask e Django no Serviço de Aplicativo do Azure no Visual Studio.

Publicar no Serviço de Aplicativo – Visual Studio 2015

Siga estas etapas para publicar o aplicativo Web Python no Serviço de Aplicativo do Azure no Visual Studio 2015.

  1. No Gerenciador de Soluções, clique com o botão direito do mouse no nome do projeto e selecione Publicar.

  2. Na caixa de diálogo Publicar, selecione Serviço de Aplicativo do Microsoft Azure:

    Captura de tela mostrando como publicar no Azure no Visual Studio e selecionar um Serviço de Aplicativo do Azure.

  3. Selecione Serviço de Aplicativo do Microsoft Azure como destino de publicação. Na próxima caixa de diálogo, selecione um Serviço de Aplicativo existente ou selecione Novo para criar outro.

  4. Os detalhes do Serviço de Aplicativo são exibidos na guia Conexão da caixa de diálogo Publicar:

    Captura de tela mostrando como publicar no Azure no Visual Studio e exibir a conexão do Serviço de Aplicativo.

  5. Conforme necessário, selecione Avançar para examinar outras configurações.

  6. Selecione Publicar. Depois que o aplicativo for implantado no Azure, o navegador padrão será aberto no URL do site.

Como parte desse processo, o Visual Studio também segue estas etapas:

  • Criar um arquivo web.config no servidor que contém ponteiros apropriados à função wsgi_app do aplicativo e ao interpretador padrão do Python 3.4 do Serviço de Aplicativo.
  • Desativa o processamento de arquivos na pasta estática do projeto. (As regras dessa ação estão no arquivo web.config.)
  • Publica o ambiente virtual no servidor.
  • Adicione um arquivo web.debug.config e as ferramentas de depuração para habilitar a depuração remota. Para o Visual Studio 2019 versão 16.4 e anteriores, as ferramentas de depuração são ptvsd. Para o Visual Studio 2019 versão 16.5 e posteriores, as ferramentas de depuração são debugpy.

Conforme mencionado anteriormente, essas etapas automáticas simplificam o processo de publicação, mas eles podem tornar o controle do ambiente do Python mais difícil. Por exemplo, o arquivo web.config é criado somente no servidor mas não é adicionado ao seu projeto. O processo de publicação também leva mais tempo porque ele copia o ambiente virtual inteiro do seu computador de desenvolvimento em vez de confiar na configuração do servidor.

Uma hora, você pode querer manter seu próprio arquivo web.config e usar o requirements.txt para manter os pacotes diretamente no servidor. Ao usar o arquivo requirements.txt, especificamente, você ajuda a garantir que seus ambientes de desenvolvimento e servidor sempre correspondam.