{"id":20322448,"url":"https://github.com/carolinasfreitas/atividade2-docker","last_synced_at":"2026-04-06T08:31:40.615Z","repository":{"id":179039251,"uuid":"662695954","full_name":"CarolinaSFreitas/Atividade2-Docker","owner":"CarolinaSFreitas","description":"Repositório para a segunda atividade do Programa de Bolsas da Compass UOL","archived":false,"fork":false,"pushed_at":"2023-07-07T17:12:11.000Z","size":1236,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-04T10:13:39.806Z","etag":null,"topics":["aws","cloud","docker","docker-compose","shellscript"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CarolinaSFreitas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-05T17:27:48.000Z","updated_at":"2025-01-24T20:01:40.000Z","dependencies_parsed_at":null,"dependency_job_id":"b46afa55-745c-44a4-80e2-3d756713e57e","html_url":"https://github.com/CarolinaSFreitas/Atividade2-Docker","commit_stats":null,"previous_names":["carolinasfreitas/atividade2-docker"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/CarolinaSFreitas/Atividade2-Docker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CarolinaSFreitas%2FAtividade2-Docker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CarolinaSFreitas%2FAtividade2-Docker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CarolinaSFreitas%2FAtividade2-Docker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CarolinaSFreitas%2FAtividade2-Docker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CarolinaSFreitas","download_url":"https://codeload.github.com/CarolinaSFreitas/Atividade2-Docker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CarolinaSFreitas%2FAtividade2-Docker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31464604,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T21:22:52.476Z","status":"online","status_checked_at":"2026-04-06T02:00:07.287Z","response_time":112,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","cloud","docker","docker-compose","shellscript"],"created_at":"2024-11-14T19:22:14.724Z","updated_at":"2026-04-06T08:31:40.599Z","avatar_url":"https://github.com/CarolinaSFreitas.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🖥️ Atividade 2 do PB da Compass UOL\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/logo-compass.png\" width=\"340px\"\u003e\n\u003c/div\u003e\n\n##\n\n### 👥 Integrantes do Grupo 2\n\n- Carolina Freitas\n- Gabriel Matiolla\n- Gabriel Torino\n\n### 📝 Sobre a Atividade\n\n1. Instalação e configuração do DOCKER ou CONTAINERD no host EC2.\n  * Ponto adicional para o trabalho que utilizar a instalação via script de Start Instance (user_data.sh)\n\n2. Efetuar Deploy de uma aplicação Wordpress com: \n  * Container de aplicação\n  * RDS database MySQL\n\n3. Configuração da utilização do serviço EFS AWS para estáticos do container de aplicação WordPress\n\n4. Configuração do serviço de Load Balancer AWS para a aplicação Wordpress\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/arq.jpg\" alt=\"Arquitetura\" width=\"690px\"\u003e\n   \u003cp\u003e\u003cem\u003eArquitetura\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n\n## 🔐 Security Groups - Criação\n\nAntes de iniciarmos a criação da EC2, do RDS e do EFS, devemos criar os Security Groups para cada um no console AWS.\n\n+ O SG da EC2 deve conter as seguintes Inbound Rules:\n\n  | Type         | Protocol | Port Range | Source Type | Source      |\n  |--------------|----------|------------|-------------|-------------|\n  | SSH          | TCP      | 22         | Anywhere    | 0.0.0.0/0   |\n  | HTTP         | TCP      | 80         | Anywhere    | 0.0.0.0/0   |\n\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/ec2-sg.jpeg\" alt=\"Security Group para a EC2\" width=\"850px\"\u003e\n   \u003cp\u003e\u003cem\u003eSecurity Group para a EC2\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n##\n\n+ O SG do RDS deve conter a seguinte Inbound Rule:\n\n  | Type         | Protocol | Port Range | Source Type | Source      |\n  |--------------|----------|------------|-------------|-------------|\n  | MYSQL/Aurora | TCP      | 3306       | Anywhere    | 0.0.0.0/0   |\n\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/rds-sg.jpeg\" alt=\"Security Group para o RDS\" width=\"850px\"\u003e\n   \u003cp\u003e\u003cem\u003eSecurity Group para o RDS\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n##\n\n+ O SG do EFS deve conter a seguinte Inbound Rule:\n\n  | Type         | Protocol | Port Range | Source Type | Source      |\n  |--------------|----------|------------|-------------|-------------|\n  | NFS          | TCP      | 2049       | Anywhere    | 0.0.0.0/0   |\n\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/efs-sg.jpeg\" alt=\"Security Group para o EFS\" width=\"850px\"\u003e\n   \u003cp\u003e\u003cem\u003eSecurity Group para o EFS\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n##\n\n\n## ☁️ EC2 - Criando a instância\n\nAbra 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.\n\n### 📄 User data\n\nNo fim das etapas de criação da EC2 terá um campo para você inserir o User data, coloque o seguinte shellscript:\n\n```\n#!/bin/bash\n\nsudo yum update -y\nsudo yum install docker -y\nsudo systemctl start docker\nsudo systemctl enable docker\nsudo usermod -aG docker ec2-user\nsudo chkconfig docker on\nsudo curl -L \"https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)\" -o /usr/local/bin/docker-compose\nsudo chmod +x /usr/local/bin/docker-compose\nsudo mv /usr/local/bin/docker-compose /bin/docker-compose\nsudo yum install nfs-utils -y\nsudo mkdir /mnt/efs/\nsudo chmod +rwx /mnt/efs/\n```\n\nEsse shellscript (user_data.sh) nos auxiliará em:\n\n+ Atualização do sistema operacional\n\n+ Instalação do Docker e do Docker Compose \n\n+ Configuração de permissões\n\n+ Preparação do ambiente para trabalhar com um sistema de arquivos NFS que armazenará os arquivos do WordPress\n\nCom todos esses passos feitos, basta criar sua instância EC2.\n\n\n## 🎲 RDS - Criando o Amazon Relational Database Service\n\nO 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.\n\n+ Busque pelo serviço de RDS no console AWS e vá em \"Create database\"\n\n+ Escolha o Engine type como MySQL\n\n+ Em \"Templates\" selecione a opção \"Free Tier\"\n\n+ Dê um nome para a sua instância RDS \n\n+ **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**\n\n+ 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.\n\n+ **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**\n\n+ Vá em \"Create Database\"\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/db-rds.jpeg\" alt=\"Banco de Dados Criado\" width=\"850px\"\u003e\n   \u003cp\u003e\u003cem\u003eBanco de Dados Criado\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n\n## 📂 EFS - Criando o Amazon Elastic File System\n\nO 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:\n\n+ Busque pelo serviço EFS ainda no console AWS e vá em \"Create file system\"\n\n+ Na janela que se abre, escolha o nome do seu volume EFS\n\n+ 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\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/netw-efs.jpeg\" alt=\"Seção de Network do EFS\" width=\"795px\"\u003e\n   \u003cp\u003e\u003cem\u003eSeção de Network do EFS\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/netw2-efs.jpeg\" alt=\"Janela de Mount targets do EFS\" width=\"785px\"\u003e\n   \u003cp\u003e\u003cem\u003eJanela de Mount targets do EFS\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n\n## 🗝️ Acessando a EC2 e fazendo configurações\n\nPara fazermos as configurações necessárias na instância EC2 via terminal, devemos seguir os seguintes passos:\n\n1. 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.  \n\n2. 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). \n\nEsse 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:\n\n+ Selecione o seu volume EFS e clique em \"Attach\" para atachar o volume na sua EC2\n\n+ Na janela aberta selecione \"Mount via DNS\" e copie o comando de montagem usando o NFS client e cole no terminal da EC2: \n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/attach-efs.jpeg\" alt=\"Janela de Attach do EFS\" width=\"875px\"\u003e\n   \u003cp\u003e\u003cem\u003eJanela de Attach do EFS\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n**Não se esqueça de alterar o caminho no final do comando para /mnt/efs/**\n\n+ Para confirmar a montagem do EFS execute `` df -h `` \n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/df-h.jpeg\" alt=\"Saída do comando df -h\" width=\"835px\"\u003e\n   \u003cp\u003e\u003cem\u003eSaída do comando df -h\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n3. Para automatizar a montagem do volume EFS na sua instância EC2 faça o seguinte:\n\n+ Edite o \"fstab\" com o comando `` nano /etc/fstab ``\n\n+ 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\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/fstab.jpeg\" alt=\"Arquivo fstab\" width=\"755px\"\u003e\n   \u003cp\u003e\u003cem\u003eArquivo fstab\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n+ Feito isso, salve o arquivo e executa os comandos `` sudo umount /mnt/efs `` e depois `` sudo mount -a `` no terminal\n\n+ Para confirmar novamente a montagem do EFS execute `` df -h ``\n\n\n## 📄 Docker Compose - Criação do docker-compose.yml\n\nPara subirmos o container do WordPress devemos criar um arquivo .yml/.yaml com as seguintes instruções:\n\n1. Execute o comando `` nano docker-compose.yml `` e adicione:\n\n```\nversion: '3.3'\nservices:\n  wordpress:\n    image: wordpress:latest\n    volumes:\n      - /mnt/efs/wordpress:/var/www/html\n    ports:\n      - 80:80\n    restart: always\n    environment:\n      WORDPRESS_DB_HOST: endpoint do seu RDS\n      WORDPRESS_DB_USER: seu master username (ex: admin)\n      WORDPRESS_DB_PASSWORD: sua master password\n      WORDPRESS_DB_NAME: nome do banco de dados (não o da instância RDS)\n      WORDPRESS_TABLE_CONFIG: wp_\n```\n\n2. 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.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/docker-compose-d.jpeg\" alt=\"Subindo o container com o 'docker-compose up -d'\" width=\"800px\"\u003e\n   \u003cp\u003e\u003cem\u003eSubindo o container com o 'docker-compose up -d'\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n3. Para confirmar o armazenamento no EFS dos arquivos do WordPress gerados pelo Compose vá até o \"/mnt/efs/\":\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/efs-wp.jpeg\" alt=\"Arquivos do WP armazenados no EFS\" width=\"800px\"\u003e\n   \u003cp\u003e\u003cem\u003eArquivos do WP armazenados no EFS\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n4. Se quiser confirmar o RDS no container WordPress execute o container e acesse o MySQL com os seguintes passos:\n\n+ `` docker exec -it \u003cID_DO_CONTAINER_WORDPRESS\u003e /bin/bash `` \n\n+ Dentro do container WordPress execute: ``apt-get update`` e depois `` apt-get install default-mysql-client -y ``.\n\n+ Agora use o comando: `` mysql -h \u003cENDPOINT_DO_SEU_RDS\u003e -P 3306 -u admin -p `` para entrar no banco de dados MySQL com as mesmas credenciais do seu RDS.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/mysql.jpeg\" alt=\"Banco de Dados MySQL\" width=\"600px\"\u003e\n   \u003cp\u003e\u003cem\u003eBanco de Dados MySQL\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n\n## ⚖️ ELB - Criando o Elastic Load Balancer\n\nPara 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:\n\n+ Escolha o tipo **\"Application Load Balancer\"**\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/type-lb.jpeg\" alt=\"Tipo de Load Balancer\" width=\"710px\"\u003e\n   \u003cp\u003e\u003cem\u003eSeleção do Tipo de Load Balancer\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n+ 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.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/conf-lb.jpeg\" alt=\"Configurações do Application Load Balancer\" width=\"710px\"\u003e\n   \u003cp\u003e\u003cem\u003eConfigurações do Application Load Balancer\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n+ Na etapa de Security Group, crie um SG com o tipo HTTP e a porta 80.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/sgALB.jpeg\" alt=\"Security Group do Application Load Balancer\" width=\"710px\"\u003e\n   \u003cp\u003e\u003cem\u003eSecurity Group do Application Load Balancer\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n+ 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\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/target1.jpeg\" alt=\"Configuração de Target Groups\" width=\"710px\"\u003e\n   \u003cp\u003e\u003cem\u003eConfiguração de Target Groups\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/target2.jpeg\" alt=\"Configuração dos Health checks\" width=\"710px\"\u003e\n   \u003cp\u003e\u003cem\u003eConfiguração dos Health checks\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n+ Na seguinte etapa você deve escolher a instância EC2 que está como host do seu container WordPress para ser o destino do ALB:\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/chooseinstance.jpeg\" alt=\"Seleção de Instância\" width=\"710px\"\u003e\n   \u003cp\u003e\u003cem\u003eSeleção de Instância\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n+ 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.\n\n+ 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.\n\n+ 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\".\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/pending.jpeg\" alt=\"Target Group\" width=\"710px\"\u003e\n   \u003cp\u003e\u003cem\u003eTarget Group\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n+ 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.\n\n+ Assim você já pode acessar o serviço WordPress através do DNS do Load Balancer \n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/dns-lb.jpeg\" alt=\"DNS Name do Load Balancer\" width=\"710px\"\u003e\n   \u003cp\u003e\u003cem\u003eDNS Name do Load Balancer\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n\n### 🔗 Referências: \n\n- Deploy WordPress with Amazon RDS: https://aws.amazon.com/pt/getting-started/hands-on/deploy-wordpress-with-amazon-rds/module-one/\n- WordPress | Docker Official Images: https://hub.docker.com/_/wordpress\n- Amazon EC2 Masterclass (Auto Scaling \u0026 Load Balancer): https://udemy.com/course/aws-ec2-masterclass/\n- Deploy Dockerized WordPress with AWS RDS \u0026 AWS EFS: https://www.alphabold.com/deploy-dockerized-wordpress-with-aws-rds-aws-efs/\n\n##\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/src/logo-compass.png\" width=\"340px\"\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarolinasfreitas%2Fatividade2-docker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcarolinasfreitas%2Fatividade2-docker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarolinasfreitas%2Fatividade2-docker/lists"}