Tutorial: Criar um PHP (Laravel) e o aplicativo do Banco de Dados do Azure para MySQL – Servidor Flexível no Serviço de Aplicativo do Azure

APLICA-SE A: Banco de Dados do Azure para MySQL - Servidor flexível

O Serviço de Aplicativo do Azure fornece um serviço de hospedagem na Web altamente escalonável e com aplicação automática de patches usando o sistema operacional Linux. Este tutorial mostra como criar um aplicativo PHP seguro em Serviço de Aplicativo do Azure conectado a um banco de dados MySQL (usando o servidor flexível do Banco de Dados do Azure para MySQL). Quando terminar, você terá um aplicativo Laravel em execução no Serviço de Aplicativo do Azure no Linux.

Screenshot of the Azure app example titled Task List showing new tasks added.

Neste tutorial, você aprenderá a:

  • Criar um aplicativo PHP e MySQL seguro por padrão
  • Configurar segredos de conexão para MySQL usando configurações de aplicativo
  • Implantar o código do aplicativo usando o GitHub Actions
  • Atualizar o aplicativo e reimplantar
  • Execute as migrações de banco de dados com segurança
  • Transmitir logs de diagnóstico do Azure
  • Gerenciar o aplicativo no portal do Azure

Pré-requisitos

Aplicativo de exemplo

Para acompanhar este tutorial, clone ou baixe o aplicativo de exemplo do repositório:

git clone https://github.com/Azure-Samples/laravel-tasks.git

Se você quiser executar o aplicativo localmente, faça o seguinte:

  • Em .env, defina as configurações do banco de dados (como DB_DATABASE, DB_USERNAME e DB_PASSWORD) usando as configurações no banco de dados do servidor flexível do Banco de Dados do Azure para MySQL local. Você precisa de uma instância do servidor flexível do Banco de Dados do Azure para MySQL local para executar este exemplo.

  • Na raiz do repositório, inicie o Laravel com os seguintes comandos:

    composer install
    php artisan migrate
    php artisan key:generate
    php artisan serve
    

1 – Criar recursos de servidor flexível do Serviço de Aplicativo e do Banco de Dados do Azure para MySQL

Nesta etapa, você criará os recursos do Azure. As etapas usadas neste tutorial criam uma configuração do Serviço de Aplicativo e Banco de Dados do Azure para MySQL – servidor flexível, que é segura por padrão. 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.
  • O Runtime para o aplicativo. É aqui que você seleciona a versão do PHP a ser usada para 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.

Instruções Captura de tela
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.
A screenshot showing how to use the search box in the top tool bar to find the Web App + Database creation wizard.
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 o nome msdocs-laravel-mysql-tutorial.

  2. Região → qualquer região do Azure próxima a você.

  3. Nomemsdocs-laravel-mysql-XYZ, em que XYZ são três caracteres aleatórios quaisquer. Esse nome deve ser exclusivo no Azure.

  4. Pilha de runtimePHP 8.0.

    MySQL – Servidor Flexível é selecionado para você por padrão como o mecanismo de banco de dados. O Banco de Dados do Azure para MySQL é um banco de dados MySQL como serviço totalmente gerenciado no Azure, compatível com as edições mais recentes da comunidade.

  5. Observe o nome do banco de dados gerado para você (<aplicativo-nome-bancodedados>). Você precisará dela mais tarde.

  6. Clique em Revisar + Criar.

Após a conclusão da validação, clique em Criar.
A screenshot showing how to configure a new app and database in the Web App + Database wizard.
A implantação leva alguns minutos para ser concluída e 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. É criado um plano do Linux na camada P1v2.
  • 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.
  • Banco de Dados do Azure para MySQL – servidor flexível → Acessível somente da rede virtual. Um banco de dados e um usuário são criados para você no servidor.
  • Zona de DNS privado → habilita a resolução DNS do servidor de banco de dados MySQL na rede virtual.
Após a conclusão da implantação, clique no botão Ir para o recurso. Você será levado diretamente para o aplicativo do Serviço de Aplicativo.
A screenshot showing the form to fill out to create a web app in Azure.

2 – Configurar a conectividade do banco de dados

O assistente de criação gerou configurações do aplicativo para serem usadas na conexão com o banco de dados, mas não em um formato que seja utilizável para seu código. Nesta etapa, você editará e atualizará as configurações do aplicativo no formato de que seu aplicativo precisa.

Instruções Captura de tela
Na página Serviço de Aplicativo, no menu à esquerda, selecione Configuração. A screenshot showing how to open the configuration page in App Service.
Na guia Configurações do aplicativo da página Configuração, para cada uma das configurações a seguir, clique em Editar, atualize o campo Nome com novos valores e clique em OK.
Nome atual Novo Nome
AZURE_MYSQL_DBNAME DB_DATABASE
AZURE_MYSQL_HOST DB_HOST
AZURE_MYSQL_USERNAME DB_USERNAME
AZURE_MYSQL_PASSWORD DB_PASSWORD
A screenshot showing how to see the autogenerated connection string.
Criar uma nova configuração de banco de dados MYSQL_ATTR_SSL_CA:
  1. Clique em Nova configuração de aplicativo.

  2. No campo Nome, insira MYSQL_ATTR_SSL_CA.

  3. No campo Valor, insira /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem.

    Essa configuração de aplicativo aponta para o caminho do certificado TLS/SSL que você precisa para acessar o servidor MySQL. Ele está incluído no repositório de exemplo para maior conveniência.

  4. Clique em OK.

A screenshot showing how to create an app setting.
Crie as seguintes configurações extras de aplicativo seguindo as mesmas etapas e clique em Salvar.
  • APP_DEBUG: use true como o valor. Essa é uma variável de depuração do Laravel.

  • APP_KEY: Use base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= como o valor. Essa é uma variável de criptografia do Laravel.

    Importante

    Esse valor APP_KEY é usado aqui para maior conveniência. Para cenários de produção, ele deve ser gerado especificamente para sua implantação usando php artisan key:generate --show na linha de comando.

A screenshot showing all the required app settings in the configuration page.

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. Você fará algumas alterações na base de código com o Visual Studio Code diretamente no navegador e, em seguida, permitirá que o GitHub Actions implante automaticamente para você.

Instruções Captura de tela
Em uma nova janela do navegador:
  1. Entre em sua conta do GitHub.

  2. Navegue até https://github.com/Azure-Samples/laravel-tasks.

  3. Clique em Criar Fork.

  4. Clique em Criar bifurcação.

A screenshot showing how to create a fork of the sample GitHub repository.
Na página do GitHub, abra o Visual Studio Code no navegador pressionando a tecla .. A screenshot showing how to open the Visual Studio Code browser experience in GitHub.
No Visual Studio Code, no navegador, abra config/database.php no explorer. Na conexão mysql, veja se as configurações de aplicativo que você criou anteriormente para a conexão MySQL já estão sendo usadas (DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD, MYSQL_ATTR_SSL_CA). A screenshot showing Visual Studio Code in the browser and an opened file.
De volta à página Serviço de Aplicativo, no menu à esquerda, selecione Centro de Implantação. A screenshot showing how to open the deployment center in App Service.
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 laravel-tasks.

  5. Em Branch, selecione main.

  6. No menu superior, clique em Salvar.

O Serviço de Aplicativo faz commit de um arquivo do fluxo de trabalho no repositório do GitHub selecionado no diretório .github/workflows.
A screenshot showing how to configure CI/CD using GitHub Actions.
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.

    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.

A screenshot showing how to open deployment logs in the deployment center.
Para fazer alterações no código, vá para o Visual Studio Code no navegador:
  1. Selecione a extensão Controle do código-fonte.

  2. Ao lado do arquivo alterado, por exemplo, database.php, selecione + para preparar suas alterações.

  3. Na caixa de texto, digite uma mensagem para o commit, por exemplo add certificate.

  4. Selecione na marca de seleção para fazer commit e enviar por push para o GitHub.

Se você voltar para a página do Centro de Implantação, verá uma nova entrada de log porque outra execução foi iniciada. Aguarde a conclusão da execução. Leva cerca de 15 minutos.

Dica

A ação do GitHub é definida pelo arquivo em seu repositório do GitHub, em .github/workflow. Você pode torná-lo mais rápido personalizando o arquivo.

A screenshot showing how to commit your changes in the Visual Studio Code browser experience.

4 – Gerar esquema de banco de dados

O assistente de criação coloca a instância de servidor flexível do Banco de Dados do Azure para MySQL atrás de um ponto de extremidade privado, portanto, ela só é acessível da rede virtual. Como o aplicativo do Serviço de Aplicativo já está integrado à rede virtual, a maneira mais fácil de executar migrações de banco de dados com seu banco de dados é diretamente de dentro do contêiner do Serviço de Aplicativo.

Instruções Captura de tela
Na página Serviço de Aplicativo:
  1. No menu à esquerda, selecione SSH.

  2. Selecione Ir.

Uma sessão SSH com seu contêiner do Serviço de Aplicativo será aberta no navegador. Em vez disso, você pode navegar diretamente para https://<app-name>.scm.azurewebsites.net/webssh/host se quiser.
A screenshot showing how to open the SSH shell for your app from the Azure portal.
No terminal SSH:
  1. CD na raiz do código do aplicativo:

    cd /home/site/wwwroot
    
  2. Execute migrações de banco de dados da raiz do aplicativo.

    php artisan migrate --force
    

    Observação

    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.

A screenshot showing the commands to run in the SSH shell and their output.

5 – Alterar a raiz do site

O ciclo de vida do aplicativo Laravel começa no diretório /public. O contêiner padrão do PHP 8.0 para o Serviço de Aplicativo usa o Nginx, que começa no diretório raiz do aplicativo. Para alterar a raiz do site, você precisa alterar o arquivo de configuração do Nginx no contêiner do PHP 8.0 (/etc/nginx/sites-available/default). Para sua conveniência, o repositório de exemplo contém um arquivo de configuração personalizado chamado padrão. Como mencionado anteriormente, você não deseja substituir esse arquivo usando o shell SSH, pois suas alterações serão perdidas após a reinicialização de um aplicativo.

Instruções Captura de tela
Na página Serviço de Aplicativo:
  1. No menu à esquerda, selecione Configuração.

  2. Selecione a guia Configurações Gerais.

A screenshot showing how to open the general settings tab in the configuration page of App Service.
Na guia Configurações Gerais:
  1. Na caixa Comando de Inicialização, insira o seguinte comando: cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload.

    Ele substitui o arquivo de configuração do Nginx no contêiner do PHP 8.0 e reinicia o Nginx. Essa configuração garante que essa alteração seja feita no contêiner sempre que ele for iniciado.

  2. Selecione Salvar.

A screenshot showing how to configure a startup command in App Service.

6 – Navegar até o aplicativo

Instruções Captura de tela
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.

A screenshot showing how to launch an App Service from the Azure portal.
Adicione algumas tarefas à lista. Parabéns! Você está executando um aplicativo PHP controlado por dados no Serviço de Aplicativo do Azure. A screenshot of the Laravel app running in App Service.

7 – Logs de diagnóstico de fluxo

Instruções Captura de tela
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.

A screenshot showing how to enable native logs in App Service in the Azure portal.
No menu à esquerda, clique em Fluxo de Logs. Você verá os logs do seu aplicativo, incluindo os logs de plataforma e os logs de dentro do contêiner. A screenshot showing how to view the log stream in the Azure portal.

Limpar os recursos

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

Instruções Captura de tela
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.

A screenshot showing how to search for and navigate to a resource group in the Azure portal.
Na página de grupo de recursos, clique em Excluir grupo de recursos. A screenshot showing the location of the Delete Resource Group button in the Azure portal.
  1. Insira o nome do grupo de recursos para confirmar a exclusão.

  2. Clique em Excluir.

A screenshot of the confirmation dialog for deleting a resource group in the Azure portal.

Perguntas frequentes

Quanto custa essa configuração?

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

Como fazer para me conectar a um banco de dados de servidor flexível do Banco de Dados do Azure para MySQL protegido por uma rede virtual?

Para se conectar a um banco de dados do servidor flexível do Banco de Dados do Azure para MySQL, você pode usar vários métodos com base nas ferramentas e ambientes à sua disposição:

  • Acesso à ferramenta de linha de comando:
    • Use o comando mysql do terminal SSH do aplicativo para acesso básico.
  • Ferramentas de área de trabalho (por exemplo, MySQL Workbench):
    • Usando o túnel SSH com a CLI do Azure:
      • Crie uma sessão SSH para o aplicativo Web usando a CLI do Azure.
      • Use a sessão SSH para túnel do tráfego para MySQL.
    • Usando VPN site a site ou VM do Azure:
      • Seu computador deve fazer parte da rede virtual.
      • Considere usar:
        • Uma VM do Azure vinculada a uma das sub-redes.
        • Um computador em uma rede local que tem uma conexão VPN site a site com a rede virtual do Azure.
  • Integração do Azure Cloud Shell:

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

Por que a implantação do GitHub Actions é tão lenta?

O arquivo de fluxo de trabalho gerado automaticamente do Serviço de Aplicativo define a execução de dois trabalhos, compilar e implantar. Como cada trabalho é executado em seu próprio ambiente limpo, o arquivo de fluxo de trabalho garante que o trabalho deploy tenha acesso aos arquivos do trabalho build:

A maior parte do tempo gasto pelo processo de dois trabalhos é carregando e baixando artefatos. Se desejar, você pode simplificar o arquivo de fluxo de trabalho combinando os dois trabalhos em um, o que elimina a necessidade das etapas de carregar e baixar.

Resumo

Neste tutorial, você aprendeu a:

  • Criar um aplicativo de servidor flexível do PHP e do Banco de Dados do Azure para MySQL seguro por padrão no Azure
  • Configurar segredos de conexão para o servidor flexível do Banco de Dados do Azure para MySQL usando configurações de aplicativo
  • Implantar o código do aplicativo usando o GitHub Actions
  • Atualizar o aplicativo e reimplantar
  • Execute as migrações de banco de dados com segurança
  • Transmitir logs de diagnóstico do Azure
  • Gerenciar o aplicativo no portal do Azure

Próximas etapas