https://github.com/carolinasfreitas/atividade2-docker
Repositório para a segunda atividade do Programa de Bolsas da Compass UOL
https://github.com/carolinasfreitas/atividade2-docker
aws cloud docker docker-compose shellscript
Last synced: 3 months ago
JSON representation
Repositório para a segunda atividade do Programa de Bolsas da Compass UOL
- Host: GitHub
- URL: https://github.com/carolinasfreitas/atividade2-docker
- Owner: CarolinaSFreitas
- Created: 2023-07-05T17:27:48.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2023-07-07T17:12:11.000Z (about 3 years ago)
- Last Synced: 2025-03-04T10:13:39.806Z (over 1 year ago)
- Topics: aws, cloud, docker, docker-compose, shellscript
- Language: Shell
- Homepage:
- Size: 1.18 MB
- Stars: 2
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 🖥️ Atividade 2 do PB da Compass UOL
##
### 👥 Integrantes do Grupo 2
- Carolina Freitas
- Gabriel Matiolla
- Gabriel Torino
### 📝 Sobre a Atividade
1. Instalação e configuração do DOCKER ou CONTAINERD no host EC2.
* Ponto adicional para o trabalho que utilizar a instalação via script de Start Instance (user_data.sh)
2. Efetuar Deploy de uma aplicação Wordpress com:
* Container de aplicação
* RDS database MySQL
3. Configuração da utilização do serviço EFS AWS para estáticos do container de aplicação WordPress
4. Configuração do serviço de Load Balancer AWS para a aplicação Wordpress
Arquitetura
## 🔐 Security Groups - Criação
Antes de iniciarmos a criação da EC2, do RDS e do EFS, devemos criar os Security Groups para cada um no console AWS.
+ O SG da EC2 deve conter as seguintes Inbound Rules:
| Type | Protocol | Port Range | Source Type | Source |
|--------------|----------|------------|-------------|-------------|
| SSH | TCP | 22 | Anywhere | 0.0.0.0/0 |
| HTTP | TCP | 80 | Anywhere | 0.0.0.0/0 |
Security Group para a EC2
##
+ O SG do RDS deve conter a seguinte Inbound Rule:
| Type | Protocol | Port Range | Source Type | Source |
|--------------|----------|------------|-------------|-------------|
| MYSQL/Aurora | TCP | 3306 | Anywhere | 0.0.0.0/0 |
Security Group para o RDS
##
+ O SG do EFS deve conter a seguinte Inbound Rule:
| Type | Protocol | Port Range | Source Type | Source |
|--------------|----------|------------|-------------|-------------|
| NFS | TCP | 2049 | Anywhere | 0.0.0.0/0 |
Security Group para o EFS
##
## ☁️ EC2 - Criando a instância
Abra o menu de criação de EC2 no seu console AWS e vá em Launch Instance, feito isso siga os passos de criação da sua EC2 (nome, KeyPair, tipo, sistema operacional, storage) e selecione o Security Group criado para a EC2.
### 📄 User data
No fim das etapas de criação da EC2 terá um campo para você inserir o User data, coloque o seguinte shellscript:
```
#!/bin/bash
sudo yum update -y
sudo yum install docker -y
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker ec2-user
sudo chkconfig docker on
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo mv /usr/local/bin/docker-compose /bin/docker-compose
sudo yum install nfs-utils -y
sudo mkdir /mnt/efs/
sudo chmod +rwx /mnt/efs/
```
Esse shellscript (user_data.sh) nos auxiliará em:
+ Atualização do sistema operacional
+ Instalação do Docker e do Docker Compose
+ Configuração de permissões
+ Preparação do ambiente para trabalhar com um sistema de arquivos NFS que armazenará os arquivos do WordPress
Com todos esses passos feitos, basta criar sua instância EC2.
## 🎲 RDS - Criando o Amazon Relational Database Service
O RDS armazenará os arquivos do container de WordPress, então antes de partirmos para o acesso na EC2, devemos criar o banco de dados corretamente.
+ Busque pelo serviço de RDS no console AWS e vá em "Create database"
+ Escolha o Engine type como MySQL
+ Em "Templates" selecione a opção "Free Tier"
+ Dê um nome para a sua instância RDS
+ **Escolha suas credenciais do banco de dados e guarde essas informações (Master username e Master password), pois são informações necessárias para a criação do container de WordPress**
+ Na etapa de "Connectivity", escolha o Security Group criado especialmente para o RDS, selecione a mesma AZ que sua EC2 criada está e em "Public access" escolha a opção de sim.
+ **Ao fim da criação do RDS, haverá uma etapa chamada "Additional configuration" e nela existe um campo chamado "Initial database name", esse nome também será necessário na criação do container de WordPress**
+ Vá em "Create Database"
Banco de Dados Criado
## 📂 EFS - Criando o Amazon Elastic File System
O EFS armazenará os arquivos estáticos do WordPress. Portanto, para criá-lo corretamente e, em seguida, fazer a montagem no terminal, devemos seguir os seguintes passos:
+ Busque pelo serviço EFS ainda no console AWS e vá em "Create file system"
+ Na janela que se abre, escolha o nome do seu volume EFS
+ Na lista de "File systems" clique no nome do seu EFS e vá na seção "Network". Nessa parte vá no botão "Manage" e altere o SG para o que criamos no início especificamente para o EFS
Seção de Network do EFS
Janela de Mount targets do EFS
## 🗝️ Acessando a EC2 e fazendo configurações
Para fazermos as configurações necessárias na instância EC2 via terminal, devemos seguir os seguintes passos:
1. Confirme que o Docker e o Docker Compose foram instalados com sucessos usando os comandos `` docker ps `` e `` docker-compose --version ``. Apesar desses comandos estarem no shellscript, é sempre bom verificar que as ferramentas estão instaladas corretamente.
2. O "nfs-utils" também foi instalado durante a inicialização da EC2 através do shellscript de user data, junto a isso foi criado também o caminho para a montagem do seu volume EFS (/mnt/efs/) com as permissões de rwx (leitura, escrita e execução).
Esse caminho é muito importante e você pode conferir se ele foi criado com sucesso indo até ele com o comando `` cd /mnt/efs/ ``. Com essa confirmação, agora você deve ir novamente no seu console AWS, acessar o serviço de EFS e seguir os seguintes passos:
+ Selecione o seu volume EFS e clique em "Attach" para atachar o volume na sua EC2
+ Na janela aberta selecione "Mount via DNS" e copie o comando de montagem usando o NFS client e cole no terminal da EC2:
Janela de Attach do EFS
**Não se esqueça de alterar o caminho no final do comando para /mnt/efs/**
+ Para confirmar a montagem do EFS execute `` df -h ``
Saída do comando df -h
3. Para automatizar a montagem do volume EFS na sua instância EC2 faça o seguinte:
+ Edite o "fstab" com o comando `` nano /etc/fstab ``
+ Não exclua a linha que está no arquivo, apenas adicione: `` fs-0e220829bf4606496.efs.us-east-1.amazonaws.com:/ /mnt/efs nfs4 defaults,_netdev,rw 0 0 ``, mas não se esqueça de alterar o DNS name para o do seu EFS
Arquivo fstab
+ Feito isso, salve o arquivo e executa os comandos `` sudo umount /mnt/efs `` e depois `` sudo mount -a `` no terminal
+ Para confirmar novamente a montagem do EFS execute `` df -h ``
## 📄 Docker Compose - Criação do docker-compose.yml
Para subirmos o container do WordPress devemos criar um arquivo .yml/.yaml com as seguintes instruções:
1. Execute o comando `` nano docker-compose.yml `` e adicione:
```
version: '3.3'
services:
wordpress:
image: wordpress:latest
volumes:
- /mnt/efs/wordpress:/var/www/html
ports:
- 80:80
restart: always
environment:
WORDPRESS_DB_HOST: endpoint do seu RDS
WORDPRESS_DB_USER: seu master username (ex: admin)
WORDPRESS_DB_PASSWORD: sua master password
WORDPRESS_DB_NAME: nome do banco de dados (não o da instância RDS)
WORDPRESS_TABLE_CONFIG: wp_
```
2. Dessa forma o arquivo YAML está pronto para inicializar o container de WordPress, então execute o comando: `` docker-compose up -d `` e depois use o comando `` docker ps `` para mostrar o container inicializado.
Subindo o container com o 'docker-compose up -d'
3. Para confirmar o armazenamento no EFS dos arquivos do WordPress gerados pelo Compose vá até o "/mnt/efs/":
Arquivos do WP armazenados no EFS
4. Se quiser confirmar o RDS no container WordPress execute o container e acesse o MySQL com os seguintes passos:
+ `` docker exec -it /bin/bash ``
+ Dentro do container WordPress execute: ``apt-get update`` e depois `` apt-get install default-mysql-client -y ``.
+ Agora use o comando: `` mysql -h -P 3306 -u admin -p `` para entrar no banco de dados MySQL com as mesmas credenciais do seu RDS.
Banco de Dados MySQL
## ⚖️ ELB - Criando o Elastic Load Balancer
Para fazer a criação do LB devemos buscar pelo serviço de Load Balancer no console AWS, clicar no botão de "Create Load Balancer" e seguir os seguintes passos:
+ Escolha o tipo **"Application Load Balancer"**
Seleção do Tipo de Load Balancer
+ Nomeie o seu ALB e na seção de Listeners configure para porta 80, protocolo HTTP. Abaixo você precisa selecionar pelo menos 2 AZs para garantir a disponibilidade da sua aplicação.
Configurações do Application Load Balancer
+ Na etapa de Security Group, crie um SG com o tipo HTTP e a porta 80.
Security Group do Application Load Balancer
+ Na janela de Target Groups você deve configurar o roteamento, escolha o nome do Target Group e defina o tipo, a porta, protocolo e os Health checks
Configuração de Target Groups
Configuração dos Health checks
+ Na seguinte etapa você deve escolher a instância EC2 que está como host do seu container WordPress para ser o destino do ALB:
Seleção de Instância
+ Revise as suas configurações do ALB e clique em "Create". Com isso feito espere seu ALB ficar com o status de "Active" para prosseguir.
+ Vá no menu lateral esquerdo do console AWS e entre em "Target Groups" na seção do Load Balancer, se sua instância EC2 não estiver aparecendo na tela de "Registered targets" clique para registrar.
+ Na nova janela selecione sua EC2 host do WP e vá em "Include Pending Below", feito isso você notará que na parte de baixo estará mostrando qual EC2 foi selecionada e o status de Health como "pending". Feita essa seleção, clique em "Register pending Targets" e "Continue".
Target Group
+ Para garantir a disponibilidade da sua aplicação, não esqueça de criar um clone da sua EC2 host do WordPress para que ela seja usada como segunda opção no Load Balancer na outra AZ.
+ Assim você já pode acessar o serviço WordPress através do DNS do Load Balancer
DNS Name do Load Balancer
### 🔗 Referências:
- Deploy WordPress with Amazon RDS: https://aws.amazon.com/pt/getting-started/hands-on/deploy-wordpress-with-amazon-rds/module-one/
- WordPress | Docker Official Images: https://hub.docker.com/_/wordpress
- Amazon EC2 Masterclass (Auto Scaling & Load Balancer): https://udemy.com/course/aws-ec2-masterclass/
- Deploy Dockerized WordPress with AWS RDS & AWS EFS: https://www.alphabold.com/deploy-dockerized-wordpress-with-aws-rds-aws-efs/
##