Skip to content

Este projeto é uma atividade prática solicitada pela equipe de estágio da Compass.UOL. O objetivo é configurar um site Wordpress em uma VPC em duas instâncias com Docker e com um banco de dados.

Notifications You must be signed in to change notification settings

iagovls/desafioDocker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 

Repository files navigation

Desafio Compass PB

My Skills

Configuração do WordPress com Docker em um VPC na AWS

🚀Objetivo do Projeto

Este projeto é uma atividade prática solicitada pela equipe de estágios da Compass.UOL. O objetivo é configurar um site WordPress através do Docker dentro de uma Virtual Private Cloud (VPC) na AWS, utilizando duas instâncias EC2 um banco de dados externo também da AWS.

Índice

  1. Criar VPC
  2. Criar os Grupos de Segurança
  3. Criar o sistema de arquivos EFS
  4. Criar banco de dados RDS
  5. Criar um modelo de execução
  6. Criar as instâncias EC2
  7. Acessar a uma instância via SSH
  8. Criar o Classic Load Balancer
  9. Criar o Auto Scaling

✒️ Layout do projeto

📃 Introdução

A arquitetura do projeto precisa conter uma VPC (Virtual Private Cloud) com uma subnet pública e uma subnet privada em uma AZ (Zona de Disponibilidade) e mais uma subnet pública e uma subnet privada em outra AZ. Cada subnet privada precisa hospedar uma instância EC2 executando uma imagem Docker do WordPress conectada a um sistema de arquivos EFS compartilhado e um banco de dados RDS para armazenamento persistente. As subnets privadas precisam estar conectadas a um NAT Gateway localizado em uma subnet pública para ter acesso à internet e com isso possibilitar acesso à internet para atualizações e dependências. As subnets públicas precisam estar conectadas a um Internet Gateaway para comunicação externa. É preciso haver também um Classic Load Balancer para gerenciar o tráfego e distribuir as requisições entre as instâncias EC2. O Classic Load Balancer precisa estar integrado a um Auto Scaling Group para adicionar e remover instâncias automaticamente conforme a demanda para garantir disponibilidade e escalabilidade do ambiente.




📝 Etapas para Implantar o Projeto

1. Criar VPC

O VPC (Virtual Private Cloud) permite criar uma rede virtual privada. Você pode definir sub-redes, configurar tabelas de roteamento, gateways de internet e outras funcionalidades de rede.

As opções não especificadas aqui, deixar em default.

Passo a passo
Opção Selecionar Explicação
Recursos a serem criados VPC e muito mais Use essa opção apenas para agilizar o processo
Geração automática da etiqueta de nome Ativar Gerar automaticamente Isso padroniza os nomes dos recursos
Número de zonas de disponibilidade (AZs) 2 Para este projeto só precisaremos de duas zonas
Número de sub-redes privadas 2 Cada sub-rede receberá uma instância
Gateways NAT (USD) Em 1 AZ Necessário para as instâncias terem acesso à internet mesmo em sub-redes privadas




2. Criar os Grupos de Segurança

Os grupos de segurança são firewalls virtuais que controlam o tráfego de entrada e saída de recursos. Eles permitem definir regras baseadas em IP, protocolos e portas.

As opções não especificadas aqui, deixar em default.

Portas Necessárias para este projeto:

  • TCP 80 (HTTP)
  • TCP 22 (SSH)
  • TCP 2049 (NFS)
  • TCP 3306 (MYSQL)

Serão necessários grupos de segurança para as Instâncias, RDS, EFS e Load Balancer.

Para este projeto será apenas necessário ajustar as regras de entrada.

Para cada grupo de segurança, selecionar o VPC deste projeto.

Passo a passo
Grupo de segurança Portas Códigos
Instâncias HTTP, SSH, NFS, MYSQL 80, 22, 2049, 3306
Sistema de arquivos EFS NFS e SSH 2049 e 22
Banco de Dados RDS MYSQL 3306
Load Balancer HTTP 80



3. Criar o sistema de arquivos EFS

O Amazon EFS (Elastic File System) é um serviço de sistema de arquivos escalável e elástico fornecido pela Amazon Web Services (AWS). Ele permite que múltiplas instâncias do Amazon EC2 (ou outros serviços) acessem simultaneamente um sistema de arquivos compartilhado, com alta disponibilidade e baixa latência.

As opções não especificadas aqui, deixar em default.

Ao iniciar a criação do EFS, selecionar Personalizar.

Para este projeto, é necessário editar apenas a etapa 2.

Escolher um nome para o sistema de arquivos é opcional.

Passo a passo
Opção Selecionar Explicação
VPC VPC criada anteriormente É necessário escolher a mesma VPC do projeto
Destinos de montagem Selecionar as duas sub-redes privadas É importante selecionar a sub-rede privada 1 para a zona 1 e a sub-rede privada 2 para a zona 2
Grupos de segurança Grupo de segurança para NFS Selecionar o mesmo grupo de segurança para as duas zonas



4. Criar banco de dados RDS

O Amazon RDS é um serviço gerenciado de banco de dados na nuvem. Ele oferece backups automatizados, alta disponibilidade e escalabilidade.

As opções não especificadas aqui, deixar em default.

Passo a passo
Opção Selecionar Explicação
Opções do mecanismo MySQL
Modelos Nível gratuito
Gerenciamento de credenciais Opcional Escolha uma senha forte ou ative Gerar senha automaticamente. Lembre-se de guardar a senha em um local seguro
Configuração da instância db.t3.micro
Grupo de segurança de VPC (firewall) Selecionar o grupo de segurança para banco de dados
Nome do banco de dados inicial Opcional Essa opção fica dentro de "Configuração adicional". Esse parâmetro será necessário para a conexão do WordPress



Obs 1: Você encontrará o comando para conectar a instância EC2 com o sistema de arquivos EFS, selecionando o seu sistema de arquivos EFS (criado anteriormente) e clicando em Anexar.

Obs 2: Você encontrará o link DNS selecionando seu banco de dados (criado anteriormente).




5. Criar um modelo de execução

As opções não especificadas aqui, deixar em default.

Esta configuração serve para agilizar a criação das instâncias EC2 e também será necessário pra a configuração do Auto Scaling Group

Passo a passo
Opção Selecionar Explicação
Nome e descrição do modelo de execução Opcional
Imagens de aplicação e de sistema operacional Amazon Linux Essa documentação está sendo baseada nesta versão do Linux
Tipo de instância t2.micro
Configuração da instância db.t3.micro
Par de chaves Caso não tenha, é necessário criar um. Essa chave é necessária para o acesso à instância via SSH. Lembre-se de guardar em um local seguro.
Sub-rede Não incluir no modelo de execução Selecionar a sub-rede adequada apenas na criação da instância EC2
Firewall (grupos de segurança) Selecionar grupo de segurança existente
Grupos de segurança Selecionar o grupo de segurança para Instâncias

Na seção Tags de recurso, utilizar as seguintes tags

Tag de recurso Valor Chave
1 Name PB - Nov 2024
2 CostCenter C092000024
3 Project PB - Nov 2024

Configurar o user-data.sh

O User-Data.sh é um script que pode ser executado automaticamente na inicialização de uma instância EC2 e assim automatizar configurações, atualizações, executar comandos entre outras funcionalidades.

Esse código é para ser anexado na seção Dados do usuário. Esta seção está localizada no final das configurações na criação da instância EC2.

#!/bin/bash

# Atualiza o sistema
sudo yum update -y

# Instala o docker
sudo yum install docker -y

# Cria o diretório para o download do Docker compose
sudo mkdir -p /usr/local/lib/docker/cli-plugins

# Download do Docker Compose
sudo curl -L https://github.com/docker/compose/releases/download/v2.30.3/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose

# Altera a permissão do docker-compose 
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose

# Inicia o Docker
sudo systemctl start docker

# Configura para o Docker ser iniciado junto com o sistema
sudo systemctl enable docker

# Cria o diretório efs 
sudo mkdir -p /efs

#  Monta um sistema de arquivos da Amazon Elastic File System (EFS) no Linux
<link para anexar o sistema de arquivos EFS>

# Cria e edita o arquivo docker-compose.yml
cat <<EOF > /home/ec2-user/docker-compose.yml

services:
  wordpress:
    image: wordpress:latest
    container_name: wordpress
    restart: always
    ports:
      - "80:80"
    environment:
      WORDPRESS_DB_HOST: "<endpoint do banco de dados>:3306"
      WORDPRESS_DB_USER: "<usuário do banco de dados>"
      WORDPRESS_DB_PASSWORD: "<senha do banco de dados>"
      WORDPRESS_DB_NAME: "<nome do banco de dados>"
    volumes:
      - /efs/wordpress:/var/www/html

EOF

cd /home/ec2-user

# Executa o arquivo docker-compose.yml
sudo docker compose up -d



6. Criar as instâncias EC2

O Amazon EC2 fornece capacidade de computação na nuvem. Ele permite criar e usar máquinas virtuais com diferentes sistemas operacionais.

As opções não especificadas aqui, deixar em default.

Selecionar a opção executar instância a partir de modelo e selecionar o modelo criado anteriormente.

Todas as configurações serão ajustadas automaticamente conforme o modelo, será necessário ajustar somente as sub-redes.

Passo a passo
Opção Selecionar Explicação
Sub-rede Selecionar a sub-rede privada Para este projeto, é necessário ter uma instância em cada sub-rede privada. Selecionar a sub-rede privada 1 para uma instância e a sub-rede privada 2 para a segunda instância.



7. Acessar a uma instância via SSH

Você pode precisar acessar às instâncias eventualmente. Considenrando que as instâncias das sub-redes privadas estão configuradas corretamente ao EFS, qualquer alteração em no diretório EFS das instâncias das sub-redes públicas terá efeito nas instâncias nas sub-redes privadas.

Passo a passo para acessar a instância na sub-rede pública via SSH.

Não é recomendado haver uma instância em uma sub-rede púbica com ip público. Estas instâncias precisam ser temporárias. Logo, encerre estas instâncias quando não precisar delas.

Passo a passo
  1. Crie uma nova instância com as mesmas configurações do tópico 5

  2. Em Configurações de rede clique em Editar.

  3. Em Sub-rede selecione uma sub-rede pública.

  4. Em Atribuir IP público automaticamente selecione Habilitar.

  5. Execute a instância.

  6. Acesse um terminal.

  7. Acesse o diretório onde está localizado a chave de acesso da instância.

  8. Execute o seguinte comando abaixo substituindo o nome da chave de acesso e o IP público da instância.

ssh -i <chaveDeAcesso>.pem ec2-user@<ipPublicoDaInstância>



8. Criar o Classic Load Balancer

O Classic Load Balancer é um serviço que distribui automaticamente o tráfego de entrada entre várias instâncias EC2 em uma ou mais zonas de disponibilidade.

As opções não especificadas aqui, deixar em default.

Passo a passo
Opção Selecionar Explicação
Nome do load balancer Opcional
VPC Selecionar a VPC deste projeto
Zonas de disponibilidade Selecionar as duas zonas de disponibilidade e uma sub-rede pública para cada zona. Selecione a sub-rede pública 1 para a zona 1 e a sub-rede pública 2 para a zona 2
Grupos de segurança Selecionar o grupo de segurança apropriado para o Load Balancer
Verificações de integridade Em Caminho de ping, colocar: /wp-admin/install.php É preciso um caminho que retorne o código 200 para o Load Balancer

Após a criação do Load Balancer, o link DNS estará disponivel.

Acesse-o pelo navegador e você deve esperar a página inicial de configuração do WordPress como na imagem abaixo.




9. Criar o Auto Scaling

O Auto Scaling ajusta automaticamente a quantidade de instâncias EC2 com base na demanda de tráfego ou desempenho.

As opções não especificadas aqui, deixar em default.

Passo a passo
Opção Selecionar Explicação
Nome do grupo do Auto Scaling Opcional
Modelo de execução Selecionar o modelo de execução criado anteriormente
VPC Selecionar o VPC deste projeto
Zonas de disponibilidade e sub-redes Selecionar as duas sub-redes públicas O Auto Scaling vai distribuir as novas instâncias entre as duas sub-redes
Balanceamento de carga Anexar a um balanceador de carga existente
Anexar a um balanceador de carga existente Escolher entre Classic Load Balancers Selecione o Classic Load Balancer criado anteriormente
Capacidade desejada 0 Inicialmente haverá apenas as duas instâncias criadas anteriormente
Capacidade mínima desejada 0 Inicialmente haverá apenas as duas instâncias criadas anteriormente
Capacidade máxima desejada Opcional Ajustar conforme a necessidade futura

Tags do Projeto

  • AWS
  • WordPress
  • Docker
  • VPC
  • Banco de Dados MySQL

🤝Agradecimentos

Obrigado Ana Soares Nunes pela parceria. Obrigado pelo auxílio, Davi Santos Cardoso da Silva e Paulo Henrique Nunes Silva.

About

Este projeto é uma atividade prática solicitada pela equipe de estágio da Compass.UOL. O objetivo é configurar um site Wordpress em uma VPC em duas instâncias com Docker e com um banco de dados.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages