/dev/null sudo apt-get update # To install the latest version, run: $ sudo apt-get install docker-ce docker-ce-cl"> /dev/null sudo apt-get update # To install the latest version, run: $ sudo apt-get install docker-ce docker-ce-cl"> /dev/null sudo apt-get update # To install the latest version, run: $ sudo apt-get install docker-ce docker-ce-cl">
# Como Instalar o MultiPass?
Acesse este Site: <https://multipass.run/docs/install-multipass>

# Criar a Virtual Machine da Aplicação Docker - DNS - HTTPS - SSL
multipass launch --name virtual-docker --cpus 2 --mem 4G --disk 10G

# Instalar Docker e Docker Compose
Acessar este Site: <https://docs.docker.com/engine/install/ubuntu/>

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \\
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] <https://download.docker.com/linux/ubuntu> \\
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \\
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

# To install the latest version, run:
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Instale o docker-compose:
sudo apt  install docker-compose

# Mude as Permissões do Docker:
$ sudo usermod -aG docker ubuntu

# Saia do MulitPass e Entre Novamente para Registrar a Alteração
$ exit
$ multipass shell virtual-docker

# Teste o Docker
$ sudo docker run hello-world

# Clone o repositório do g-prod dentro da Máquina Virtual
$ git clone <https://github.com/lucasgfaj/g-prod.git>

# Entre no diretório
 cd /g-prod

# Execute o docker-compose.yml - A flag -d é para rodar em segundo plano
# Build da Aplicação Container
$ docker-compose build --no-cache
# Subir Container
$ docker-compose up -d

# Criar Certificado SSL

# Gerando dhparam.pem:
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

# Instalar easy-rsa:
$ sudo apt-get install easy-rsa

# Criar Diretório Certificadora e Certificado em Home
$ mkdir /home/ubuntu/certificadora
$ mkdir /home/ubuntu/certificado

# Copiar a Pasta para Diretórios:
$ cp -R /usr/share/easy-rsa/ /home/ubuntu/certificado
$ cp -R /usr/share/easy-rsa/ /home/ubuntu/certificadora

# Mudar Usuário e Grupo 
$ sudo chown ubuntu:ubuntu home/ubunut/certificado/easy-rsa
$ sudo chown ubuntu:ubuntu home/ubunut/certificadora/easy-rsa

# Acessar Certificadora Easy-RSA
$ cd /home/ubuntu/certificadora/easy-rsa

# Mover Vars:
$ sudo mv vars.example vars

# Acessar Vars e Editar e Desconmentar e Atualizar:
$ sudo nano vars

# Editar e Tirar Comentários '#'
 
set_var EASYRSA_DN      "org"

set_var EASYRSA_REQ_COUNTRY     "US"
set_var EASYRSA_REQ_PROVINCE    "California"
set_var EASYRSA_REQ_CITY        "San Francisco"
set_var EASYRSA_REQ_ORG         "CAMADA SA"
set_var EASYRSA_REQ_EMAIL       "[email protected]"
set_var EASYRSA_REQ_OU          "CAMADA SA"

# Criar Arquivos dentro de easyrsa:
$ ./easyrsa init-pki
# Neste irá pedir um senha, adicione uma senha e repita novamente e também anote ela!
$ ./easyrsa build-ca

# Seguir esse Script de Passos:
Country Name (2 letter code) [US]:
State or Province Name (full name) [California]:
Locality Name (eg, city) [San Francisco]:
Organization Name (eg, company) [CAMADA SA]:
Organizational Unit Name (eg, section) [CAMADA SA]:
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:camada.net
Email Address [[email protected]]:
Serial-number (eg, device serial-number) []:

# Copiando CA.CRT para Desktop:

# 1. Primeiro, verifique se você tem uma chave SSH configurada na sua máquina local:
 $ ls -l ~/.ssh/id_rsa.pub
   
# Se não existir, você precisa criar uma: 
 $ ssh-keygen -t rsa

#2. Envia CMD para MultiPass:
 $ multipass exec virtual-docker -- bash -c "mkdir -p ~/.ssh && echo '$(cat ~/.ssh/id_rsa.pub)' >> ~/.ssh/authorized_keys"

#3. Envia o Arquivo para Seu Desktop:
	scp -i ~/.ssh/id_rsa [email protected]:/home/ubuntu/certificadora/easy-rsa/pki/ca.crt  /home/fajardo/Downloads
	
#4. Importa Certificado para Navegador - Firefox:
Configuration > Certificates > Import 

# Acessar Certificadora Easy-RSA
$ cd /home/ubuntu/certificado/easy-rsa

# Mover Vars:
$ sudo mv vars.example vars

# Acessar Vars e Editar e Desconmentar e Atualizar:
$ sudo nano vars

# Editar e Tirar Comentários '#'

set_var EASYRSA_DN      "org"

set_var EASYRSA_REQ_COUNTRY     "BR"
set_var EASYRSA_REQ_PROVINCE    "PR"
set_var EASYRSA_REQ_CITY        "Guarapuava"
set_var EASYRSA_REQ_ORG         "g-prod"
set_var EASYRSA_REQ_EMAIL       "[email protected]"
set_var EASYRSA_REQ_OU          "g-prod"

# Criar Arquivos dentro de /easyrsa:
$ ./easyrsa init-pki
$ ./easyrsa gen-req g-prod nopass

# Seguir esse Script de Passos:
Country Name (2 letter code) [BR]:
State or Province Name (full name) [PR]:
Locality Name (eg, city) [Guarapuava]:
	Organization Name (eg, company) [g-prod]:
Organizational Unit Name (eg, section) [g-prod]:
Common Name (eg: your user, host, or server name) [g-prod]:*.g-prod.com.br
Email Address [[email protected]]:

# Verificar Certificado:
openssl req -in pki/reqs/g-prod.req -text

# Assinando Autoridade Certificadora:

# Mova o Req do G-PROD para a Cetificadora
cp /home/ubuntu/certificado/easy-rsa/pki/reqs/g-prod.req /home/ubuntu/certificadora/easy-rsa/pki/reqs/

# Acesse o easy-rsa de certificora
cd /home/ubuntu/certificadora/easy-rsa

# Gerar Certificado - Aqui você irá usar aquela senha que pedida no ca.crt
./easyrsa sign-req server g-prod

# Mover Certificado .CRT e .KEY para /etc/ssl/certs/ e /etc/ssl/private:
$ sudo cp /home/ubuntu/certificadora/easy-rsa/pki/issued/g-prod.crt /etc/ssl/certs
$ sudo cp /home/ubuntu/certificado/easy-rsa/pki/private/g-prod.key /etc/ssl/private

# Configurando DNS para Acesso www.g-prod.com.br

# Instalar bind9
$ sudo apt-get install bind9

# Verificar Porta Esperando DNS:
$ ss -upanl

# Editar Arquivo named.conf.options:
$ sudo nano /etc/bind/named.conf.options

# Editar Texto
dnssec-validation no;
allow-query {  10.200.215.0/24; 127.0.0.0/8; }; #IP da sua linha de VMS
listen-on-v6 {};

# Reiniciar serviço bind9:
$ sudo systemctl restart bind9

# Testar Comunicação:
$ dig @localhost localhost A

# Adicionar Comunicação Local: Editar Conforme Nome da Sua VM e IP
$ sudo nano /etc/bind/named.conf.local

zone "g-prod.com.br" IN {
        type master;
        file "db.g-prod.com.br";
};

$ sudo nano /var/cache/bind/db.g-prod.com.br

	$ORIGIN g-prod.com.br.
	$TTL 300;
	
	@ IN SOA virtual-docker lucasfajardo.alunos.utfpr.edu.br (1 30 30 30 30);
	@ IN NS virtual-docker
	virtual-docker IN A 10.200.215.129
	@ IN A 10.200.215.129
	www IN CNAME @

# Restart Bind9:
$ sudo systemctl restart bind9
$ sudo systemctl status bind9

# Editar No Micro-Cliente:
$ sudo nano /etc/resolv.conf

nameserver 10.200.215.129 # IP de Sua VM

# Adicionando NGINX para Requisições HTTP / HTTPS:

# Instalar NGINX:

 $ sudo apt install nginx -y
 $ sudo systemctl start nginx
 $ sudo systemctl enable nginx
 
# Configurar NGINX para a aplicação:
$ sudo nano /etc/nginx/sites-available/g-prod.com.br

# Adicionar Script para Receber as Requisições já incluso HTTPS
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name g-prod.com.br www.g-prod.com.br;

    # SSL Configurações
    ssl_certificate /etc/ssl/certs/g-prod.crt;
    ssl_certificate_key /etc/ssl/private/g-prod.key;
   # ssl_dhparam /etc/ssl/certs/dhparam.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";

   # access_log /home/ubuntu/logs/nginx_access.log;
   # error_log /home/ubuntu/logs/nginx_error.log;  
   # root /home/ubuntu/g-prod/public;
   # Root da Minha Aplicação
    root /var/www/g-prod/public;

   # Configurar o proxy para Pruma
    location / {
        proxy_pass <http://0.0.0.0:3000>;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
}

 
    # Config NGINX
    error_page 500 502 503 504 /500.html;
    client_max_body_size 4G;
    keepalive_timeout 10;

    access_log /var/www/logs/nginx_access.log;
    error_log /var/www/logs/nginx_error.log;
}

# HTTP para HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name g-prod.com.br www.g-prod.com.br;
    return 301 https://g-prod.com.br$request_uri;
}

# Ativando a configuração: 
$ sudo ln -s /etc/nginx/sites-available/g-prod.com.br /etc/nginx/sites-enabled/

# Adicionar os Logs do NGINX:
$ sudo mkdir /var/www/logs 
$ sudo nano /var/www/logs/nginx_access.log
$ sudo nano /var/www/logs/nginx_error.log

# Testar a Configuração NGINX e Reinciar Service:
$ sudo nginx -t 
$ sudo systemctl restart nginx

# Acesso a Aplicação via HTTPS navegador Firefox:
<https://g-prod.com.br>

# Grafana 

# Atualize pacotes e instale dependências 
sudo apt update
sudo apt install -y gnupg2 curl

# Adicione a chave GPG e o repositório oficial do Grafana
curl <https://packages.grafana.com/gpg.key> | sudo apt-key add -
echo "deb <https://packages.grafana.com/oss/deb> stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

# Atualize o cache e instale o Grafana
sudo apt update
sudo apt install -y grafana

# Inicie e habilite o serviço Grafana
sudo systemctl start grafana-server
sudo systemctl enable grafana-server

# Editar Porta 3000 para 3002 e retirar
sudo nano /etc/grafana/grafana.ini
# Retirar ;
;http_port = 3000 para http_port = 3002

# Resetar Grafana
$ sudo systemctl restart grafana-server.service

# Liberar Porta
sudo ufw allow 3002/tcp
sudo ufw reload

# Acessar Grafana e Editar 
<http://10.200.215.129:3002/>

User: Admin > Password: Admin

Ir para Connection > Add New Connection

Selecionar MySQL

Paramêtros 
#Host Url:
0.0.0.0:3306
#Database Name
g_prod_development
#Username
rails_user
#Password
05092004

# Editar Conforme deseja no Painel do Grafana