Giter VIP home page Giter VIP logo

desafio-devops-versao-final's Introduction

Teste Prático para a função de DevOps

Objetivo:

O objetivo deste teste prático é expor os meus conhecimentos em Docker, Nginx, AWS, PHP-FPM, MySQL e GitHub. Nesse desafio, estarei configurando um ambiente básico de desenvolvimento e implantação de um aplicativo PHP usando as tecnologias mencionadas.


Tarefas:

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 e sudo 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:
  • Inserir no terminal da instância EC2: aws ecr get-login-password --region us-east-2 | docker login --username AWS --password-stdin 533267002509.dkr.ecr.us-east-2.amazonaws.com
  • E fazer a anexação das imagens, usando docker tag: docker tag scidesafio-repo:latest 533267002509.dkr.ecr.us-east-2.amazonaws.com/scidesafio-repo:latest
  • Por fim, o docker push: docker push 533267002509.dkr.ecr.us-east-2.amazonaws.com/scidesafio-repo:latest
  • - Finalmente, aplicamos o Load Balancer. Siga o passo a passo:
  • No Gerenciador do AWS, busque por EC2;
  • No painel lateral esquerdo, busque por “Load Balancers” e clique nele;
  • Em seguida, clique em “Create” no Application Load Balancer;
  • Insira o nome do Load Balancer e faça as devidas configurações, no Networking Mapping e Security Groups (todos foram padrões do projeto). Em Listeners and Routing, a porta deve permanecer padrão 80. Em Advanced Health Checking, diminua o Healthing Thredshold para 2;
  • Por fim, clique em Next até chegar em Create Load Balancer.
    • 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.
  • No Gerenciador da AWS, digite ECS;
  • Nesta tela, clique em Task Definitions, no painel lateral esquerdo;
  • Na nova janela, clique em Create a new task definition;
  • Em Task definition configuration, inserir o nome da Task Definition Family;
  • Dê um nome para o Container-1 e insira o repositório criado anteriormente no Elastic Container Registry. Lembre-se de deixar a porta padrão como 80 (HTTP). Clique em Next;
  • Na próxima página, você deverá definir o ambiente. Nesse caso, marque AWS Fargate e AWS EC2 instances. Para os Tarks roles, será necessário retornar ao IAM, clicar em Roles. Na nova página, deve-se digitar no campo de busca “container”, e aparecerá a opção “Elastic Container Service”. Em seguida, marque a opção Elastic Container Service Task. Clique em Next, e então digite “AMAZONECSTASK” e assinale a opção “AmazonECSTaskExecutionRolePolicy”. Clique em Next novamente e dê um nome para Role.
  • Volte para a aba do ECS, e escolha a Task Role recém-criada em “Task Execution Role”;
  • Role até o final da página e clique em criate;
  • Pronto, agora será necessário criar um Cluster;
  • Basta clicar em Create Cluster e deixar as configurações padrões;
  • Após criar o Cluster, vá em Create Service. A maioria das configurações aqui são padrões, a única coisa que deve ser alterado é o “Desired Tasks”, que deve ser 2. Insira os nomes dos security groups e insira o Load Balancer criado anteriormente para este projeto;
  • Clique em Create. Pronto, os task service foram concluídos;

  • Recommend Projects

    • React photo React

      A declarative, efficient, and flexible JavaScript library for building user interfaces.

    • Vue.js photo Vue.js

      🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

    • Typescript photo Typescript

      TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

    • TensorFlow photo TensorFlow

      An Open Source Machine Learning Framework for Everyone

    • Django photo Django

      The Web framework for perfectionists with deadlines.

    • D3 photo D3

      Bring data to life with SVG, Canvas and HTML. 📊📈🎉

    Recommend Topics

    • javascript

      JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

    • web

      Some thing interesting about web. New door for the world.

    • server

      A server is a program made to process requests and deliver data to clients.

    • Machine learning

      Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

    • Game

      Some thing interesting about game, make everyone happy.

    Recommend Org

    • Facebook photo Facebook

      We are working to build community through open source technology. NB: members must have two-factor auth.

    • Microsoft photo Microsoft

      Open source projects and samples from Microsoft.

    • Google photo Google

      Google ❤️ Open Source for everyone.

    • D3 photo D3

      Data-Driven Documents codes.