Partilhar via


Implantar um aplicativo Web Python Django com PostgreSQL no Azure

Neste tutorial, desdobra uma aplicação web Python baseada em dados para o Azure App Service, que utiliza o serviço de base de dados relacional Azure Database for PostgreSQL. O Serviço de Aplicativo do Azure dá suporte ao Python em um ambiente de servidor Linux. Este artigo utiliza o Django. Alternativas incluem Flask ou o tutorial FastAPI.

Diagrama que mostra a arquitetura de um Serviço de Aplicação com uma base de dados PostgreSQL no Azure.

Neste tutorial, irá aprender a:

  • Crie uma arquitetura segura por padrão do Serviço de Aplicativo, PostgreSQL e cache Redis.
  • Proteja segredos de conexão usando uma identidade gerenciada e referências do Cofre de Chaves.
  • Implante um aplicativo Python de exemplo no Serviço de Aplicativo a partir de um repositório GitHub.
  • Acesse as cadeias de conexão do Serviço de Aplicativo e as configurações do aplicativo no código do aplicativo.
  • Faça atualizações e reimplante o código do aplicativo.
  • Gere esquema de banco de dados executando migrações de banco de dados.
  • Transmita logs de diagnóstico do Azure.
  • Gerencie o aplicativo no portal do Azure.
  • Provisione a mesma arquitetura e implante usando a CLI do Azure Developer.
  • Otimize seu fluxo de trabalho de desenvolvimento com o GitHub Codespaces e o GitHub Copilot.

Pré-requisitos

  • Uma conta do Azure com uma subscrição ativa. Se não tiver uma conta do Azure, pode criar uma gratuitamente.
  • Uma conta do GitHub. Você também pode obter um gratuitamente.
  • Conhecimento de desenvolvimento em Django com Python.
  • (Opcional) Para experimentar o GitHub Copilot, uma conta do GitHub Copilot. Está disponível uma versão experimental gratuita de 30 dias.

Saltar para o fim

Se quiser apenas ver a aplicação de exemplo neste tutorial a correr no Azure, execute os seguintes comandos no Azure Cloud Shell e siga o prompt:

mkdir msdocs-django-postgresql-sample-app
cd msdocs-django-postgresql-sample-app
azd init --template msdocs-django-postgresql-sample-app
azd up

Executar o exemplo

Como ponto de partida, configura uma aplicação baseada em dados de exemplo. Para sua conveniência, o repositório de exemplo inclui uma configuração de contêiner de desenvolvimento . O contentor de desenvolvimento tem tudo o que precisas para desenvolver uma aplicação, incluindo a base de dados, a cache e todas as variáveis de ambiente que a aplicação de exemplo precisa. O contentor de desenvolvimento pode correr num espaço de código do GitHub, por isso podes executar o exemplo em qualquer computador com um navegador web.

Nota

Se seguires este tutorial com a tua própria aplicação, vê a descrição do ficheirorequirements.txtno README.md para veres que pacotes precisas.

1º Passo: Em uma nova janela do navegador:

  1. Iniciar sessão na sua conta do GitHub.
  2. Vá para https://github.com/Azure-Samples/msdocs-django-postgresql-sample-app/fork.
  3. Desmarque Copiar somente a ramificação principal. Você quer todos os ramos.
  4. Selecione Criar bifurcação.

2º Passo: Na bifurcação do GitHub:

  1. Selecione principal>starter-no-infra para o ramo inicial. Esta ramificação contém apenas o projeto de exemplo e nenhum arquivo ou configuração relacionados ao Azure.
  2. Selecione Code>Criar espaço de código em starter-no-infra. O codespace leva alguns minutos para ser configurado. Executa pip install -r requirements.txt para o teu repositório. O ficheiro .env fornecido já contém uma variável fictícia SECRET_KEY que o Django precisa de executar localmente.

3º Passo: No terminal de código:

  1. Execute migrações de banco de dados com python manage.py migrate.
  2. Execute a aplicação com python manage.py runserver.
  3. Quando vir a notificação Your application running on port 8000 is available., selecione Abrir no navegador. Você deve ver o aplicativo de exemplo em uma nova guia do navegador. Para parar o aplicativo, digite Ctrl+C.

Gorjeta

Você pode perguntar ao GitHub Copilot sobre este repositório. Por exemplo:

  • @workspace O que faz este projeto?
  • @workspace O que faz a pasta .devcontainer?

Tem problemas? Verifique a seção Solução de problemas.

Criar Serviço de Aplicações, base de dados e cache

Neste passo, cria os recursos do Azure. Este tutorial cria um conjunto de recursos seguros por defeito que incluem App Service, Azure Database para PostgreSQL e Azure Cache. Para o processo de criação, você especifica:

  • O Nome do aplicativo Web. Ele é usado como parte do nome DNS do seu aplicativo.
  • A região para executar a aplicação no mundo físico. Também faz parte do nome DNS da tua aplicação.
  • A pilha de tempo de execução para o aplicativo. Seleciona a versão do Python para usar na sua aplicação.
  • O plano de hospedagem para o aplicativo. O escalão de preços inclui o conjunto de funcionalidades e a capacidade de escalabilidade da sua aplicação.
  • O Grupo de Recursos para o aplicativo. Um grupo de recursos permite-te agrupar todos os recursos do Azure necessários para a aplicação num contentor lógico.

Inicie sessão no portal Azure. Siga estes passos para criar os seus recursos do Azure App Service.

1º Passo: No portal do Azure:

  1. No topo do portal Azure, na caixa de pesquisa, insira base de dados de aplicações web.
  2. No título Marketplace, selecione o item rotulado Web App + Base de Dados. Também pode navegar diretamente para Criar aplicação Web .

2º Passo: Na página Criar Aplicativo Web + Banco de Dados , preencha o formulário da seguinte maneira.

  1. Grupo de Recursos: Selecione Criar novo e introduza msdocs-django-postgres-tutorial.
  2. Região: qualquer região do Azure perto de você.
  3. Nome: msdocs-python-postgres-XYZ.
  4. Stack de runtime: Python 3.14.
  5. Banco de dados: PostgreSQL - Servidor flexível é selecionado por padrão como o mecanismo de banco de dados. O nome do servidor e o nome do banco de dados também são definidos por padrão como valores apropriados.
  6. Adicionar Cache do Azure para Redis: Sim.
  7. Plano de hospedagem: Básico. Quando estiver pronto, você poderá escalar para um nível de preço de produção.
  8. Selecione Revisão + criar.
  9. Após a conclusão da validação, selecione Criar.

3º Passo: A implantação leva alguns minutos para ser concluída. Depois de concluída a implantação, selecione Ir para o recurso. A implementação cria os seguintes recursos:

  • 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. Esta instância é um plano Linux no nível Básico .
  • Serviço de Aplicativo: representa seu aplicativo e é executado no plano do Serviço de Aplicativo.
  • Rede virtual: integrada na aplicação Serviço de Aplicações e isola o tráfego de rede do back-end.
  • Ponto de extremidade privado: ponto de extremidade de acesso para o cache Redis na rede virtual.
  • Interfaces de rede: Endereços IP privados, um para cada um dos endpoints privados.
  • Banco de Dados do Azure para servidor flexível PostgreSQL: Acessível somente de dentro da rede virtual. A implementação cria uma base de dados e um utilizador no servidor.
  • Azure Cache para Redis: Acessível apenas a partir da sua rede privada.
  • Zonas DNS privadas: Permite a resolução DNS do servidor de banco de dados e do cache Redis na rede virtual.

Proteger os segredos da ligação e adicionar SECRET_KEY

O processo de implementação gera as variáveis de conectividade para si como definições da aplicação. A melhor prática de segurança é manter os segredos fora do App Service completamente. Mude os seus segredos para um cofre de chaves e altere as definições da aplicação para referências ao Cofre de Chaves com a ajuda dos Conectores de Serviço.

Etapa 1: Recuperar a cadeia de conexão existente

  1. No menu esquerdo da página do App Service, selecione Definições>Variáveis de Ambiente.
  2. Selecione AZURE_POSTGRESQL_CONNECTIONSTRING.
  3. Na configuração Adicionar/Editar aplicativo, no campo Valor , localize a parte password= no final da cadeia de caracteres.
  4. Copie a cadeia de caracteres de senha após password= para uso posterior. Esta configuração da aplicação permite-lhe ligar à base de dados Postgres e à cache Redis protegida atrás de endpoints privados. Os segredos são guardados diretamente na aplicação do App Service, o que não é a melhor abordagem. Vais mudar esta configuração. Também adicionas uma SECRET_KEY definição, que a tua aplicação Django exige.

Etapa 2: Criar um cofre de chaves para gerenciamento seguro de segredos

  1. Na barra de pesquisa superior, introduza Key Vault e depois selecione Marketplace>Key Vault.
  2. Em Grupo de Recursos, selecione msdocs-python-postgres-tutorial.
  3. No nome do cofre da chave, insira um nome que consiste apenas em letras e números.
  4. Na Região, selecione a mesma localização do grupo de recursos.

Etapa 3: Proteger o cofre de chaves com um endpoint privado

  1. Selecione a guia Rede .
  2. Desmarque Ativar acesso público.
  3. Selecione Criar um ponto de extremidade privado.
  4. Em Grupo de Recursos, selecione msdocs-python-postgres-tutorial.
  5. Na caixa de diálogo, em Local, selecione o mesmo local do seu aplicativo App Service.
  6. Em Nome, digite msdocs-python-postgres-XYZVaultEndpoint.
  7. Em Rede virtual, selecione msdocs-python-postgres-XYZVnet.
  8. Em Sub-rede, msdocs-python-postgres-XYZSubnet.
  9. Selecione OK.
  10. Selecione Rever + criar e, em seguida, selecione Criar. Aguarde a conclusão da implantação do cofre de chaves. Deves ver que a tua missão está concluída.

Etapa 4: Configurar o conector PostgreSQL

  1. Na barra de pesquisa superior, introduza msdocs-python-postgres, depois selecione o seu recurso de Serviço de Aplicações msdocs-python-postgres-XYZ.
  2. Na página Serviço de Aplicações, no menu à esquerda, selecione Definições>Conector de Serviço. Já existem dois conectores que o processo de criação da aplicação criou para si.
  3. Marque a caixa de seleção ao lado do conector PostgreSQL e selecione Editar.
  4. Em Tipo de cliente, selecione Django. O tipo de cliente Django no conector de serviço PostgreSQL fornece variáveis de banco de dados em configurações separadas em vez de uma cadeia de conexão. As variáveis separadas são mais fáceis de usar nas configurações do banco de dados do Django.
  5. Selecione Autenticação.
  6. Em Senha, cole a senha copiada anteriormente.
  7. Selecione Armazenar segredo no Cofre da chave.
  8. Em Conexão do Cofre da Chave, selecione Criar novo. Esta ação abre um diálogo de Criar ligação por cima do diálogo de edição.

Etapa 5: Estabelecer a conexão do Cofre de Chaves

  1. Na caixa de diálogo Criar conexão para a conexão do Cofre da Chave, no Cofre da Chave, selecione o cofre da chave criado anteriormente.
  2. Selecione Rever + Criar.
  3. Quando a validação for concluída, selecione Criar.

Etapa 6: Finalizar as configurações do conector PostgreSQL

  1. Você está de volta na caixa de diálogo de edição para defaultConnector. Em Autenticação, espere que o conector do Key Vault seja criado. A lista suspensa de Ligação ao Cofre de Chaves seleciona-o automaticamente.
  2. Selecione Next: Networking.
  3. Selecione Salvar. Aguarde até que a notificação Atualização bem-sucedida seja exibida.

Etapa 7: Configurar o conector Redis para usar segredos do Azure Key Vault

  1. Na página de Conectores de Serviço , selecione a caixa de seleção ao lado do Cache para conector Redis e depois selecione Editar.
  2. Selecione Autenticação.
  3. Selecione Armazenar segredo no Cofre da chave.
  4. Em Conexão do Cofre de Chave, selecione o cofre de chave que foi criado.
  5. Selecione Next: Networking.
  6. Selecione Configurar regras de firewall para habilitar o acesso ao serviço de destino. O processo de criação da aplicação já assegurava a base de dados SQL com um endpoint privado.
  7. Selecione Salvar. Aguarde até que a notificação Atualização bem-sucedida seja exibida.

Etapa 8: Verificar a integração do Key Vault

  1. No menu à esquerda, selecione Configurações > Variáveis de ambiente novamente.
  2. Ao lado de AZURE_POSTGRESQL_PASSWORD, selecione Mostrar valor. O valor deve ser @Microsoft.KeyVault(...), o que significa que é uma referência do cofre de chaves porque o segredo agora é gerenciado no cofre de chaves.
  3. Para verificar a cadeia de conexão Redis, selecione Mostrar valor ao lado de AZURE_REDIS_CONNECTIONSTRING.

9º Passo: O aplicativo de exemplo lê a variável de ambiente SECRET_KEY para definir a configuração de SECRET_KEY necessária. Você o cria como uma configuração de aplicativo nesta etapa.

  1. Na guia Configurações do aplicativo , selecione Adicionar.
  2. Defina Nome como SECRET_KEY.
  3. Defina Value como uma cadeia de caracteres aleatória longa.
  4. Selecione Aplicar, Aplicar novamente e Confirmar.

Para resumir, o processo para proteger seus segredos de conexão envolveu:

  • Recuperando os segredos de conexão das variáveis de ambiente da aplicação do Serviço de Aplicações.
  • Criação de um cofre de chaves.
  • Criação de uma conexão do Cofre da Chave com a identidade gerenciada atribuída ao sistema.
  • Atualizar os conectores de serviço para armazenar os segredos no cofre de chaves.

Nota

Idealmente, a configuração da SECRET_KEY aplicação também deve ser configurada como uma referência de cofre de chaves, o que é um processo composto por várias etapas. Para obter mais informações, consulte Como alterar a configuração do aplicativo SECRET_KEY para uma referência do Key Vault?

Tem problemas? Verifique a seção Solução de problemas.


Implementar código de exemplo

Nesta secção, configure a implementação do GitHub usando GitHub Actions. É uma das várias maneiras de desenvolver no App Service. É uma ótima forma de ter uma integração contínua no seu processo de implementação. Por padrão, cada git push no seu repositório do GitHub inicia a ação de compilação e implantação.

1º Passo: No menu à esquerda, selecione Deployment>Deployment Center.

Passo 2: Na página do Centro de Desdobramento :

  1. Em Source, selecione GitHub. Por padrão, as Ações do GitHub são selecionadas como o provedor de compilação.
  2. Entre na sua conta do GitHub e siga o prompt para autorizar o Azure.
  3. Em Organização, selecione sua conta.
  4. No Repositório, selecione msdocs-django-postgresql-sample-app.
  5. Em Ramo, selecione starter-no-infra. Este ramo é o mesmo em que trabalhaste com a tua aplicação de exemplo, sem quaisquer ficheiros ou configurações relacionadas com o Azure.
  6. Em Tipo de autenticação, selecione Identidade atribuída pelo usuário.
  7. No menu superior, selecione Salvar. App Service efetua um commit de um ficheiro de workflow no repositório do GitHub no .github/workflows diretório. Por padrão, o centro de implantação cria uma identidade atribuída pelo usuário para que o fluxo de trabalho seja autenticado usando o Microsoft Entra (autenticação OIDC). Para outras opções de autenticação, veja Deploy to App Service using GitHub Actions.

3º Passo: De volta ao espaço de código do GitHub da bifurcação de exemplo, execute git pull origin starter-no-infra. Este comando puxa o novo ficheiro de workflow confirmado para o seu espaço de código.

Passo 4 (Opção 1: com o GitHub Copilot):

  1. Inicie uma nova sessão de chat selecionando a vista Chat e, em seguida, selecionando +.
  2. Pergunte: "@workspace Como o aplicativo se conecta ao banco de dados e redis?" O Copilot pode fornecer algumas explicações sobre como as configurações são configuradas no azureproject/development.py e azureproject/production.py.
  3. Pergunte: "@workspace Em modo de produção, a minha aplicação está a correr numa aplicação web App Service, que usa o Azure Service Connector para se ligar a um servidor flexível PostgreSQL usando o tipo cliente Django. Quais são os nomes das variáveis de ambiente que preciso de usar?" O Copilot pode dar-te uma sugestão de código semelhante à da Opção 2: sem os passos do GitHub Copilot a seguir, e até dizer-te para fazer a alteração no ficheiro azureproject/production.py .
  4. Abra azureproject/production.py no explorador e adicione a sugestão de código.
  5. Pergunte: "@workspace a minha aplicação de Serviço de Aplicações também usa o Conector de Serviço do Azure para se conectar a um Cache do Redis usando o cliente Django. Quais são os nomes das variáveis de ambiente que preciso de usar?" O Copilot pode dar-te uma sugestão de código semelhante à da Opção 2: sem os passos do GitHub do Copilot a seguir e até dizer-te para fazeres a alteração no ficheiro azureproject/production.py .
  6. Adicione a sugestão de código. O GitHub Copilot não te dá sempre a mesma resposta. As respostas nem sempre estão corretas. Talvez seja necessário fazer mais perguntas para ajustar a resposta. Para obter dicas, consulte O que posso fazer com o GitHub Copilot no meu codespace?.

Passo 4 (Opção 2: sem o Copilot do GitHub):

  1. Abra azureproject/production.py no explorador.
  2. Encontre o código comentado (linhas 29-48) e descomente-o. Este código cria ligações PostgreSQL e Redis usando AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOST, AZURE_POSTGRESQL_NAME, e AZURE_REDIS_CONNECTIONSTRING.

5º Passo:

  1. Selecione a extensão Controle do código-fonte .
  2. Na caixa de texto, digite uma mensagem de confirmação como Configure Azure database and cache connections. Ou selecione e deixe o GitHub Copilot gerar uma mensagem de confirmação para você.
  3. Selecione Confirmar e, em seguida, confirme com Sim.
  4. Selecione Sincronizar alterações 1 e, em seguida, confirme com OK.

Passo 6: De volta ao Centro de Implementação no portal Azure:

  1. Selecione Logs, depois selecione Atualizar para ver a nova implementação a correr.
  2. No item de log para a execução da implantação, selecione a entrada Compilar/Implantar Logs com o carimbo de data/hora mais recente.

Passo 7: És levado para o teu repositório do GitHub. A ação do GitHub está a correr. O arquivo de fluxo de trabalho define dois estágios separados, build e deploy. Aguarde até que a execução do GitHub mostre um status de Sucesso. Demora cerca de 5 minutos.

Tem problemas? Consulte o Guia de resolução de problemas.

Gerar esquema de base 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 Django é em uma sessão SSH com o contêiner Linux no Serviço de Aplicativo.

Passo 1: De volta à página do App Service , no menu esquerdo:

  1. Selecione Ferramentas>de desenvolvimento SSH.
  2. Selecione Ir.

2º Passo: Na sessão SSH, execute python manage.py migrate. Se for bem-sucedido, o Serviço de Aplicativo está se conectando com êxito ao banco de dados.

Gorjeta

Na sessão SSH, apenas as alterações nos arquivos podem /home persistir além das reinicializações do aplicativo. As mudanças fora do /home não são persistentes.

A sessão SSH é útil para executar comandos comuns python manage.py , como a criação de usuários com o python manage.py createsuperuser. Para mais informações, consulte django django-admin e manage.py. Use a conta de superusuário para acessar a /admin parte do site.

Tem problemas? Verifique a seção Solução de problemas.

Navegue até a aplicação

Passo 1: Na página do App Service :

  1. No menu à esquerda, selecione Visão geral.
  2. Selecione o URL do seu aplicativo.

2º Passo: Adicione alguns restaurantes à lista. Parabéns! Está a correr uma aplicação web no Azure App Service, com conectividade segura ao Azure Database para PostgreSQL.

Transmitir registos de diagnóstico em tempo real

O Serviço de Aplicativo do Azure captura todos os logs do console para ajudá-lo a diagnosticar problemas com seu aplicativo. A aplicação de exemplo inclui print() declarações que demonstram esta capacidade.

def index(request):
    print('Request for index page received')
    restaurants = Restaurant.objects.annotate(avg_rating=Avg('review__rating')).annotate(review_count=Count('review'))
    lastViewedRestaurant = request.session.get("lastViewedRestaurant", False)

Passo 1: Na página do App Service :

  1. No menu à esquerda, selecione Monitorização>Logs do Serviço de Aplicação.
  2. Em Registo de aplicações, selecione Sistema de ficheiros.
  3. No menu superior, selecione Salvar.

2º Passo: No menu à esquerda, selecione Fluxo de log. Você vê os logs do seu aplicativo, incluindo logs da plataforma e logs de dentro do contêiner.

Para mais informações sobre como iniciar sessão em aplicações Python, consulte configurar o Azure Monitor para a sua aplicação Python.

Limpeza de recursos

Quando terminar, pode eliminar todos os recursos da sua subscrição do Azure eliminando o grupo de recursos.

1º Passo: 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.

2º Passo: Na página do grupo de recursos, selecione Excluir grupo de recursos.

3º Passo:

  1. Para confirmar a sua eliminação, introduza o nome do grupo de recursos.
  2. Selecione Excluir.

Crie recursos Azure e implemente uma aplicação de exemplo

Nesta secção, crie os recursos Azure e implemente uma aplicação de exemplo para o App Service no Linux. As etapas usadas neste tutorial criam um conjunto de recursos seguros por padrão que incluem o Serviço de Aplicativo, o Banco de Dados do Azure para PostgreSQL e o Cache do Azure para Redis.

O contêiner de desenvolvimento já tem a CLI do Desenvolvedor do Azure (AZD).

  1. A partir da raiz do repositório, execute azd init.

    azd init --template python-app-service-postgresql-infra
    
  2. Quando solicitado, dê as seguintes respostas:

    Pergunta Resposta
    O diretório atual não está vazio. Gostaria de inicializar um projeto aqui no '<seu-diretório>'? Y
    O que você gostaria de fazer com esses arquivos? Manter os meus ficheiros existentes inalterados
    Insira um novo nome de ambiente Escreva um nome exclusivo. O modelo AZD usa esse nome como parte do nome DNS do seu aplicativo Web no Azure (<app-name>-<hash>.azurewebsites.net). São permitidos caracteres alfanuméricos e hífenes.
  3. Entre no Azure executando o azd auth login comando e seguindo o prompt:

    azd auth login
    
  4. Crie os recursos necessários do Azure com o azd provision comando. Siga o prompt para selecionar a assinatura desejada e o local para os recursos do Azure.

    azd provision
    

    O azd provision comando demora cerca de 15 minutos a ser concluído. A cache Redis é a que demora mais tempo. Mais tarde, modifique o seu código para funcionar com o App Service e implemente as alterações com azd deploy. Enquanto está a correr, o comando fornece mensagens sobre o processo de provisionamento e implementação. A saída inclui um link para a implementação no Azure.

    Este modelo AZD contém arquivos (azure.yaml e o diretório infra ) que geram uma arquitetura segura por padrão com os seguintes recursos do Azure:

    • 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. Cria um plano Linux no nível Básico .
    • Serviço de Aplicativo: representa seu aplicativo e é executado no plano do Serviço de Aplicativo.
    • Rede virtual: integrada na aplicação Serviço de Aplicações e isola o tráfego de rede do back-end.
    • Pontos de extremidade privados: pontos de extremidade de acesso para o cofre de chaves e o cache Redis na rede virtual.
    • Interfaces de rede: Endereços IP privados, um para cada um dos endpoints privados.
    • Azure Database para PostgreSQL servidor flexível: acessível apenas a partir da rede virtual. Cria uma base de dados e um utilizador no servidor.
    • Zona DNS privada: Permite a resolução DNS do servidor PostgreSQL na rede virtual.
    • Espaço de trabalho do Log Analytics: atua como o contêiner de destino para seu aplicativo enviar seus logs, onde você também pode consultar os logs.
    • Cache do Azure para Redis: acessível apenas atrás do seu ponto de extremidade privado.
    • Cofre de chaves: acessível apenas por trás de seu ponto de extremidade privado. Usado para gerir segredos para o App Service app.

    Depois de o comando terminar de criar recursos e de implementar o código da aplicação pela primeira vez, a aplicação de exemplo implementada ainda não funciona. Tens de fazer pequenas alterações para que se ligue à base de dados no Azure.

Tem problemas? Verifique a seção Solução de problemas.

Utilize a string de conexão à base de dados

O modelo AZD que usas gerou as variáveis de conectividade para ti como definições da aplicação. Envia-os para o terminal. As configurações do aplicativo são uma maneira de manter os segredos de conexão fora do seu repositório de código.

  1. Na saída AZD, localize as configurações AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOST, AZURE_POSTGRESQL_NAME, e AZURE_REDIS_CONNECTIONSTRING. Para manter os segredos seguros, apenas os nomes das configurações são exibidos. Eles são apresentados assim na saída AZD:

     App Service app has the following connection settings:
             - AZURE_POSTGRESQL_NAME
             - AZURE_POSTGRESQL_HOST
             - AZURE_POSTGRESQL_USER
             - AZURE_POSTGRESQL_PASSWORD
             - AZURE_REDIS_CONNECTIONSTRING
             - AZURE_KEYVAULT_RESOURCEENDPOINT
             - AZURE_KEYVAULT_SCOPE
     
  2. Para sua conveniência, o modelo AZD mostra o link direto para a página de configurações do aplicativo. Encontre o link e abra-o em uma nova guia do navegador.

Tem problemas? Verifique a seção Solução de problemas.

Modificar código de exemplo e redistribuir

  1. No espaço de código do GitHub, inicie uma nova sessão de chat selecionando a visualização Chat e, em seguida, selecionando +.

  2. Pergunte: "@workspace Como o aplicativo se conecta ao banco de dados?" O Copilot pode fornecer algumas explicações sobre como as configurações de conexão são configuradas em azureproject/development.py e azureproject/production.py.

  3. Pergunte: "@workspace Em modo de produção, a minha aplicação está a correr numa aplicação web App Service, que usa o Azure Service Connector para se ligar a um servidor flexível PostgreSQL usando o tipo cliente Django. Quais são os nomes das variáveis de ambiente que preciso de usar?" O Copilot pode dar-te uma sugestão de código semelhante à da Opção 2: sem os passos do GitHub Copilot a seguir, e até dizer-te para fazer a alteração no ficheiro azureproject/production.py .

  4. Abra azureproject/production.py no explorador e adicione a sugestão de código.

    O GitHub Copilot não te dá sempre a mesma resposta. As respostas nem sempre estão corretas. Talvez seja necessário fazer mais perguntas para ajustar a resposta. Para obter dicas, consulte O que posso fazer com o GitHub Copilot no meu codespace?.

  5. No terminal, execute azd deploy.

    azd deploy
    

Tem problemas? Verifique a seção Solução de problemas.

Gerar esquema de base 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 Django é em uma sessão SSH com o contêiner Linux no Serviço de Aplicativo.

  1. Na saída AZD, localize o URL da sessão SSH e navegue até ele no navegador. Tem esta aparência na saída:

    Open SSH session to App Service container at: <URL>
    
  2. Na sessão SSH, execute python manage.py migrate. Se o comando for bem-sucedido, o App Service está a ligar-se com sucesso à base de dados.

    Captura de ecrã que mostra os comandos a executar no shell SSH e a sua saída (Django).

    Nota

    Somente as alterações nos /home arquivos podem persistir além das reinicializações do aplicativo. As mudanças fora do /home não são persistentes.

Tem problemas? Verifique a seção Solução de problemas.

Navegue até a aplicação

  1. Na saída AZD, localize a URL do seu aplicativo e navegue até ela no navegador. O URL tem esta aparência na saída AZD:

    Deploying services (azd deploy)
    
      (✓) Done: Deploying service web
      - Endpoint: <URL>
    
  2. Adicione alguns restaurantes à lista.

    Uma captura de tela do aplicativo Web Django com PostgreSQL em execução no Azure mostrando restaurantes e avaliações de restaurantes (Django).

    Parabéns! Está a correr uma aplicação web no Azure App Service, com conectividade segura ao Azure Database para PostgreSQL.

Tem problemas? Verifique a seção Solução de problemas.

Transmitir registos de diagnóstico em tempo real

O Serviço de Aplicativo do Azure pode capturar logs do console para ajudá-lo a diagnosticar problemas com seu aplicativo. Por conveniência, o modelo AZD já permite o registo de logs no sistema de ficheiros local e está enviando os logs para um workspace do Log Analytics.

A aplicação de exemplo inclui print() declarações para demonstrar essa capacidade, conforme mostrado no trecho a seguir.

def index(request):
    print('Request for index page received')
    restaurants = Restaurant.objects.annotate(avg_rating=Avg('review__rating')).annotate(review_count=Count('review'))
    lastViewedRestaurant = request.session.get("lastViewedRestaurant", False)

Na saída AZD, localize o link para fazer streaming de registos do Serviço de Aplicativo e navegue até ele no navegador.

Stream App Service logs at: <URL>

Saiba mais sobre como iniciar sessão em aplicações Python na série sobre como configurar o Azure Monitor para a sua aplicação Python.

Tem problemas? Verifique a seção Solução de problemas.

Limpeza de recursos

Para excluir todos os recursos do Azure no ambiente de implantação atual, execute azd down e siga os prompts.

azd down

Resolução de Problemas

Aqui estão os problemas que pode encontrar enquanto tenta avançar neste tutorial e os passos para os resolver.

Não consigo me conectar à sessão SSH

Se não conseguires ligar-te à sessão SSH, então a própria aplicação falha ao iniciar. Verifique os logs de diagnóstico para obter detalhes. Por exemplo, se vir um erro como KeyError: 'AZURE_POSTGRESQL_HOST', pode significar que a variável ambiente está em falta. Pode ser que tenhas removido a definição da aplicação.

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

Se você encontrar algum erro relacionado à conexão com o banco de dados, verifique se as configurações do aplicativo (AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOSTe AZURE_POSTGRESQL_NAME) foram alteradas ou excluídas. Sem essa cadeia de conexão, o comando migrate não pode se comunicar com o banco de dados.

Perguntas mais frequentes

Quanto custa esta configuração?

O preço dos recursos criados é o seguinte:

Como faço para me conectar ao servidor PostgreSQL que está protegido atrás da rede virtual com outras ferramentas?

  • Para acesso básico a partir de uma ferramenta de linha de comando, você pode executar psql a partir da sessão SSH do aplicativo.
  • Para se conectar a partir de uma ferramenta de área de trabalho, sua máquina deve estar dentro da rede virtual. Por exemplo, pode ser uma máquina virtual Azure ligada a uma das sub-redes, ou uma máquina numa rede local que tem uma ligação VPN site-to-site com a rede virtual Azure.
  • Você também pode integrar o Azure Cloud Shell à rede virtual.

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

Usando como exemplo o arquivo de fluxo de trabalho gerado automaticamente pelo App Service, cada git push inicia uma nova execução de compilação e implantação. A partir de um clone local do repositório GitHub, você faz as atualizações desejadas e envia por push para o GitHub. Por exemplo:

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

Como o exemplo Django é configurado para ser executado no Serviço de Aplicativo do Azure?

O aplicativo de exemplo 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 específicas do Serviço de Aplicativo.

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

    # Configure the domain name using the environment variable
    # that Azure automatically creates for us.
    ALLOWED_HOSTS = [os.environ['WEBSITE_HOSTNAME']] if 'WEBSITE_HOSTNAME' in os.environ else []
    
  • O Django não suporta o serviço de arquivos estáticos em produção. Para este tutorial, usa o WhiteNoise para ativar a disponibilização dos ficheiros. O pacote WhiteNoise já foi instalado com o requirements.txt e seu middleware foi adicionado à lista.

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

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

    SESSION_ENGINE = "django.contrib.sessions.backends.cache"
    STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
    

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

Como faço para alterar a configuração da aplicação SECRET_KEY para uma referência do Azure Key Vault?

A partir dos passos do portal Azure descritos, pode mudar SECRET_KEY para uma referência Key Vault executando os seguintes comandos Azure CLI na cloud shell:

# Change the following variables to match your environment
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
KEY_VAULT_NAME=<key-vault-name>
APP_SERVICE_NAME=<app-name>
SECRET_NAME=djangoSecretKey

# Set the subscription ID
az account set --subscription $SUBSCRIPTION_ID

# Assign 'Key Vault Secrets Officer' role to your user at the scope of the key vault
az role assignment create \
  --assignee $(az ad signed-in-user show --query id -o tsv) \
  --role $(az role definition list --name "Key Vault Secrets Officer" --query "[].id" -o tsv) \
  --scope $(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id --output tsv)

# Add the secret to the key vault
az keyvault secret set \
  --vault-name $KEY_VAULT_NAME \
  --name $SECRET_NAME \
  --value $(python -c 'import secrets; print(secrets.token_hex())')

# Add Key Vault reference to the App Service configuration
az webapp config appsettings set \
  --resource-group $RESOURCE_GROUP \
  --name $APP_SERVICE_NAME \
  --settings "SECRET_KEY=@Microsoft.KeyVault(SecretUri=https://$KEY_VAULT_NAME.vault.azure.net/secrets/$SECRET_NAME)"

Você também pode fazer a mesma coisa no portal. Para obter mais informações, consulte:

Como depuro erros durante a implantação das Ações do GitHub?

Se uma etapa falhar no ficheiro de fluxo de trabalho do GitHub gerado automaticamente, tente modificar o comando que falhou para gerar uma saída mais detalhada. Por exemplo, você pode obter mais saída do python comando adicionando a -d opção. Cometa e envie as suas alterações por push para disparar outra implantação no App Service.

Não tenho permissões para criar uma identidade atribuída pelo utilizador

Consulte Configurar a implementação do GitHub Actions a partir do Centro de Implantação.

O que posso fazer com o GitHub Copilot no meu codespace?

A janela de chat do GitHub Copilot já estava lá para você quando criou o codespace. Para sua conveniência, incluímos a extensão de bate-papo do GitHub Copilot na definição de contêiner (consulte .devcontainer/devcontainer.json). No entanto, você precisa de uma conta GitHub Copilot (teste gratuito de 30 dias disponível).

Algumas dicas para você quando falar com o GitHub Copilot:

  • Em uma única sessão de bate-papo, as perguntas e respostas se baseiam umas nas outras e você pode ajustar suas perguntas para ajustar a resposta obtida.
  • Por padrão, o GitHub Copilot não tem acesso a nenhum arquivo em seu repositório. Para fazer perguntas sobre um arquivo, abra o arquivo no editor primeiro.
  • Para permitir que o GitHub Copilot tenha acesso a todos os arquivos no repositório ao preparar suas respostas, comece sua pergunta com @workspace. Para obter mais informações, veja Use the @workspace agent.
  • Na sessão de chat, o GitHub Copilot pode sugerir alterações e (com @workspace) até mesmo onde fazer as alterações, mas não é permitido fazer as alterações para você. Cabe a você adicionar as alterações sugeridas e testá-las.

Avance para o próximo tutorial para saber como proteger seu aplicativo com um domínio e certificado personalizados.

Ou, aprenda como o App Service executa uma aplicação Python: