Olá! Sejam muito bem-vindos à Alura. Meu nome é Vinícius e vou guiar vocês neste curso de Deploy de uma aplicação PHP em um ambiente de produção, utilizando a AWS.
Audiodescrição: Vinícius é um homem branco, com cabelo curto e escuro. Ele possui bigode e cavanhaque. Está vestindo uma camisa preta com a inscrição PHP.
Neste curso, se já conhecemos PHP e estamos familiarizados com detalhes de performance, escalabilidade e boas práticas, é o momento de colocar tudo isso em prática em um ambiente de produção. Este curso é para nós. Vamos pegar o código trabalhado em cursos sobre arquitetura de aplicações, escalabilidade e performance, e colocá-lo no ar em um ambiente da AWS.
Para isso, precisamos ter alguns conhecimentos. Claro, de PHP, como já mencionado, e um pouco de AWS. Não é necessário ser especialista, apenas ter certa familiaridade com os serviços mais básicos, como EC2 e RDS. Além disso, é importante ter alguma intimidade com o terminal, conseguindo rodar alguns comandos, o que já será suficiente para nos virarmos bem.
Durante o curso, serão dadas algumas dicas de outros cursos que podemos fazer para nos aprofundarmos. O que vamos aprender neste curso? Como podemos ver, temos um IP, um ambiente de produção, e uma aplicação Laravel rodando. Esta aplicação é uma API, e estamos acessando o banco de dados que também está rodando na AWS.
Nesta aula, abordaremos o acesso a um banco de dados em um ambiente de produção de uma aplicação que desenvolvemos e que está em funcionamento. Temos um servidor operando com um serviço que criamos, e avançaremos significativamente a partir disso.
Começaremos configurando este servidor com todos os elementos necessários. Após a configuração, colocaremos nossa aplicação no servidor e a ajustaremos para garantir que possua todas as informações necessárias para ser executada em um ambiente de produção, que difere do ambiente de desenvolvimento onde a executávamos anteriormente.
Em seguida, evoluiremos para utilizar o Swoole como o runtime do PHP, em vez do PHP-FPM, que é o mais comum. No final, discutiremos, embora sem prática direta, algumas formas de tornar tudo isso ainda mais profissional. Indicaremos alguns outros cursos que podem ser assistidos e temas que podem ser pesquisados.
Vamos aprender bastante e colocar a mão na massa. Caso algo não fique claro durante o processo, temos um servidor no Discord para interação e perguntas, além de um fórum para abrir dúvidas e discutir questões que possam surgir. Não hesitem em discutir, ajudar outras pessoas respondendo dúvidas e interagindo, pois isso é uma excelente forma de fixar conhecimento.
Agora, vamos encerrar esta introdução e nos encontramos no próximo vídeo, onde começaremos a explorar nosso ambiente de produção para, ao final, termos nossa aplicação PHP rodando na AWS.
Bem-vindos de volta! Vamos colocar nossa aplicação em produção. Nos cursos anteriores, otimizamos vários pontos dessa aplicação. Agora, vamos colocá-la para rodar em um servidor que simula o ambiente de produção. Como mencionado anteriormente, temos como pré-requisito deste curso a parte de AWS. Já temos uma instância EC2 criada. No entanto, se preferirem, podem utilizar outra nuvem ou até um servidor fora de ambiente de nuvem, como uma VPS que possuam. Não utilizaremos nada específico da AWS aqui.
Na aplicação que temos rodado no ambiente local, utilizamos o Nginx como balanceador de carga e proxy reverso, além de servidor web. Para rodar o PHP, adotamos duas abordagens diferentes, sendo a primeira com o PHP-FPM. Vamos instalar os softwares necessários para essa configuração, começando pelo Nginx e PHP-FPM. Vamos seguir etapa por etapa até termos nossa aplicação rodando.
Na instância já criada, antes de acessá-la, vamos revisar alguns detalhes. Ao criar essa instância, na parte de segurança, adicionamos o grupo de segurança padrão para comunicação com outros serviços da AWS, caso necessário. Também criamos um novo grupo de segurança, permitindo acesso à porta 80 para a aplicação HTTP e à porta 22 para acesso via SSH, possibilitando conexão ao terminal da máquina. Com esses detalhes ajustados, vamos nos conectar à máquina.
No resumo da instância, clicamos em conectar, selecionamos cliente SSH e encontramos o comando necessário. Lembrando que, para esse comando, precisamos ter baixado o par de chaves para a conexão. No terminal, na pasta onde está o par de chaves, executamos o comando recuperado da AWS. Após um tempo, a conexão é estabelecida. Estamos no Amazon Linux 2023, que foi a imagem utilizada para criar o sistema. Essa é uma versão recente, não há com o que se preocupar.
Vamos garantir que a máquina está zerada. Por exemplo, verificamos se temos Nginx ou PHP instalados. Caso não estejam, instalamos. Para quem utiliza Ubuntu, o comando é sudo apt install nginx
. No caso do Amazon Linux, que é baseado em Red Hat, utilizamos o instalador de pacotes YUM. Em outras distribuições, pode haver outro instalador de pacotes correspondente. Instalamos o Nginx, aceitamos as dependências e verificamos se ele está funcionando.
Executamos sudo systemctl status nginx
para verificar o status. Se estiver inativo e não habilitado, habilitamos com sudo systemctl enable nginx
e iniciamos com sudo systemctl start nginx
. Verificamos novamente o status para confirmar que o serviço está habilitado e ativo. Com tudo em ordem, acessamos novamente as informações da instância na AWS. Copiamos o endereço IPv4 público ou o DNS e, no navegador, digitamos http://
seguido do IP copiado. Com isso, conseguimos acessar a máquina sem problemas.
Agora, vamos instalar o PHP. A aplicação que desenvolvemos roda no PHP 8.1. Embora essa não seja a versão mais atual, podemos instalar qualquer versão desejada. Vamos discutir rapidamente sobre a instalação do PHP, pois existem várias abordagens.
Trabalhamos em uma empresa durante um bom tempo, onde a equipe de infraestrutura, que hoje seria chamada de SRE, instalava o PHP baixando o código-fonte da versão desejada, compilando essa versão, habilitando todas as configurações necessárias e trazendo extensões adicionais, tudo de forma manual. Esse método oferece maior controle sobre o que está sendo instalado e como o PHP está sendo configurado, mas também apresenta maior dificuldade. Para atualizar essa versão, por exemplo, é necessário baixar o código da nova versão, recompilar e instalar novamente. Essa abordagem não é tão comum, mas é uma possibilidade.
Uma alternativa mais comum, especialmente quando instalamos tudo no servidor, é utilizar um gerenciador de pacotes, como o YUM. Podemos usar o comando sudo yum install
para instalar o PHP. Cada distribuição fornece esses pacotes com nomes diferentes. É comum encontrar pacotes como php-8.1
, que é a versão que desejamos instalar. Esse pacote, chamado de metapacote, traz várias outras dependências necessárias para o PHP, como php-common
, a extensão process
, a extensão xml
, entre outras. Ele também instala dependências adicionais, chamadas de weak dependencies, como php-fpm
, a extensão mbstring
, a extensão opcache
e a extensão pdo
. Isso é ótimo, pois já traz algumas extensões necessárias.
Com o PHP instalado, ao executar php -v
, verificamos que temos o PHP 8.1.32 instalado. É uma versão relativamente recente e ainda mantida, pronta para uso. Temos o PHP instalado, mas ainda não configuramos o php-fpm
. O nginx
também está instalado, mas ainda não mexemos nas suas configurações. Temos o necessário para começar a trabalhar.
Precisaremos instalar outras extensões. Por exemplo, a extensão pdo
foi instalada. Para ver todas as extensões instaladas, podemos usar php -m
, que lista as extensões, incluindo pdo
e pdo-sqlite
. Se precisarmos nos conectar a um banco de dados MySQL, podemos tentar sudo yum install php-8.1-mysql
. Se não for encontrado, provavelmente é pdo-mysql
. Podemos procurar dessa forma. Aqui, ele é chamado de mysql-nd
. Instalamos mysql-nd
e confirmamos a instalação. Ao digitar php -m
, verificamos que pdo-mysql
está habilitado.
Ao instalar o PHP usando o gerenciador de pacotes da distribuição, ganhamos a possibilidade de instalar extensões dessa forma. Se instalarmos o PHP compilando manualmente, as extensões do próprio PHP precisam ser habilitadas na hora da compilação, usando parâmetros como --enable-pdo
e --enable-mysql
. Algumas extensões precisam ser instaladas após o PHP já estar instalado. Com o gerenciador de pacotes, temos a facilidade de não precisar consultar a documentação constantemente, pois a distribuição já fornece pacotes que instalam e configuram as extensões para nós.
Agora, temos o PHP teoricamente pronto para rodar a aplicação. Vamos configurá-lo posteriormente. Instalamos o nginx
, que é nosso servidor web, e o PHP, que já possui o php-fpm
, nosso servidor de aplicação. Quanto ao servidor de banco de dados, poderíamos usar sudo yum install mysql-server
ou algo semelhante, mas não queremos instalar o banco de dados no mesmo servidor da aplicação. Vamos criar o banco de dados em outro servidor.
No próximo vídeo, revisaremos esse servidor já criado. Se estiver em outra nuvem e não souber como utilizar o serviço de banco de dados, ou estiver usando uma VPS própria, é possível instalar o MySQL no mesmo servidor. Basta instalar e garantir que ele está funcionando. No próximo vídeo, mostraremos como criar o banco de dados na AWS, utilizando o RDS. Até a próxima.
Bem-vindos de volta. Com nosso servidor web em funcionamento e o servidor de aplicação pronto para configuração, falta apenas um ponto: nosso servidor de banco de dados. Criamos uma instância do RDS, que é o Serviço de Banco de Dados Relacional da Amazon. Já existem cursos sobre RDS na Alura, inclusive no curso de S2, onde já discutimos sobre RDS. Há bastante material disponível sobre isso.
Basicamente, o RDS é um serviço que permite criar bancos de dados. Já criamos uma instância do banco de dados utilizando o mecanismo do MySQL Community, com uma instância que se encaixa no plano gratuito. Não fizemos nada específico nesta instância. Com ela configurada, temos acesso ao seu endpoint. Esse endpoint é, basicamente, o endereço que configuraremos em nossa aplicação para acessar o banco de dados. Ele já está operando na porta 3306.
Um detalhe muito importante é que, na parte de segurança, temos um grupo de segurança padrão. Na instância do S2, também temos esse grupo de segurança padrão. Isso é importante porque, de alguma forma, precisamos garantir que a máquina S2 consiga se comunicar com a instância do RDS. Esse acesso na rede precisa ser liberado de alguma forma, e a maneira mais simples é colocando ambos dentro desse grupo de segurança padrão. Poderíamos usar outro grupo de segurança criado especificamente para isso. É possível criar outro grupo de segurança para permitir acesso ao banco de dados de qualquer endereço.
No nosso caso, definimos que o acesso à instância do RDS não é público. Não é possível acessar o banco de dados de qualquer lugar; o acesso deve ser feito de dentro da plataforma AWS. Conforme configuramos, o acesso é restrito à AWS.
Como nossa aplicação estará rodando dentro da AWS, conseguiremos nos conectar a ela sem problemas. Para realizar um teste rápido, não é necessário que todos façam isso, então não mostraremos o processo completo. Instalamos um cliente de MySQL, que nos permite executar o seguinte comando. Vamos verificar se já o temos disponível. Sim, já está instalado. Executaremos o MySQL informando o usuário, que foi escolhido durante a criação do banco, e utilizamos o usuário Alura. Precisamos informar que será necessário digitar uma senha. O host, ou endereço para esse banco de dados, é o endpoint que vimos no RDS, aquele nome extenso. O nome do banco de dados é escalabilidade
, o mesmo que utilizamos anteriormente. Ao pressionar Enter, será solicitada a senha. A senha utilizada foi a que criamos para esse banco de dados, sem Alura. Ao pressionar Enter novamente, conseguimos nos conectar ao banco de dados.
Mais uma vez, não é necessário que todos façam isso. Por padrão, esse cliente MySQL não estará instalado. Estamos apenas demonstrando que é possível estabelecer a conexão. Mostramos que há uma ligação entre essas duas instâncias. Do nosso EC2, conseguimos nos conectar ao nosso RDS. Assim, da máquina onde a aplicação está rodando, conseguimos nos conectar à máquina onde o banco de dados está rodando.
Mas por que não precisamos fazer isso manualmente? Porque nossa aplicação fará essa conexão. Na próxima aula, colocaremos efetivamente nossa aplicação em funcionamento. Já temos um banco de dados. Se executarmos um SHOW TABLES
, por exemplo, conseguimos rodar queries aqui. Nossa aplicação já está em funcionamento, assim como nosso servidor web. O que falta agora é colocar nossa aplicação no servidor, configurar o PHP-FPM para rodar e fazer com que o Nginx redirecione as requisições para o PHP-FPM. Tudo que tínhamos no ambiente local será configurado no ambiente de produção. Para isso, esperamos vocês na próxima aula.
O curso Arquitetura com PHP: fazendo o deploy de um aplicação possui 87 minutos de vídeos, em um total de 39 atividades. Gostou? Conheça nossos outros cursos de PHP em Programação, ou leia nossos artigos de Programação.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.