Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

configuration instance AWS WP #15

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 76 additions & 36 deletions README.md
Original file line number Diff line number Diff line change
@@ -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 [email protected] 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.
48 changes: 48 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -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 [email protected] --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:
77 changes: 77 additions & 0 deletions nginx/conf/default.conf
Original file line number Diff line number Diff line change
@@ -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;
}