Implantar um aplicativo Python (Django ou Flask) com o PostgreSQL no Azure

Neste tutorial, você implantará um aplicativo Web Python baseado em dados (Django ou Flask) no Serviço de Aplicativo do Azure com o serviço de banco de dados relacional do Banco de Dados do Azure para PostgreSQL. O Serviço de Aplicativo do Azure dá suporte ao Python 3.7 ou superior em um ambiente de servidor Linux.

Um diagrama de arquitetura mostrando um Serviço de Aplicativo com um banco de dados PostgreSQL no Azure.

Para concluir este tutorial, você precisará de:

Aplicativo de exemplo

Aplicativos Python de exemplo usando a estrutura Flask e Django são fornecidos para ajudá-lo a acompanhar este tutorial. Para implantá-los sem executá-los localmente, ignore esta parte.

Para executar o aplicativo localmente, verifique se você tem o Python 3.7 ou superior e o PostgreSQL instalados localmente. Em seguida, baixe ou clone o aplicativo:

git clone https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app

Acesse a pasta do aplicativo:

cd msdocs-python-flask-webapp-quickstart

Crie um arquivo .env conforme mostrado abaixo usando o arquivo . env.sample como guia. Defina o valor de DBNAME como o nome de um banco de dados existente em sua instância do PostgreSQL local. Defina os valores de DBHOST, DBUSER e DBPASS conforme apropriado para sua instância do PostgreSQL local.

DBNAME=<database name>
DBHOST=<database-hostname>
DBUSER=<db-user-name>
DBPASS=<db-password>

Crie um ambiente virtual para o aplicativo:

py -m venv .venv
.venv\scripts\activate

Instalar as dependências:

pip install -r requirements.txt

Execute o aplicativo de exemplo usando os seguintes comandos:

# Run database migration
flask db upgrade
# Run the app at http://127.0.0.1:5000
flask run

1. Criar Serviço de Aplicativo e PostgreSQL

Nesta etapa, você criará os recursos do Azure. As etapas usadas neste tutorial criam um conjunto de recursos seguros por padrão que incluem o Serviço de Aplicativo e o Banco de Dados do Azure para PostgreSQL. Para o processo de criação, você especificará:

  • O Nome do aplicativo Web. Esse nome é usado como parte do nome DNS para seu aplicativo Web na forma de https://<app-name>.azurewebsites.net.
  • A Região para executar o aplicativo fisicamente no mundo.
  • A pilha de runtime para o aplicativo. É aqui que você seleciona a versão do Python a ser usada para seu aplicativo.
  • O plano de hospedagem para o aplicativo. É o tipo de preço que inclui o conjunto de recursos e a capacidade de colocação em escala do seu aplicativo.
  • O Grupo de Recursos para o aplicativo. Um grupo de recursos permite agrupar (em um contêiner lógico) todos os recursos necessários do Azure para o aplicativo.

Entre no portal do Azure e siga estas etapas para criar seus recursos do Serviço de Aplicativo do Azure.

Etapa 1. No Portal do Azure:

  1. Insira “banco de dados do aplicativo Web” na caixa de pesquisa na parte superior do portal do Azure.
  2. Selecione o item Web App + Banco de Dados no título Marketplace. Você também pode navegar diretamente para o assistente de criação.

Uma captura de tela mostrando como usar a caixa de pesquisa na barra de ferramentas superior para localizar o assistente de criação de Aplicativo Web + Banco de dados.

Etapa 2. Na página Criar aplicativo Web + Banco de dados, preencha o formulário conforme a seguir.

  1. Grupo de recursos → selecione Criar novo e use um nome de msdocs-python-postgres-tutorial.
  2. Região → qualquer região do Azure próxima a você.
  3. Nomemsdocs-Python-postgres-XYZ, em que XYZ são três caracteres aleatórios. Esse nome deve ser exclusivo no Azure.
  4. Pilha do runtimePython 3.9.
  5. Plano de hospedagemBásico. Quando estiver pronto, você poderá escalar verticalmente até um tipo de preço de produção posteriormente.
  6. PostgreSQL – Servidor Flexível é selecionado para você por padrão como o mecanismo de banco de dados.
  7. Selecione Examinar + criar.
  8. Depois de concluir a validação, selecione Criar.

Uma captura de tela que mostra como configurar um novo aplicativo e banco de dados no assistente Aplicativo Web + Banco de Dados.

Etapa 3. A implantação leva alguns minutos para ser concluída. Depois que a implantação for concluída, selecione o botão Ir para o recurso. Você é levado diretamente para o aplicativo do Serviço de Aplicativo, mas os seguintes recursos são criados:

  • Grupo de recursos → o contêiner para todos os recursos criados.
  • Plano do Serviço de Aplicativo → define os recursos de computação para o Serviço de Aplicativo. É criado um plano do Linux na camada Básico.
  • Serviço de Aplicativo → Representa seu aplicativo e é executado no plano de Serviço de Aplicativo.
  • Rede virtual → Integrada ao aplicativo do Serviço de Aplicativo e isola o tráfego de rede de back-end.
  • Servidor flexível do Banco de Dados do Azure para PostgreSQL → Acessível somente da rede virtual. Um banco de dados e um usuário são criados para você no servidor.
  • Zona DNS privada → Habilita a resolução de DNS do servidor PostgreSQL na rede virtual.

Uma captura de tela mostrando o processo de implantação concluído.

Está enfrentando problemas? Fale conosco.

2. Verificar as configurações de conexão

O assistente de criação gerou as variáveis de conectividade para você já como configurações de aplicativo.

Etapa 1. Na página Serviço de Aplicativo, no menu à esquerda, selecione Configuração.

Uma captura de tela que mostra como abrir a página de configuração no Serviço de Aplicativo.

Etapa 2. Na guia Configurações de aplicativo da página Configuração, verifique se DBNAME, DBHOST, DBUSER e DBPASS estão presentes. Elas serão injetadas no ambiente de runtime como variáveis de ambiente. As configurações do aplicativo são uma boa maneira de manter segredos de conexão fora do repositório de código.

Uma captura de tela que mostra como ver a cadeia de conexão gerada automaticamente.

Está enfrentando problemas? Veja primeiro o Guia de solução de problemas. Caso contrário, fale conosco.

3. Implantar código de exemplo

Nesta etapa, você configurará a implantação do GitHub usando o GitHub Actions. É apenas uma das muitas maneiras de implantar no Serviço de Aplicativo, mas também uma ótima maneira de ter integração contínua em seu processo de implantação. Por padrão, cada git push em seu repositório GitHub iniciará a ação de compilação e implantação.

Etapa 1. Em uma nova janela do navegador:

  1. Entre em sua conta do GitHub.
  2. Navegue até https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app.
  3. Selecione Fork.
  4. Selecione Criar fork.

Uma captura de tela que mostra como criar um fork do repositório do GitHub de exemplo (Flask).

Etapa 2. Na página do GitHub, abra o Visual Studio Code no navegador pressionando a tecla ..

Uma captura de tela que mostra como abrir a experiência de navegador do Visual Studio Code no GitHub (Flask).

Etapa 3. No navegador do Visual Studio Code, abra azureproject/production.py no explorer. Consulte as variáveis de ambiente que estão sendo usadas no ambiente de produção, incluindo as configurações de aplicativo que você viu na página de configuração.

Uma captura de tela que mostra o Visual Studio Code no navegador e um arquivo aberto (Flask).

Etapa 4. De volta à página Serviço de Aplicativo, no menu à esquerda, selecione Centro de Implantação.

Uma captura de tela que mostra como abrir o Centro de Implantação no Serviço de Aplicativo (Flask).

Etapa 5. Na página Centro de Implantação:

  1. Em Origem, selecione GitHub. Por padrão, o GitHub Actions é selecionado como o provedor de build.
  2. Entre em sua conta do GitHub e siga o prompt para autorizar o Azure.
  3. Em Organização, selecione sua conta.
  4. Em Repositório, selecione msdocs-flask-postgresql-sample-app.
  5. Em Branch, selecione main.
  6. No menu superior, selecione Salvar. O Serviço de Aplicativo confirma um arquivo de fluxo de trabalho no repositório GitHub escolhido, no diretório .github/workflows.

Uma captura de tela que mostra como configurar o CI/CD usando o GitHub Actions (Flask).

Etapa 6. Na página Centro de Implantação:

  1. Selecione Logs. Uma execução de implantação já foi iniciada.
  2. No item de log para a execução da implantação, selecione Compilar/Implantar Logs.

Uma captura de tela que mostra como abrir logs de implantação no Centro de Implantação (Flask).

Etapa 7. Você será levado para o repositório do GitHub e verá que a ação do GitHub está em execução. O arquivo do fluxo de trabalho define dois estágios separados, compilar e implantar. Aguarde a execução do GitHub para mostrar um status de Concluído. Ela leva cerca de 5 minutos.

Uma captura de tela mostrando uma execução do GitHub em andamento (Flask).

Está enfrentando problemas? Veja primeiro o Guia de solução de problemas. Caso contrário, fale conosco.

4. Gerar esquema de banco de dados

Com o banco de dados PostgreSQL protegido pela rede virtual, a maneira mais fácil de executar migrações de banco de dados do Flask é em uma sessão SSH com o contêiner do Serviço de Aplicativo.

Etapa 1. Na página Serviço de Aplicativo, no menu à esquerda, selecione SSH.

  1. Selecione Ir.

Uma captura de tela que mostra como abrir o shell SSH para seu aplicativo no portal do Azure (Flask).

Etapa 2. No terminal SSH, execute flask db upgrade. Se ele for bem-sucedido, o Serviço de Aplicativo está se conectando com êxito ao banco de dados. Somente as alterações nos arquivos /home podem persistir além das reinicializações do aplicativo. As alterações feitas fora de /home não são persistentes.

Uma captura de tela mostrando os comandos para executar o shell SSH e a saída deles (Flask).

Está com problemas? Fale conosco.

5. Navegar até o aplicativo

Etapa 1. Na página Serviço de Aplicativo:

  1. No menu esquerdo, selecione Visão geral.
  2. Selecione a URL do aplicativo. Você também pode navegar diretamente até https://<app-name>.azurewebsites.net.

Captura de tela que mostra como inicializar um Serviço de Aplicativo no portal do Azure.

Etapa 2. Adicione algumas tarefas à lista. Parabéns, você está executando um aplicativo Flask seguro controlado por dados no Serviço de Aplicativo do Azure, com conectividade com o Banco de Dados do Azure para PostgreSQL.

Captura de tela do aplicativo Web Flask com PostgreSQL em execução no Azure mostrando restaurantes e avaliações de restaurantes.

Está enfrentando problemas? Fale conosco.

6. Logs de diagnóstico de fluxo

O Serviço de Aplicativo do Azure captura todas as mensagens geradas no console para ajudar você a diagnosticar problemas com seu aplicativo. O aplicativo de exemplo inclui instruções print() para demonstrar esse recurso, conforme mostrado abaixo.

def index(request):
    print('Request for index page received')

    restaurants = Restaurant.objects.annotate(avg_rating=Avg('review__rating')).annotate(review_count=Count('review'))
    return render(request, 'restaurant_review/index.html', {'restaurants': restaurants })

Etapa 1. Na página Serviço de Aplicativo:

  1. No menu à esquerda, selecione Logs do Serviço de Aplicativo.
  2. Em Log do aplicativo, selecione Sistema de arquivos.

Uma captura de tela mostrando como habilitar logs nativos no Serviço de Aplicativo no portal do Azure.

Etapa 2. No menu esquerdo, selecione Fluxo de log. Você verá os logs do seu aplicativo, incluindo os logs de plataforma e os logs de dentro do contêiner.

Captura de tela mostrando como exibir o fluxo de logs no portal do Azure.

Está enfrentando problemas? Fale conosco.

7. Limpar os recursos

Quando tiver terminado, você poderá excluir todos os recursos de sua assinatura do Azure ao excluir o grupo de recursos.

Etapa 1. Na barra de pesquisa, na parte superior do portal do Azure:

  1. Insira o nome do grupo de recursos.
  2. Selecione o grupo de recursos.

Uma captura de tela mostrando como pesquisar e navegar para um grupo de recursos no portal do Azure.

Etapa 2. Na página Grupo de recursos, selecione Excluir grupo de recursos.

Uma captura de tela mostrando o local do botão Excluir Grupo de Recursos no portal do Azure.

Etapa 3.

  1. Insira o nome do grupo de recursos para confirmar a exclusão.
  2. Selecione Excluir.

Uma captura de tela do diálogo de confirmação para excluir um grupo de recursos no portal do Azure. :

Está enfrentando problemas? Fale conosco.

Perguntas frequentes

Quanto custa essa configuração?

O preço dos recursos de criação é o seguinte:

Como se conectar ao servidor PostgreSQL que está protegido por trás da rede virtual com outras ferramentas?

  • Para acesso básico de uma ferramenta de linha comando, você pode executar psql no terminal SSH do aplicativo.
  • Para se conectar a partir de uma ferramenta de área de trabalho, seu computador precisa estar dentro da rede virtual. Por exemplo, pode ser uma VM do Azure conectada a uma das sub-redes ou um computador em uma rede local que tenha uma conexão VPN site a site com a rede virtual do Azure.
  • Você também pode integrar o Azure Cloud Shell à rede virtual.

Como o desenvolvimento de aplicativos local funciona com o GitHub Actions?

Use o arquivo de fluxo de trabalho gerado automaticamente do Serviço de Aplicativo como exemplo, cada git push inicia uma nova execução de build e implantação. Em um clone local do repositório do GitHub, você faz as atualizações desejadas efetuarem push para o GitHub. Por exemplo:

git add .
git commit -m "<some-message>"
git push origin main

De que modo o exemplo do Django está configurado para ser executado no Serviço de Aplicativo do Azure?

Observação

Se você estiver acompanhando este tutorial com seu aplicativo, examine a descrição do arquivo requirements.txt no arquivo README.md de cada projeto (Flask, Django) para ver quais pacotes você precisará.

O aplicativo de exemplo do Django define as configurações no arquivo azureproject/production.py para que ele possa ser executado no Serviço de Aplicativo do Azure. Essas alterações são comuns à implantação do Django na produção e não são específicas para o Serviço de Aplicativo.

  • O Django valida o cabeçalho HTTP_HOST em solicitações de entrada. O código de exemplo usa a variável de ambiente WEBSITE_HOSTNAME no Serviço de Aplicativo para adicionar o nome de domínio do aplicativo à configuração ALLOWED_HOSTS do Django.

    ALLOWED_HOSTS = [os.environ['WEBSITE_HOSTNAME']] if 'WEBSITE_HOSTNAME' in os.environ else []
    
  • O Django não dá suporte à disponibilização de arquivos estáticos em produção. Para este tutorial, você usa o WhiteNoise para habilitar o fornecimento dos arquivos. O pacote WhiteNoise já foi instalado com requirements.txt e o middleware dele é adicionado à lista.

    MIDDLEWARE = [                                                                   
        'django.middleware.security.SecurityMiddleware',
    # Add whitenoise middleware after the security middleware                             
        'whitenoise.middleware.WhiteNoiseMiddleware',
    

    Em seguida, as configurações de arquivo estático são configuradas de acordo com a documentação do Django.

    STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'  
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    

Para obter mais informações, confira as Configurações de produção para aplicativos Django.

Não consigo me conectar à sessão SSH

Se você não pode se conectar à sessão SSH, isso indica que não foi possível iniciar o aplicativo. Confira os logs de diagnóstico para obter detalhes. Por exemplo, se você vir um erro como KeyError: 'DBNAME', poderá significar que a variável de ambiente está ausente (você pode ter removido a configuração do aplicativo).

Obtenho um erro ao executar migrações de banco de dados

Se você encontrar erros relacionados à conexão com o banco de dados, verifique se as configurações do aplicativo (DBHOST, DBNAME, DBUSER e DBPASS) foram alteradas. Sem essas configurações, o comando migrate não pode se comunicar com o banco de dados.

Próximas etapas

Saiba como mapear um nome DNS personalizado para seu aplicativo:

Saiba como o Serviço de Aplicativo executa um aplicativo Python: