From f3b325873e476a9ec445afd0b891f96af20805eb Mon Sep 17 00:00:00 2001 From: Marcel Pereira Date: Mon, 20 Jun 2022 20:22:42 -0300 Subject: [PATCH] configuration instance AWS WP --- README.md | 112 +++++++++++++++++++++++++++------------- docker-compose.yml | 48 +++++++++++++++++ nginx/conf/default.conf | 77 +++++++++++++++++++++++++++ 3 files changed, 201 insertions(+), 36 deletions(-) create mode 100644 docker-compose.yml create mode 100644 nginx/conf/default.conf diff --git a/README.md b/README.md index ab9caef..3632228 100644 --- a/README.md +++ b/README.md @@ -1,52 +1,92 @@ # Desafio DevOps Apiki. -Objetivo é criar um processo automatizado para construção de um servidor web para [WordPress](https://wordpress.org/) em sua última versão. +## Informações sobre o projeto +- Foi criado uma instância na AWS do tipo t2.micro para subir os containers do MySQL, APACHE, NGINX; -O candidato deve seguir os seguintes **Requisitos**; +## Pré Requisito +- Docker instalado na instância; +- Caso não tenha instalado o docker na instância, acesse via SSH e siga os comandos na sequencia: - - O projeto dever ser configurado na [AWS](https://aws.amazon.com/free/), crie uma conta Free. - - A máquina configurada deverar ter às portas 80, 443 e 22 abertas. - - Uso de Shell Script **Linux**. - - [Docker](https://www.docker.com/) +1 - Instalação do Docker: + sudo apt update -### Arquitertura! - - - [Nginx](https://www.nginx.com/) configurado como proxy para o Apache. - - [Apache](https://www.apache.org/) servidor para o WordPress. - - [PHP](https://php.net/) a última versão. - - [MySql](https://www.mysql.com/) Versão mínima requirida 5.7. - - [WordPress](https://wordpress.org) última versão configurada no servidor Apache. + sudo apt upgrade + + sudo apt install apt-transport-https ca-certificates curl software-properties-common - **Modelo conceitual** + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg -[![N|Solid](https://apiki.com/wp-content/uploads/2019/05/Screenshot_20190515_174205.png)](https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/) + echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ---- + sudo apt update -### Se liga! + sudo apt-cache policy docker-ce -Você também pode usar como **Diferencial**: - - - [Docker Compose](https://docs.docker.com/compose/). - - [Kubernetes](https://kubernetes.io/). - - [Ansible](https://www.ansible.com/). - - [RDS AWS](https://aws.amazon.com/pt/rds/). - - Outras tecnologias para somar no projeto. + sudo apt install docker-ce + + sudo systemctl status docker + + ### output ### + ● docker.service - Docker Application Container Engine + Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) + Active: active (running) since Wed 2022-05-04 06:43:00 UTC; 2min 28s ago + TriggeredBy: ● docker.socket + Docs: https://docs.docker.com + Main PID: 12995 (dockerd) + Tasks: 8 + Memory: 38.6M + CPU: 400ms + CGroup: /system.slice/docker.service + └─12995 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock + (Caso tenha aparecido a informação acima, siga os passos abaixo) + + sudo usermod -aG docker user_logado_na_instacia + + docker info + + 2 - Instalação do Docker Compose + sudo curl -L https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose + + sudo chmod +x /usr/local/bin/docker-compose + + docker-compose --version + ### Output ### + Docker Compose version v2.5.0 + + Após a instalação, + +# Acessando a instância na AWS (SSH) +- Foi enviado o .ppk via email para que seja efetuado acesso. Lembrando que u user para acesso é o padrão (ubuntu) ---- +# Subindo os serviços +- Após ser criada a instância na AWS, crie uma pasta (ex.: wp), insira o arquivo docker-compose.yml dentro da pasta; +- Crie uma outra pasta chamada nginx, e outra dentro dela chamada conf, insira o arquivo default.conf (importante, o arquivo default.conf deve ficar dentro da pasta conf), altere o nome do host para o end de usa instância que estará em DNS IPv4 público; +- Volte para a pasta dentro da pasta wp (caso seja esse o nome que tenha inserido na pasta), e rode o seguinte comando para subir os containers: + - Para acompanhar o log de instalação e dos serviços: + - docker-compose up + - Para rodar em modo daemon (para poder acessar os containers rode esse) + - docker-compose up -d -### Entrega +- Criando o Banco de Dados: + - Após subir os containers, siga os passos abaixo: + - Partindo do princípio que tenha rodado o docker-componse em modo daemon rode o comanado: + + - sudo docker exec --interactive -t db /bin/bash (Caso não identifique o comando sudo remova do inicio do comando) -1. Efetue o fork deste repositório e crie um branch com o seu nome e sobrenome. (exemplo: fulano-dasilva) -2. Após finalizar o desafio, crie um Pull Request. -3. Aguarde algum contribuidor realizar o code review. -4. Deverá conter a documentação para instalação e configuração README.md. -5. Enviar para o email wphost@apiki.com os dados de acesso SSH com permissão root, da máquina configurada na AWS. + - Acessando o container irá cair no terminal da maquina, agora rode os comandos abaixo na sequencia: + - mysql -u root -p (irá pedir a senha que é 12345678) + - show databases; (verifique se a base wp_devops foi criada) + + - Caso não tenha sido criada rode o comando abaixo: + - create database wp_devops; + - exit + - Irá voltar para o terminal da maquina, digite exit novamente e irá voltar para o terminal da instância; + + - Agora siga os passos abaixo; ---- +- Para Testar se está acessível abra o navegador e acesse a URL que consta nas configurações da instância da AWS. na opção de DNS IPv4 público + - Caso esteja fazendo testes na instância que configurei, acesse http://ec2-3-86-45-198.compute-1.amazonaws.com -### Validação +- Irá aparecer a tela de configuração/instalção do WP. -* Será executado os precessos de instalação e configuração de acordo com a orientação da documentação em um servidor interno da Apiki. -* Será avaliado o processo de automação para criação do ambiente em cloud, tempo de execução e a configuração no server na AWS com os dados fornecidos pelo candidato. -* Deverar constar pelo menos 2 containers. +Em caso de dúvidas gentileza entrar em contato. \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..9f84e47 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,48 @@ +version: "3.9" +services: + wordpress: + container_name: wordpress + image: wordpress:php8.1-apache + restart: always + stdin_open: true + tty: true + environment: + WORDPRESS_DB_HOST: db + WORDPRESS_DB_USER: root + WORDPRESS_DB_PASSWORD: 12345678 + WORDPRESS_DB_NAME: wp_devops + volumes: + - wordpress_data:/var/www/html + #- ./wordpress:/var/www/html + mysql: + container_name: db + image: mysql:5.7 + restart: always + environment: + MYSQL_ROOT_PASSWORD: 12345678 + ports: + - "3306:3306" + volumes: + - db_data:/var/lib/mysql + nginx: + container_name: nginx + image: nginx:latest + restart: unless-stopped + ports: + - 80:80 + - 443:80 + volumes: + - ./nginx/conf:/etc/nginx/conf.d + - ./certbot/conf:/etc/nginx/ssl + - ./certbot/data:/var/www/html + certbot: + container_name: certbot + image: certbot/certbot:latest + command: certonly --webroot --webroot-path=/var/www/html --email mcleisson@gmail.com --agree-tos --no-eff-email -d localhost -d www.localhost + volumes: + - ./certbot/conf:/etc/letsencrypt + - ./certbot/logs:/var/log/letsencrypt + - ./certbot/data:/var/www/html +volumes: + db_data: + wordpress_data: \ No newline at end of file diff --git a/nginx/conf/default.conf b/nginx/conf/default.conf new file mode 100644 index 0000000..6a30cb7 --- /dev/null +++ b/nginx/conf/default.conf @@ -0,0 +1,77 @@ + server { + listen [::]:80; + listen 80; + + server_name ec2-3-86-45-198.compute-1.amazonaws.com; + + root /var/www/html; + index index.php; + + location ~ /.well-known/acme-challenge { + allow all; + root /var/www/html; + } + + location / { + try_files $uri @apache; + autoindex on; + autoindex_exact_size on; + } + + location ~ ^/.user.ini { + deny all; + } + + location ~* .(svg|svgz)$ { + types {} + default_type image/svg+xml; + } + + location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { + expires 1M; + } + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location @apache { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $host; + proxy_pass http://wordpress:80; + + } + + location ~[^?]*/$ { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $host; + proxy_pass http://wordpress:80; + } + + location ~ .php$ { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $host; + proxy_pass http://wordpress:80; + } + + location ~/. { + deny all; + access_log off; + log_not_found off; + } + + rewrite ^/assets/([a-z\-]+)-([a-z0-9]+).(css|js) /assets/$1.$3; +}