Tutorial: Implantar um aplicativo PHP, MySQL e Redis no Serviço de Aplicativo do Azure

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). Você também implantará um Cache do Azure para Redis para habilitar o código de cache em seu aplicativo. O Serviço de Aplicativo do Azure é um serviço de hospedagem na Web com aplicação de patch automática altamente escalonável que pode implantar facilmente aplicativos no Windows ou no Linux. Quando terminar, você terá um aplicativo Laravel em execução no Serviço de Aplicativo do Azure no Linux.

Captura de tela do exemplo de aplicativo do Azure intitulado Lista de Tarefas mostrando novas tarefas adicionadas.

Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.

Aplicativo de exemplo

Para acompanhar este tutorial, clone ou baixe o aplicativo Laravel 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 MySQL local. Você precisa de um servidor 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 os recursos Serviço de Aplicativo e 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, 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.

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 mostrado 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.2.
  5. Adicionar o Cache do Azure para Redis?Sim.
  6. Plano de hospedagemBásico. Quando estiver pronto, você poderá escalar verticalmente até um tipo de preço de produção posteriormente.
  7. 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.
  8. Selecione Examinar + criar.
  9. 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.
  • Pontos de extremidade privados → Acessar pontos de extremidade para o servidor de banco de dados e o cache Redis na rede virtual.
  • Adaptadores de rede → Representa endereços IP privados, um para cada um dos pontos de extremidade privados.
  • Servidor flexível do Banco de Dados MySQL do Azure → Acessível somente por trás do ponto de extremidade privado. Um banco de dados e um usuário são criados para você no servidor.
  • Cache do Azure para Redis → Acessível somente por trás de seu ponto de extremidade privado.
  • Zonas DNS privado → Habilitar a resolução DNS do servidor de banco de dados e o cache Redis na rede virtual.

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

2 – Configurar a conectividade do banco de dados

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:

  1. Localize as configurações do aplicativo que começam com AZURE_MYSQL_. Elas foram geradas do novo banco de dados MySQL pelo assistente de criação.
  2. Além disso, encontre as configurações do aplicativo que começam com AZURE_REDIS_. Elas foram geradas do novo cache do redis pelo assistente de criação. Para configurar o aplicativo, basta saber esse nome.
  3. Se desejar, você pode selecionar o botão Editar à direita de cada configuração e ver ou copiar seu valor. Posteriormente, você alterará o código do aplicativo para usar essas configurações.

Uma captura de tela que mostra como criar uma configuração de aplicativo.

Etapa 3: na guia Configurações do aplicativo da página Configuração, crie uma configuração CACHE_DRIVER:

  1. Selecione Nova configuração de aplicativo.
  2. No campo Nome, insira CACHE_DRIVER.
  3. No campo Valor, insira redis.
  4. Selecione OK. CACHE_DRIVER já está sendo usado no código do aplicativo Laravel. Essa configuração informa ao Laravel para usar o Redis como seu cache.

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

etapa 4:usando as mesmas etapas na Etapa 3, crie as seguintes configurações de aplicativo:

  • MYSQL_ATTR_SSL_CA: Use /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem como o valor. 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.
  • LOG_CHANNEL: use stderr como o valor . Essa configuração informa ao Laravel para redirecionar os logs para stderr, o que o disponibiliza para os logs do Serviço de Aplicativo.
  • APP_DEBUG: use true como o valor. É uma variável de depuração do Laravel que habilita as páginas do modo de depuração.
  • APP_KEY: Use base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= como o valor. É uma variável de criptografia do Laravel.
  1. Na barra de menus na parte superior, selecione Salvar.
  2. Quando solicitado, selecione Continuar.

Uma captura de tela mostrando como salvar as configurações na página de configuração.

Importante

O 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.

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 inicia 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ê.

Etapa 1: em uma nova janela do navegador:

  1. Entre em sua conta do GitHub.
  2. Navegue até https://github.com/Azure-Samples/laravel-tasks.
  3. Selecione Fork.
  4. Selecione Criar fork.

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

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.

Etapa 3: no explorador do Visual Studio Code, no navegador, abra config/database.php. Encontre a seção mysql e faça as seguintes alterações:

  1. Substitua DB_HOST por AZURE_MYSQL_HOST.
  2. Substitua DB_DATABASE por AZURE_MYSQL_DBNAME.
  3. Substitua DB_USERNAME por AZURE_MYSQL_USERNAME.
  4. Substitua DB_PASSWORD por AZURE_MYSQL_PASSWORD.
  5. Substitua DB_PORT por AZURE_MYSQL_PORT. Lembre-se de que essas configurações AZURE_MYSQL_ foram criadas para você pelo assistente de criação.

Uma captura de tela mostrando o Visual Studio Code no navegador e um arquivo aberto com variáveis do MySQL modificadas.

Etapa 4: em config/database.php, role até a seção cache do Redis e faça as seguintes alterações:

  1. Substitua REDIS_HOST por AZURE_REDIS_HOST.
  2. Substitua REDIS_PASSWORD por AZURE_REDIS_PASSWORD.
  3. Substitua REDIS_PORT por AZURE_REDIS_PORT.
  4. Substitua REDIS_CACHE_DB por AZURE_REDIS_DATABASE.
  5. Na mesma seção, adicione uma linha com 'scheme' => 'tls',. Essa configuração informa ao Laravel para usar a criptografia para se conectar ao Redis. Lembre-se de que essas configurações AZURE_REDIS_ foram criadas para você pelo assistente de criação.

Uma captura de tela mostrando o Visual Studio Code no navegador e um arquivo aberto com variáveis do Redis modificadas.

Etapa 5:

  1. Selecione a extensão Controle do código-fonte.
  2. Na caixa de texto, digite uma mensagem de commit, como Configure DB & Redis variables.
  3. Selecione Fazer commit e efetuar push.

Uma captura de tela mostrando as alterações em que está sendo feito commit e que estão sendo enviadas por push ao GitHub.

Etapa 6: 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.

Etapa 7: 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-task.
  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.

Etapa 8: 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.

Etapa 9: 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. Leva cerca de 15 minutos.

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

4 – Gerar esquema de banco de dados

O assistente de criação coloca o servidor de banco de dados MySQL atrás de um ponto de extremidade privado, portanto, ele é acessível somente a partir 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.

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

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

Etapa 2: no terminal SSH:

  1. Execute cd /home/site/wwwroot. Aqui estão todos os arquivos implantados.
  2. Execute php artisan migrate --force. Se for bem-sucedido, o Serviço de Aplicativo se conectará com êxito ao banco de dados MySQL. 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 sua saída.

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 do Serviço de Aplicativo usa o Nginx, que começa no diretório raiz do aplicativo. Para alterar a raiz do site, você precisará alterar o arquivo de configuração do Nginx no contêiner do PHP (/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 deve substituir esse arquivo usando o shell SSH, pois a alteração está fora de /home e será perdida após a reinicialização de um aplicativo.

Etapa 1:

  1. No menu à esquerda, selecione Configuração.
  2. Selecione a guia Configurações Gerais.

Uma captura de tela que mostra como abrir a guia Configurações Gerais na página de configurações do Serviço de Aplicativo.

Etapa 2: 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.
  2. Selecione Salvar. O comando substitui o arquivo de configuração do Nginx no contêiner do PHP e reinicia o Nginx. Essa configuração garante que a mesma alteração seja feita no contêiner sempre que ele for iniciado.

Uma captura de tela que mostra como configurar um comando de inicialização no Serviço de Aplicativo.

6 – 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 PHP seguro controlado por dados no Serviço de Aplicativo do Azure.

Uma captura de tela do aplicativo Laravel executando no Serviço de aplicativo.

Dica

O aplicativo de exemplo implementa o padrão cache-aside. Quando você recarrega a página depois de fazer alterações nos dados, o Tempo de resposta na página da Web mostra um tempo muito mais rápido porque está carregando os dados do cache em vez do banco de dados.

7 – Logs de diagnóstico de fluxo

O Serviço de Aplicativo do Azure captura todas as mensagens registradas no console para ajudar você a diagnosticar problemas com seu aplicativo. O aplicativo de exemplo gera mensagens de log do console em cada um de seus pontos de extremidade para demonstrar essa funcionalidade. Por padrão, a funcionalidade de registro em log do Laravel (por exemplo, Log::info()) é gerada para um arquivo local. A configuração do aplicativo LOG_CHANNEL anterior torna as entradas de log acessíveis no fluxo de logs do Serviço de Aplicativo.

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.

Limpar 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. :

Perguntas frequentes

Quanto custa essa configuração?

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

  • O plano do Serviço de Aplicativo é criado na camada Básica e pode ser ampliado ou reduzido. Confira Preço do Serviço de Aplicativo.
  • O servidor flexível do MySQL é criado na camada B1ms e pode ser verticalmente escalado ou reduzido. Com uma conta gratuita do Azure, a camada B1ms é gratuita por 12 meses até os limites mensais. Veja os preços do Banco de Dados do Azure para MySQL.
  • O Cache do Azure para Redis é criado na camada Básico com o tamanho mínimo do cache. Há um pequeno custo associado a essa camada. Você pode dimensioná-la para níveis de desempenho mais altos para maior disponibilidade, clustering e outros recursos. Consulte Preço do Cache do Azure para Redis.
  • A rede virtual não incorre em cobrança, a menos que você configure uma funcionalidade extra, como emparelhamento. Consulte os Preços da Rede Virtual do Azure.
  • A zona DNS privada incorre em uma pequena cobrança. Consulte os Preços do DNS do Azure.

Como conectar-se ao banco de dados MySQL protegido por trás da rede virtual com outras ferramentas?

  • Para acesso básico de uma ferramenta de linha comando, você pode executar mysql no terminal SSH do aplicativo.
  • Para se conectar a partir de uma ferramenta de área de trabalho, como o MySQL Workbench, seu computador deve 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

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.

Próximas etapas

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

Se preferir, confira outros recursos: