Alura > Cursos de Programação > Cursos de PHP > Conteúdos de PHP > Primeiras aulas do curso Arquitetura com PHP: fazendo o deploy de um aplicação

Arquitetura com PHP: fazendo o deploy de um aplicação

Configurando o servidor - Apresentação

Introdução ao Curso

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.

Objetivo do Curso

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.

Pré-requisitos e Conhecimentos Necessários

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.

Conteúdo do Curso

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.

Configuração e Deploy

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.

Utilização do Swoole e Considerações Finais

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.

Interação e Suporte

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.

Encerramento da Introdução

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.

Configurando o servidor - Instalando o Nginx e PHP

Introdução e Preparativos para Produção

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.

Configuração do Servidor e Instalação de Softwares

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.

Conexão e Verificação do Servidor

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.

Configuração do Nginx

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.

Instalação e Configuração do PHP

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.

Verificação e Instalação de Extensões PHP

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.

Preparação para Configuração Final

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.

Configurando o servidor - Banco de dados

Configuração do Servidor de Banco de Dados

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.

Segurança e Acesso à Instância do RDS

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.

Teste de Conexão com o Banco de Dados

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.

Conclusão e Próximos Passos

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.

Sobre o curso Arquitetura com PHP: fazendo o deploy de um aplicação

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:

Aprenda PHP acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas