Implantar uma aplicação Laravel no Elastic Beanstalk - AWS Elastic Beanstalk

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Implantar uma aplicação Laravel no Elastic Beanstalk

O Laravel é uma estrutura de código aberto model-view-controller (MVC) para PHP. Este tutorial mostra o processo de geração de um aplicativo Laravel, sua implantação em um AWS Elastic Beanstalk ambiente e sua configuração para se conectar a uma instância de banco de dados do Amazon Relational Database Service (Amazon RDS).

Pré-requisitos

Este tutorial pressupõe que você tenha conhecimento das operações básicas e do console do Elastic Beanstalk. Caso ainda não tenha, siga as instruções em Introdução ao Elastic Beanstalk para iniciar seu primeiro ambiente do Elastic Beanstalk.

Para seguir os procedimentos neste manual, você precisa de um terminal de linha de comando ou de um shell para executar os comandos. Nas listagens, os comandos são mostrados precedidos por um símbolo de prompt ($) e pelo nome do diretório atual, quando apropriado.

~/eb-project$ this is a command this is output

No Linux e no macOS, você pode usar seu gerenciador de pacotes e de shell preferido. No Windows, você pode instalar o Windows Subsystem for Linux para obter uma versão integrada ao Windows do Ubuntu e do Bash.

O Laravel 6 requer PHP 7.2 ou posterior. Ele também requer as extensões PHP listadas no tópico requisitos do servidor na documentação oficial do Laravel. Siga as instruções do tópico Configurando seu ambiente de PHP desenvolvimento para o Elastic Beanstalk para instalar o PHP e o Composer.

Para obter informações sobre suporte e manutenção do Laravel, consulte o tópico política de suporte na documentação oficial do Laravel.

Iniciar um ambiente do Elastic Beanstalk

Use o console do Elastic Beanstalk para criar um ambiente do Elastic Beanstalk. Escolha a configuração da Plataforma PHP e aceite as configurações padrão e código de exemplo.

Para iniciar um ambiente (console)
  1. Abra o console do Elastic Beanstalk usando este link pré-configurado: console.aws.amazon.com/elasticbeanstalk/home#/ newApplication?applicationName=Tutorials &EnvironmentType= LoadBalanced

  2. Em Platform (Plataforma), selecione a plataforma e a ramificação da plataforma que correspondem à linguagem usada pelo seu aplicativo.

  3. Para Application code, escolha Sample application.

  4. Selecione Review and launch.

  5. Examine as opções disponíveis. Escolha a opção disponível que deseja usar e, quando estiver pronto, escolha Create app (Criar aplicativo).

A criação de ambiente leva cerca de 5 minutos e cria os seguintes recursos:

  • Instância do EC2: uma máquina virtual do Amazon Elastic Compute Cloud (Amazon EC2) configurada para executar aplicações Web na plataforma escolhida.

    Cada plataforma executa um conjunto específico de software, arquivos de configuração e scripts para oferecer suporte a uma versão de linguagem, framework, contêiner da web específicos ou a uma combinação deles. A maioria das plataformas usa o Apache ou o NGINX como um proxy reverso que fica na frente da aplicação Web, encaminha solicitações para ela, atende ativos estáticos e gera logs de acesso e de erro.

  • Grupo de segurança de instância: um grupo de segurança do Amazon EC2 configurado para permitir tráfego de entrada na porta 80. Esse recurso permite que o tráfego HTTP do load balancer chegue à instância do EC2 que executa seu aplicativo Web. Por padrão, o tráfego não é permitido em outras portas.

  • Balanceador de carga: um balanceador de carga do Elastic Load Balancing configurado para distribuir solicitações para as instâncias que executam a aplicação. Um load balancer também elimina a necessidade de expor suas instâncias diretamente à Internet.

  • Grupo de segurança do balanceador de carga: um grupo de segurança do Amazon EC2 configurado para permitir tráfego de entrada na porta 80. Esse recurso permite que o tráfego HTTP da Internet acesse o load balancer. Por padrão, o tráfego não é permitido em outras portas.

  • Grupo de Auto Scaling: grupo de Auto Scaling configurado para substituir uma instância se ela for encerrada ou ficar indisponível.

  • Bucket do Amazon S3: um local de armazenamento do seu código-fonte, logs e outros artefatos criados quando o Elastic Beanstalk é utilizado.

  • CloudWatch Alarmes da Amazon — Dois CloudWatch alarmes que monitoram a carga nas instâncias em seu ambiente e que são acionados se a carga for muito alta ou muito baixa. Quando um alarme é acionado, o seu grupo de Auto Scaling pode aumentar ou diminuir.

  • AWS CloudFormation stack — O Elastic AWS CloudFormation Beanstalk usa para lançar os recursos em seu ambiente e propagar as alterações de configuração. Os recursos são definidos em um modelo que você pode visualizar no console do AWS CloudFormation.

  • Nome de domínio: um nome de domínio que encaminha para a aplicação Web no formato subdomínio.região.elasticbeanstalk.com.

    nota

    Para aumentar a segurança de suas aplicações do Elastic Beanstalk, o domínio elasticbeanstalk.com é registrado na Lista Pública de Sufixos (PSL). Para maior segurança, recomendamos que você use cookies com um prefixo __Host- se precisar definir cookies confidenciais no nome de domínio padrão para suas aplicações do Elastic Beanstalk. Essa prática ajudará a defender seu domínio contra tentativas de falsificação de solicitação entre sites (CSRF). Para obter mais informações, consulte a página Set-Cookie na Mozilla Developer Network.

Todos esses recursos são gerenciados pelo Elastic Beanstalk. Quando você encerra o ambiente, o Elastic Beanstalk encerra todos os recursos dele.

nota

O bucket do Amazon S3 que o Elastic Beanstalk cria é compartilhado entre ambientes e não é excluído durante o encerramento do ambiente. Para ter mais informações, consulte Usar o Elastic Beanstalk com o Amazon S3.

Instalar o Laravel e gerar um site

O Composer pode instalar o Laravel e criar um projeto de trabalho com um comando:

~$ composer create-project --prefer-dist laravel/laravel eb-laravel

O Composer instala o Laravel e suas dependências, e gera um projeto padrão.

Se tiver problemas com a instalação do Laravel, consulte o tópico sobre instalação na documentação oficial: https://laravel.com/docs/6.x

Implantar o aplicativo

Crie um pacote de origem com os arquivos criados pelo Composer. O comando a seguir cria um pacote de origem chamado laravel-default.zip. Ele exclui arquivos na pasta vendor, que tomam muito espaço e não são necessários para implantação da aplicação no Elastic Beanstalk.

~/eb-laravel$ zip ../laravel-default.zip -r * .[^.]* -x "vendor/*"

Faça upload do pacote de origem para o Elastic Beanstalk para implantar o Laravel no ambiente.

Para implantar um pacote de origem
  1. Abra o console do Elastic Beanstalk e, na lista Regiões, selecione sua. Região da AWS

  2. No painel de navegação, selecione Ambientes e selecione o nome do ambiente na lista.

    nota

    Se você tiver muitos ambientes, use a barra de pesquisa para filtrar a lista de ambientes.

  3. Na página de visão geral do ambiente, escolha Upload and deploy (Fazer upload e implantar).

  4. Use a caixa de diálogo na tela para carregar o pacote de origem.

  5. Escolha Deploy (Implantar).

  6. Quando a implantação for concluída, é possível escolher o URL do site para abri-lo em uma nova guia.

nota

Para otimizar mais o pacote de origem, inicie um repositório Git e use o comando git archivepara criar o pacote de origem. O projeto do Laravel padrão inclui um arquivo .gitignore que diz para o Git excluir a pasta vendor e outros arquivos que não são necessários para implantação.

Definir as configurações do Composer

Quando a implantação for concluída, clique no URL para abrir o aplicativo Laravel no navegador:

Error message indicating no permission to access or on this server.

O que é isso? Por padrão, o Elastic Beanstalk fornece a raiz do seu projeto no caminho raiz do site. Neste caso, contudo, a página padrão (index.php) está em um nível abaixo na pasta public. Você pode verificar isso adicionando /public ao URL. Por exemplo, http://laravel.us-east-2.elasticbeanstalk.com/public.

Para fornecer a aplicação Laravel no caminho raiz, use o console do Elastic Beanstalk para configurar a raiz do documento para o site.

Para configurar a raiz do documento do seu site
  1. Abra o console do Elastic Beanstalk e, na lista Regiões, selecione sua. Região da AWS

  2. No painel de navegação, selecione Ambientes e selecione o nome do ambiente na lista.

    nota

    Se você tiver muitos ambientes, use a barra de pesquisa para filtrar a lista de ambientes.

  3. No painel de navegação, escolha Configuration (Configuração).

  4. Na categoria de configuração Updates, monitoring, and logging (Atualizações, monitoramento e logs), escolha Edit (Editar).

  5. Para Document Root (Raiz do documento), insira /public.

  6. Para salvar as alterações, escolha Apply (Aplicar) na parte inferior da página.

  7. Quando a atualização for concluída, clique no URL para reabrir seu site no navegador.

Laravel logo with navigation menu items: Documentation, Laracasts, News, Forge, GitHub.

Até agora, tudo tranquilo. Em seguida, adicione um banco de dados ao ambiente e configure o Laravel para se conectar a ele.

Adicionar um banco de dados ao seu ambiente

Execute uma instância de banco de dados do RDS no ambiente do Elastic Beanstalk. Você pode usar bancos de dados MySQL, SQLServer ou PostgreSQL com o Laravel no Elastic Beanstalk. Neste exemplo, usaremos MySQL.

Como adicionar uma instância de banco de dados do RDS ao ambiente do Elastic Beanstalk
  1. Abra o console do Elastic Beanstalk e, na lista Regiões, selecione sua. Região da AWS

  2. No painel de navegação, selecione Ambientes e selecione o nome do ambiente na lista.

    nota

    Se você tiver muitos ambientes, use a barra de pesquisa para filtrar a lista de ambientes.

  3. No painel de navegação, escolha Configuration (Configuração).

  4. Na categoria de configuração Database (Banco de dados), escolha Edit (Editar).

  5. Em Engine (Mecanismo), escolha mysql.

  6. Digite um username (nome de usuário) e uma password (senha) principais. O Elastic Beanstalk fornecerá esses valores para a aplicação usando propriedades de ambiente.

  7. Para salvar as alterações, escolha Apply (Aplicar) na parte inferior da página.

A criação de uma instância de banco de dados leva cerca de 10 minutos. Para obter mais informações sobre bancos de dados acoplados a um ambiente do Elastic Beanstalk, consulte Adição de um banco de dados ao seu ambiente do Elastic Beanstalk.

Enquanto isso, atualize o código-fonte para ler as informações de conexão do ambiente. O Elastic Beanstalk fornece detalhes de conexão usando variáveis de ambiente, como RDS_HOSTNAME, que você pode acessar na aplicação.

A configuração de banco de dados do Laravel é armazenada em um arquivo chamado database.php na pasta config no código do projeto. Encontre a entrada mysql e modifique as variáveis de host, database, username, and password para ler os valores correspondentes do Elastic Beanstalk:

exemplo ~/Eb-laravel/config/database.php
... 'connections' => [ 'sqlite' => [ 'driver' => 'sqlite', 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', ], 'mysql' => [ 'driver' => 'mysql', 'host' => env('RDS_HOSTNAME', '127.0.0.1'), 'port' => env('RDS_PORT', '3306'), 'database' => env('RDS_DB_NAME', 'forge'), 'username' => env('RDS_USERNAME', 'forge'), 'password' => env('RDS_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ], ...

Para verificar se a conexão de banco de dados está configurada corretamente, adicione código a index.php para conectar ao banco de dados e adicionar código à resposta padrão:

exemplo ~/Eb-laravel/public/index.php
... if(DB::connection()->getDatabaseName()) { echo "Connected to database ".DB::connection()->getDatabaseName(); } $response->send(); ...

Quando a instância de banco de dados tiver iniciado, empacote e implante o aplicativo atualizado em seu ambiente.

Como atualizar o ambiente do Elastic Beanstalk
  1. Crie um novo pacote de origem:

    ~/eb-laravel$ zip ../laravel-v2-rds.zip -r * .[^.]* -x "vendor/*"
  2. Abra o console do Elastic Beanstalk e, na lista Regiões, selecione sua. Região da AWS

  3. No painel de navegação, selecione Ambientes e selecione o nome do ambiente na lista.

    nota

    Se você tiver muitos ambientes, use a barra de pesquisa para filtrar a lista de ambientes.

  4. Escolha Upload and Deploy.

  5. Escolha Browse e faça upload de laravel-v2-rds.zip.

  6. Escolha Implantar.

Implantar uma nova versão do seu aplicativo leva menos de um minuto. Quando a implantação for concluída, atualize a página da web novamente para verificar se a conexão com o banco de dados foi bem-sucedida:

Laravel website header with navigation menu items for Documentation, Laracasts, News, Forge, and GitHub.

Limpeza

Ao terminar de trabalhar com o Elastic Beanstalk, você pode encerrar o ambiente. O Elastic Beanstalk AWS encerra todos os recursos associados ao seu ambiente, como instâncias do Amazon EC2, instâncias de banco de dados, balanceadoresde carga, grupos de segurança e alarmes.

Para encerrar seu ambiente do Elastic Beanstalk a partir do console
  1. Abra o console do Elastic Beanstalk e, na lista Regiões, selecione sua. Região da AWS

  2. No painel de navegação, selecione Ambientes e selecione o nome do ambiente na lista.

    nota

    Se você tiver muitos ambientes, use a barra de pesquisa para filtrar a lista de ambientes.

  3. Escolha Actions (Ações) e depois Terminate Environment (Encerrar ambiente).

  4. Use a caixa de diálogo na tela para confirmar o encerramento do ambiente.

Com o Elastic Beanstalk, é possível criar facilmente um ambiente para a aplicação a qualquer momento.

Além disso, é possível encerrar recursos do banco de dados que você criou fora do ambiente do Elastic Beanstalk. Ao encerrar uma instância de banco de dados do Amazon RDS, você poderá criar um snapshot e restaurar os dados em outra instância posteriormente.

Para encerrar sua instância de banco de dados do RDS
  1. Abra o console do Amazon RDS.

  2. Escolha Databases (Bancos de dados).

  3. Escolha a instância de banco de dados.

  4. Escolha Ações e, em seguida, escolha Excluir.

  5. Escolha se deseja criar um snapshot. Depois, escolha Excluir.

Próximas etapas

Para obter mais informações sobre o Laravel, acesse o site oficial do Laravel em laravel.com.

À medida que você desenvolva a aplicação, provavelmente vai precisar de uma maneira de gerenciar ambientes e implantá-la sem criar manualmente um arquivo .zip e carregá-la no console do Elastic Beanstalk. A interface de linha de comando do Elastic Beanstalk (EB CLI easy-to-use ) fornece comandos para criar, configurar e implantar aplicativos nos ambientes do Elastic Beanstalk a partir da linha de comando.

Neste tutorial, você usou o console do Elastic Beanstalk para configurar as opções do Composer. Para tornar essa configuração parte de origem do aplicativo, você pode usar um arquivo de configuração, como o seguinte.

exemplo .ebextensions/composer.config
option_settings: aws:elasticbeanstalk:container:php:phpini: document_root: /public

Para ter mais informações, consulte Personalização avançada de ambiente com arquivos de configuração (.ebextensions).

A execução de uma instância de banco de dados do Amazon RDS no ambiente do Elastic Beanstalk é ideal para desenvolvimento e teste, mas vincula o ciclo de vida do banco de dados ao ambiente. Para obter instruções sobre como se conectar a um banco de dados em execução fora de seu ambiente, consulte Adicionar uma instância de RDS banco de dados Amazon ao seu ambiente do PHP Elastic Beanstalk.

Por fim, se você planeja usar seu aplicativo em um ambiente de produção, configure um nome de domínio personalizado para seu ambiente e habilite HTTPS para conexões seguras.