Tutorial: Criar uma aplicação PHP e MySQL no Serviço de Aplicações do Azure

Serviço de Aplicações do Azure fornece um serviço de alojamento Na Web altamente dimensionável e com correção automática com o sistema operativo Linux. Este tutorial mostra como criar uma aplicação PHP segura no Serviço de Aplicações do Azure que está ligada a uma base de dados MySQL (com Base de Dados do Azure para MySQL servidor flexível). Quando tiver terminado, terá uma aplicação Laravel em execução no Serviço de Aplicações do Azure no Linux.

Captura de ecrã do exemplo de aplicação do Azure intitulado Lista de Tarefas a mostrar novas tarefas adicionadas.

Neste tutorial, ficará a saber como:

  • Criar uma aplicação PHP e MySQL segura por predefinição no Azure
  • Configurar segredos de ligação ao MySQL com as definições da aplicação
  • Implementar o código da aplicação com GitHub Actions
  • Atualizar e reimplementar a aplicação
  • Executar migrações de base de dados de forma segura
  • Transmitir os registos de diagnóstico em fluxo a partir do Azure
  • Gerir a aplicação no portal do Azure

Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.

Aplicação de exemplo

Para acompanhar este tutorial, clone ou transfira a aplicação de exemplo a partir do repositório:

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

Se quiser executar a aplicação localmente, faça o seguinte:

  • Em .env, configure as definições da base de dados (como DB_DATABASE, DB_USERNAMEe DB_PASSWORD) com as definições na base de dados MySQL local. 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 recursos Serviço de Aplicações e MySQL

Neste passo, vai criar os recursos do Azure. Os passos utilizados neste tutorial criam uma configuração Serviço de Aplicações e Base de Dados do Azure para MySQL segura por predefinição. Para o processo de criação, irá especificar:

  • O Nome da aplicação Web. É o nome utilizado como parte do nome DNS da sua aplicação Web sob a forma de https://<app-name>.azurewebsites.net.
  • O Runtime da aplicação. É onde seleciona a versão do PHP a utilizar para a sua aplicação.
  • O Grupo de Recursos da aplicação. Um grupo de recursos permite-lhe agrupar (num contentor lógico) todos os recursos do Azure necessários para a aplicação.

Inicie sessão no portal do Azure e siga estes passos para criar os seus recursos de Serviço de Aplicações do Azure.

Instruções Captura de ecrã
No portal do Azure:
  1. Introduza "base de dados da aplicação Web" na barra de pesquisa na parte superior do portal do Azure.
  2. Selecione o item com o nome Aplicação Web + Base de Dados no cabeçalho Marketplace .
Também pode navegar diretamente para o assistente de criação .
Captura de ecrã a mostrar como utilizar a caixa de pesquisa na barra de ferramentas superior para encontrar o assistente de criação de Aplicações Web + Base de Dados.
Na página Criar Aplicação Web + Base de Dados , preencha o formulário da seguinte forma.
  1. Grupo de Recursos → Selecione Criar novo e utilize um nome de msdocs-laravel-mysql-tutorial.

  2. Região → qualquer região do Azure perto de si.

  3. Nomemsdocs-laravel-mysql-XYZ em que XYZ é qualquer um dos três carateres aleatórios. Este nome tem de ser exclusivo em todo o Azure.

  4. Pilha de runtimePHP 8.0.

    MySQL – o Servidor Flexível está selecionado por predefinição como motor de base de dados. Base de Dados do Azure para MySQL é uma base de dados MySQL totalmente gerida como um serviço no Azure, compatível com as edições mais recentes da comunidade.

  5. Tenha em atenção o nome da base de dados que é gerado automaticamente (<app-name-database>). Precisará dela mais tarde.

  6. Clique em Rever + criar.

Após a conclusão da validação, clique em Criar.
Captura de ecrã a mostrar como configurar uma nova aplicação e base de dados no assistente Aplicação Web + Base de Dados.
A implementação demora alguns minutos a concluir e cria os seguintes recursos:
  • Grupo de recursos → O contentor para todos os recursos criados.
  • Serviço de Aplicações plano → Define os recursos de computação para Serviço de Aplicações. É criado um plano do Linux no escalão P1v2 .
  • Serviço de Aplicações → Representa a sua aplicação e é executada no plano de Serviço de Aplicações.
  • A rede virtual → Integrada com a aplicação Serviço de Aplicações e isola o tráfego de rede de back-end.
  • Base de Dados do Azure para MySQL servidor flexível → Acessível apenas a partir da rede virtual. É criada uma base de dados e um utilizador no servidor.
  • DNS Privado zona → Ativa a resolução de DNS do servidor da base de dados MySQL na rede virtual.
Assim que a implementação estiver concluída, clique no botão Ir para recurso . É direcionado diretamente para a aplicação Serviço de Aplicações.
Captura de ecrã a mostrar o formulário a preencher para criar uma aplicação Web no Azure.

2 - Configurar a conectividade da base de dados

O assistente de criação gerou automaticamente uma cadeia de ligação para a base de dados, mas ainda não está num formato utilizável para o seu código. Neste passo, vai criar definições de aplicação com o formato de que a sua aplicação precisa.

Instruções Captura de ecrã
Na página Serviço de Aplicações, no menu esquerdo, selecione Configuração. Uma captura de ecrã a mostrar como abrir a página de configuração no Serviço de Aplicações.
No separador Definições da aplicação da página Configuração , crie uma DB_DATABASE definição:
  1. Clique em Nova definição de aplicação.

  2. No campo Nome , introduza DB_DATABASE.

  3. No campo Valor , introduza o nome da base de dados gerada automaticamente a partir do assistente de criação, que se assemelha a msdocs-laravel-mysql-XYZ-database.

  4. Clique em OK.

Uma captura de ecrã a mostrar como ver a cadeia de ligação gerada automaticamente.
Novamente no separador Definições da aplicação:
  1. Desloque-se para a parte inferior e selecione a cadeia de ligação defaultConnection. Foi gerado pelo assistente de criação e contém o nome de utilizador e a palavra-passe de que precisa.

  2. No campo Valor , selecione o botão Copiar e cole o valor num ficheiro de texto para mais tarde. Está no seguinte formato (quebras de linha para maior clareza):

    Database=mysql;
    Server=<database-server-domain-name>;
    User Id=<username>;
    Password=<password>
    
  3. Selecione Cancelar.

Uma captura de ecrã a mostrar como criar uma definição de aplicação.
Crie as seguintes definições adicionais da aplicação ao seguir os mesmos passos para criar uma definição de aplicação.
  • DB_HOST: utilize database-server-domain-name<> da cadeia de ligação copiada como o valor.

  • DB_USERNAME: utilize o <nome> de utilizador da cadeia de ligação copiada como o valor.

  • DB_PASSWORD: utilize a <palavra-passe> da cadeia de ligação copiada como o valor.

  • MYSQL_ATTR_SSL_CA: utilize /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem como o valor.

    Esta definição de aplicação aponta para o caminho do certificado TLS/SSL de que precisa para aceder ao servidor MySQL. Está incluído no repositório de exemplo para conveniência.

  • APP_DEBUG: utilize verdadeiro como valor. Esta é uma variável de depuração do Laravel.

  • APP_KEY: utilize base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= como o valor. Esta é uma variável de encriptação Laravel.

    Importante

    Este APP_KEY valor é utilizado aqui para conveniência. Para cenários de produção, deve ser gerado especificamente para a sua implementação através php artisan key:generate --show da linha de comandos.

Uma captura de ecrã a mostrar todas as definições de aplicação necessárias na página de configuração.

3 - Implementar código de exemplo

Neste passo, irá configurar a implementação do GitHub com GitHub Actions. É apenas uma das muitas formas de implementar no Serviço de Aplicações, mas também uma excelente forma de ter uma integração contínua no seu processo de implementação. Por predefinição, todos os git push repositórios do GitHub iniciarão a ação de compilação e implementação. Irá efetuar algumas alterações à sua base de código com o Visual Studio Code diretamente no browser e, em seguida, permitir que GitHub Actions implemente automaticamente.

Instruções Captura de ecrã
Numa nova janela do browser:
  1. Inicie sessão na sua conta do GitHub.

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

  3. Clique em Fork.

  4. Clique em Criar fork.

Uma captura de ecrã a mostrar como criar um fork do repositório do GitHub de exemplo.
Na página do GitHub, abra o Visual Studio Code no browser ao premir a . tecla. Uma captura de ecrã a mostrar como abrir a experiência do browser Visual Studio Code no GitHub.
No Visual Studio Code no browser, abra config/database.php no explorador. mysql Na ligação, veja que as definições da aplicação que criou anteriormente para a ligação MySQL já são utilizadas (DB_HOST, , DB_DATABASEDB_USERNAME, DB_PASSWORD, MYSQL_ATTR_SSL_CA). Captura de ecrã a mostrar o Visual Studio Code no browser e um ficheiro aberto.
Novamente na página Serviço de Aplicações, no menu esquerdo, selecione Centro de Implementação. Uma captura de ecrã a mostrar como abrir o centro de implementação no Serviço de Aplicações.
Na página Centro de Implementação:
  1. Em Origem, selecione GitHub. Por predefinição, GitHub Actions está selecionado como o fornecedor de compilação.

  2. Inicie sessão na sua conta do GitHub e siga o pedido para autorizar o Azure.

  3. Na Organização, selecione a sua conta.

  4. No Repositório, selecione laravel-tasks.

  5. Em Ramo, selecione principal.

  6. No menu superior, clique em Guardar.

Serviço de Aplicações consolida um ficheiro de fluxo de trabalho no repositório do GitHub selecionado, no .github/workflows diretório.
Uma captura de ecrã a mostrar como configurar CI/CD com GitHub Actions.
Na página Centro de Implementação:
  1. Selecionar Registos. Já foi iniciada uma execução de implementação.

  2. No item de registo da execução da implementação, selecione Compilar/Implementar Registos.

    É levado para o seu repositório do GitHub e vê que a ação do GitHub está em execução. O ficheiro de fluxo de trabalho define duas fases separadas, compilar e implementar.

Uma captura de ecrã a mostrar como abrir registos de implementação no centro de implementação.
Aguarde que a execução seja concluída. Demora cerca de 15 minutos.

Dica

A ação do GitHub é definida pelo ficheiro no seu repositório do GitHub, em .github/workflow. Pode torná-lo mais rápido ao personalizar o ficheiro.

Uma captura de ecrã a mostrar como consolidar as suas alterações na experiência do browser Visual Studio Code.

4 - Gerar esquema de base de dados

O assistente de criação coloca o servidor da base de dados MySQL atrás de um ponto final privado, pelo que só está acessível a partir da rede virtual. Uma vez que a aplicação Serviço de Aplicações já está integrada na rede virtual, a forma mais fácil de executar migrações de bases de dados com a base de dados é diretamente a partir do contentor Serviço de Aplicações.

Instruções Captura de ecrã
Na página Serviço de Aplicações:
  1. No menu esquerdo, selecione SSH.

  2. Selecione Ir.

É aberta uma sessão SSH com o contentor Serviço de Aplicações no browser. Se quiser, pode navegar diretamente para https://<app-name>.scm.azurewebsites.net/webssh/host .
Uma captura de ecrã a mostrar como abrir a shell SSH para a sua aplicação a partir do portal do Azure.
No terminal SSH:
  1. CD para a raiz do código da aplicação:

    cd /home/site/wwwroot
    
  2. Execute migrações de bases de dados a partir da raiz da aplicação.

    php artisan migrate --force
    

    Nota

    Apenas as alterações aos ficheiros em /home podem persistir para além dos reinícios da aplicação. As alterações fora de /home não são persistentes.

Uma captura de ecrã a mostrar os comandos a executar na shell SSH e na respetiva saída.

5 - Alterar a raiz do site

O ciclo de vida da aplicação Laravel começa no diretório /público. O contentor PHP 8.0 predefinido para Serviço de Aplicações utiliza o Nginx, que começa no diretório de raiz da aplicação. Para alterar a raiz do site, tem de alterar o ficheiro de configuração Nginx no contentor PHP 8.0 (/etc/nginx/sites-disponível/predefinição). Para sua conveniência, o repositório de exemplo contém um ficheiro de configuração personalizado chamado predefinição. Conforme indicado anteriormente, não quer substituir este ficheiro com a shell SSH, porque as alterações serão perdidas após o reinício da aplicação.

Instruções Captura de ecrã
Na página Serviço de Aplicações:
  1. No menu esquerdo, selecione Configuração.

  2. Selecione o separador Definições gerais .

Uma captura de ecrã a mostrar como abrir o separador definições gerais na página de configuração do Serviço de Aplicações.
No separador Definições gerais:
  1. Na caixa Comando de Arranque , introduza o seguinte comando: cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload.

    Substitui o ficheiro de configuração Nginx no contentor PHP 8.0 e reinicia o Nginx. Esta configuração garante que esta alteração é efetuada no contentor sempre que é iniciada.

  2. Selecione Guardar.

Uma captura de ecrã a mostrar como configurar um comando de arranque no Serviço de Aplicações.

6 - Navegar para a aplicação

Instruções Captura de ecrã
Na página Serviço de Aplicações:
  1. No menu esquerdo, selecione Descrição Geral.

  2. Selecione o URL da sua aplicação.

    Também pode navegar diretamente para https://<app-name>.azurewebsites.net.

Uma captura de ecrã a mostrar como iniciar uma Serviço de Aplicações a partir do portal do Azure.
Adicione algumas tarefas à lista. Parabéns, está a executar uma aplicação PHP baseada em dados no Serviço de Aplicações do Azure. Uma captura de ecrã da aplicação Laravel em execução no Serviço de Aplicações.

7 - Transmitir registos de diagnóstico

Instruções Captura de ecrã
Na página Serviço de Aplicações:
  1. No menu esquerdo, selecione Serviço de Aplicações registos.

  2. Em Registo de aplicações, selecione Sistema de Ficheiros.

Uma captura de ecrã a mostrar como ativar os registos nativos no Serviço de Aplicações no portal do Azure.
No menu esquerdo, clique em Fluxo de registos. Verá os registos da sua aplicação, incluindo registos e registos da plataforma a partir do contentor. Uma captura de ecrã a mostrar como ver o fluxo de registos no portal do Azure.

Limpar os recursos

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

Instruções Captura de ecrã
Na barra de pesquisa na parte superior do portal do Azure:
  1. Introduza o nome do grupo de recursos.

  2. Selecione o grupo de recursos.

Uma captura de ecrã a mostrar como procurar e navegar para um grupo de recursos no portal do Azure.
Na página do grupo de recursos, clique em Eliminar grupo de recursos. Uma captura de ecrã a mostrar a localização do botão Eliminar Grupo de Recursos no portal do Azure.
  1. Introduza o nome do grupo de recursos para confirmar a sua eliminação.

  2. Clique em Eliminar.

Uma captura de ecrã da caixa de diálogo de confirmação para eliminar um grupo de recursos no portal do Azure.

Perguntas mais frequentes

Quanto custa esta configuração?

Os preços dos recursos de criação são os seguintes:

  • O plano Serviço de Aplicações é criado no escalão Premium V2 e pode ser aumentado ou reduzido verticalmente. Veja Serviço de Aplicações preços.
  • O servidor flexível MySQL é criado na camada B1ms e pode ser aumentado ou reduzido verticalmente. Com uma conta gratuita do Azure, o escalão B1ms é gratuito durante 12 meses, até aos limites mensais. Veja Base de Dados do Azure para MySQL preços.
  • A rede virtual não incorre num custo, a menos que configure funcionalidades adicionais, como o peering. Veja Preços do Azure Rede Virtual.
  • A zona DNS privada incorre numa pequena carga. Veja Preços do DNS do Azure.

Como devo proceder para ligar à base de dados MySQL protegida por trás da rede virtual com outras ferramentas?

  • Para obter acesso básico a partir de uma ferramenta de linha de commmand, pode executar mysql a partir do terminal SSH da aplicação.
  • Para se ligar a partir de uma ferramenta de ambiente de trabalho como o MySQL Workbench, o computador tem de estar dentro da rede virtual. Por exemplo, pode ser uma VM do Azure ligada a uma das sub-redes ou uma máquina numa rede no local que tenha uma ligação VPN site a site com a rede virtual do Azure.
  • Também pode integrar o Azure Cloud Shell na rede virtual.

Como funciona o desenvolvimento de aplicações locais com GitHub Actions?

Veja o ficheiro de fluxo de trabalho gerado automaticamente a partir de Serviço de Aplicações como exemplo, cada git push um inicia uma nova compilação e execução de implementação. A partir de um clone local do repositório do GitHub, faz com que as atualizações pretendidas o enviem para o GitHub. Por exemplo:

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

Porque é que a implementação do GitHub Actions é tão lenta?

O ficheiro de fluxo de trabalho gerado automaticamente a partir de Serviço de Aplicações define build-then-deploy, execução de dois trabalhos. Uma vez que cada tarefa é executada no seu próprio ambiente limpo, o ficheiro de fluxo de trabalho garante que a deploy tarefa tem acesso aos ficheiros a build partir da tarefa:

A maior parte do tempo despendido pelo processo de dois trabalhos é gasto a carregar e transferir artefactos. Se quiser, pode simplificar o ficheiro de fluxo de trabalho ao combinar as duas tarefas numa só, o que elimina a necessidade dos passos de carregamento e transferência.

Passos seguintes

Neste tutorial, ficou a saber como:

  • Criar uma aplicação PHP e MySQL segura por predefinição no Azure
  • Configurar segredos de ligação ao MySQL com as definições da aplicação
  • Implementar o código da aplicação com GitHub Actions
  • Atualizar e reimplementar a aplicação
  • Executar migrações de base de dados de forma segura
  • Transmitir os registos de diagnóstico em fluxo a partir do Azure
  • Gerir a aplicação no portal do Azure

Avance para o próximo tutorial para saber como proteger a sua aplicação com um domínio e certificado personalizados.

Em alternativa, consulte outros recursos: