1. Configuração do ambiente local usando estrutura de microsserviços:
- Instalação do Docker no ambiente local.
- Criação de um container Docker para executar um servidor web Nginx, na porta 80 (HTTP):
docker run --name nginx-container -p 80:80 -d nginx:latest
- Criação de um contêiner para o PHP-FPM para receber as requisições do Nginx na porta 9000 para os arquivos .php do projeto:
docker run --name php-fpm-container -d php:7.4-fpm
- Criação de um arquivo index.php simples que retorne o texto "Olá, mundo!":
- Salvar o arquivo como
index.php
no diretório de trabalho. - Configuração do Nginx para servir o arquivo PHP, salvando-o como nginx.conf:
- Criar um ambiente Dockerfile, baseado na imagem php:7.4-fpm, que tem como o objetivo de servir aplicações PHP em ambientes de produção:
- Criar o docker-compose.yml, com o objetivo de definir e configurar múltiplos serviços que serão executados em contêineres Docker, permitindo que se comuniquem e interajam conforme necessário:
2. Implantação no AWS: - Acessar a conta Free Tier na AWS.
- Após fazer o login na sua conta da AWS, busque por EC2 no painel de Gerenciamento da AWS digitando “EC2”. Clique nele, após encontrar.
- No console do EC2, clique em “Launch Instance”. Logo aparecerá uma janela, em que deve ser escolhido um AMI. Para esse desafio técnico, foi escolhido o Amazon Linux, com as configurações padrões de CPU, memória, subnet, tamanho, volume, etc. Não se esqueça de configurar, também, os grupos de segurança (Security), para que possam passar pela porta 80 (HTTP). Por fim, clique em “Review e Launch”.
- Selecione um par de chaves, para um acesso seguro à instância via SSH (secure shell) ou RDP. O arquivo estará com o formato “.pem”. Por fim, lance a instância clicando em “Launch Instances”.
- Para acessar a instância EC2, use o seguinte comando abaixo, usando o terminal:
ssh -i "caminho do diretório onde está localizado o arquivo “.pem”" [email protected]
Se certifique de conferir o ip nas configurações da instância. - Uma vez acessado a instância EC2 via SSH, é hora de fazer a instalação do Docker nela, usando os comandos abaixo:
sudo yum update
sudo apt-get install docker - Após a instalação do Docker, execute os seguintes comandos:
sudo docker start
esudo usermod -a -G docker ec2-user
- Existem diversas formas de implantar o repositório do teste técnico, nesse caso eu optei por usar o Git:
git clone https://github.com/niklaz4/desafio-tecnico-devops.git
- Após clonar o repositório na instância EC2, navegue até o diretório de onde está o diretório e execute o docker-compose.yml. Pronto, os arquivos foram implantados na AWS.
3. Melhorias no teste:
- Implementação de um container para o MySQL, que recebe conexões na porta 3306 e o arquivo index.php, com o objetivo de buscar algo do banco de dados.
Para criar um deploy automático no Github Actions, com o objetivo de automatizar e fazer pipelines de CI/CD no processo de implantação de código em uma ambiente de produção como a instância EC2, foi criado um workflow. - Foi configurado um load balancer na AWS para distribuir entre várias instâncias EC2 executando a aplicação em PHP. Para isso, foi necessário efetuar os seguintes passos:
- Criar um repositório no Elastic Container Registry.
- Buscar por ECR no Gerenciador do AWS;
- Clicar em Get Started;
- Em Visibility Settings, deixar como private;
- Dar um nome para o repositorio. Neste teste, chamamos de “scidesafio-repo”;
- No Gerenciador do AWS, buscar por IAM (Identity and Acess Management);
- Criar um usuário > Create Roles -> AdministratorAccess;
- Criar uma chave de acesso (Access Key), usando CLI;
- Baixar o arquivo .csv após clicar em next;
- Ir até a sua instância EC2 e digitar no terminal “aws configure”;
- No terminal, inserir as credenciais obtidas no arquivo .csv;
- Em seguida, inserir a região (us-east-1);
- No último campo, apenas dar enter e terminará o seu cadastro de usuário na instância;
- Agora que você está logado, basta seguir os passos a passo:
aws ecr get-login-password --region us-east-2 | docker login --username AWS --password-stdin 533267002509.dkr.ecr.us-east-2.amazonaws.com
docker tag scidesafio-repo:latest 533267002509.dkr.ecr.us-east-2.amazonaws.com/scidesafio-repo:latest
docker push 533267002509.dkr.ecr.us-east-2.amazonaws.com/scidesafio-repo:latest
- Usando ECS ( Elastic Container Service), foi criado alguns Task Services, com o objetivo de definir instâncias de contêineres para funcionar na aplicação.