Nesse projeto você irá desenvolver um ambiente de servidor web monitorado, utilizando AWS, Linux (Amazon Linux) e Nginx. Além da configuração do servidor, será implementado um sistema de monitoramento automatizado, com a geração de logs e notificações em tempo real via Discord.
✏️ O passo a passo foi separado em etapas para melhor entendimento e compreensão do projeto.
- Criar uma conta na AWS (Confira os tipos de ofertas da AWS)
- Ter uma conta no Discord
- Baixar o Visual Studio Code
- A maioria dos comandos para criação de arquivos/pastas, instalação e verificação do serviço nginx exigiram o uso do
sudo
! - Após alguns minutos de inatividade, a instância se desconecta. Basta apenas inserir a chave ssh novamente, mas cuidado para não perder as configurações realizadas
Antes de iniciar a instância, será necessária a criação da VPC (Virtual Private Cloud), que se trata de uma rede virtual isolada que permite executar recursos da AWS. Para isso:
- Realize o cadastro na Amazon AWS; entre no Console de gerenciamento da AWS
- Selecione a região de United States - N. Virginia, que foi escolhida para o projeto. Para mais informações sobre as regiões e suas zonas de disponibilidade clique aqui
- Clique na barra de pesquisa e digite ‘VPC’
- Na seção de Virtual private cloud, selecione Your VPCs. Logo em seguida, clique em Create VPC
- Em VPC settings, selecione VPC and more, para pré-visualizar as subnets públicas e privadas, a tabela de rotas e conexão de redes
- Dê um nome para a VPC
- Não altere mais nenhuma configuração padrão, navegue para baixo e clique em Create VPC
- Após a criação da VPC, as subnets, subnets públicas e privadas, a tabela de rotas e a conexão de rede, são criadas automaticamente
O Amazon Elastic Compute Cloud (Amazon EC2) oferece uma capacidade de computação escalável sob demanda na Nuvem Amazon Web Services (AWS).
-
Entre no Console de gerenciamento da AWS
-
Clique na barra de pesquisa e digite EC2
-
Em seguida, vá para Security Groups e clique em Create Security Group
-
Na seção Basic Details, dê um nome para seu security group, uma descrição e selecione a VPC que acabou de criar
-
Logo depois, na seção Inbound rules, será feita as regras de entrada da instância
- Crie duas regras de inbound em Add rule
- Em Type, na primeira regra, selecione HTTP. Para a segunda, selecione SSH
- Em Source, na primeira regra, selecione Anywhere-IPv4. Para a segunda, selecione My IP
- Adicione uma descrição para ambas as regras
- Logo depois, na seção Outbound rules, será feita as regras de saída da instância
- Crie uma regra de Outbound em Add Rule
- Em Type, selecione All trafic
- Em Destination, selecione Anywhere-IPv4
-
Agora, será possível criar a instância EC2!
- Entre no Console de gerenciamento da AWS → Clique na barra de pesquisa e digite EC2
- Vá em Instances e clique em Launch an instance
-
Crie uma tag e dê um nome a sua instância
-
Em seguida, vá para Application and OS Images (Amazon Machine Image) selecione a AMI da Amazon Linux 2023
-
Abaixo, em Instance Type e selecione t2.micro (disponível no Free Tier)
-
Em Key Pair (Login), selecione Create new key pair ao lado e cria a chave para a instância. Dê um nome, escolha RSA para Key pair type e escolha o Private key file format para .pem para ser usada com o OpenSSH
-
Em Network settings, clique em Edit e faça as seguintes configurações:
-
Na seção VPC, selecione a VPC que acabou de criar
-
Em seguida, na seção Subnet, selecione uma subnet pública (de preferência, a da zona de disponibilidade us-east-1a
-
Em Auto-assign public IP, selecione Enable
-
Logo depois em Firewall (security groups), clique em Select existing security group e selecione o security group criado anteriormente
-
-
Depois de todas as configurações necessárias, role para baixo e clique em Launch Instance. Após carregar, clique em view all instances e espere alguns minutos para que a EC2 esteja com o Status check igual ao da imagem abaixo:
-
O computador local pode ter um cliente SSH instalado por padrão. Você pode verificar isso ao inserir o comando a seguir em uma janela de terminal. Se o computador não reconhecer o comando, instale um cliente SSH.
Como a AMI do projeto é baseada em Linux, as futuras configurações de conexão e servidor serão realizadas pelo terminal do Git Bash do Visual Studio Code
- Por padrão, o terminal do VS Code é o Windows PowerShell. Para trocar para Git Bash, abra o VS Code, vá nas três barrinhas no canto superior esquerdo → clique em Terminal (ou aperte Crtl + J)
- No lado superior direito do terminal, há o tipo de terminal que está utilizando e algumas configurações. Clique na setinha para baixo e selecione Git Bash
-
Logo depois, volte para o console da AWS → vá em Instances → selecione a instância que criou anteriormente e clique em Connect
-
Em Connect to instance vá para SSH Client. Aqui contém dois comando importantes para conectar a instância via SSH no VS Code
-
No terminal do Git Bash, execute o comando com as alterações das permissões da chave da instância no tópico 3. e logo depois, o comando em Example abaixo
O Nginx (pronunciado “engine ex”) é um software para servidor web de código aberto conhecido por seu alto desempenho e baixo uso de recursos. Será utilizado para possibilitar o acesso da nossa instância pelo navegador.
-
No Amazon Linux 2023, execute o comando
sudo dnf install nginx -y
para realizar a instalação. -
Para ver a página padrão do Nginx, é preciso pegar o IP público da instância e jogá-la no barra de pesquisa do navegador, sucedido por
http://
. O IP público é localizado quando a instância é selecionada. Abaixo, mostra os detalhes da EC2 -
Selecionado o IP, está será a página default no Nginx
Antes da personalização do nosso site (da página default do Nginx), precisamos alterar algumas configurações no arquivo de configuração do Ngnix
- Vá até o diretório
/etc/nginx/
e crie uma cópia do arquivongnix.conf
sudo cp nginx.conf nginx.conf.original
- Execute o comando
sudo nano /etc/nginx/nginx.conf
cd / e faça as alterações (O código está no arquivo ngnix.conf)
A linha include /etc/nginx/conf.d/serverbru.conf corresponde ao caminho do arquivo da configuração do site
-
Navegue até o diretório
/etc/nginx/conf.d/
e crie o arquivo de configuração do siteserverbru.conf
(O código está no arquivo serverbru.conf) -
Em seguida, vá ao diretório
/var
e crie uma pasta chamadawww
→sudo mkidr www
-
Dentro da pasta
www
, crie a pasta que ficará o conteúdo da página do servidor web (Neste caso, o nome da pasta é sitebruna.com) -
Dentro da pasta sitebruna.com, crie um arquivo html. Logo após crie uma pasta chamada
css
, onde ficará o estilo da página, e nela crie um arquivo css (Os códigos estão nos arquivos index.html e na pasta css) -
Reinicie o Nginx executando
sudo systemctl restart nginx
Nesta etapa, será realizado:
- A criação do serviço systemd para garantir que o Ngnix reinicie automaticamente caso parar
- Criar um script em Bash para monitorar a disponibilidade do site e mandar notificações via Discord
-
Antes da criação do script, será necessário criar dois arquivos de log: um para o monitoramento e outro para as requisições
-
Vá até o diretório
/var/log
e crie dois arquivos:requisicoes.log
emonitoramento.log
. O primerio armazena o conteúdo da resposta HTTP recebida do endereço IP da sua máquina e o segundo registra o histórico das verificações de status do servidorsudo touch requisicoes.log monitoramento.log
-
-
Navegue até o diretório
/usr/bin/
e crie um arquivo chamadomonitoramento.sh
. Nele estará o script de monitoramento em Bash (O código está disponível em monitoramento.sh)- Na variável
webhoook
, insira a url do seu webhook do Discord. Clique aqui para mais detalhes de como criar um webhook no Discord
- Na variável
-
Se o sistema não estiver configurado no horário do Brasil, execute
timedatectl
para verificar esudo timedatectl set-timezone America/Sao_Paulo
para alterar para o nosso fuso horário. Assim, data e horário aparecerão corretos nas notificações do Discord -
Após a criação do
monitoramento.sh
, será preciso alterar as permissões para que o mesmo seja executado → executesudo chmod a+x monitoramento.sh
(a+x
adiciona a permissão de execução para todos os usuários)
-
Navegue até o diretório
/etc/systemd/system/
e crie um arquivo com o nome demonitoramento.service
(O código está presente em monitoramento.service) -
Como foi feito com monitoramento.sh,
execute sudo chmod a+x monitoramento.service
para mudar as permissões do arquivo -
Atualize todos os serviços do Nginx com
sudo systemctl daemon-reload
e inicie o monitoramento.sh comsudo systemctl start monitoramento.service
. Após inicar o serviço de monitoramento, aparecerá os alertas no Discord no canal que criou para o webhook
Execute o comando sudo systemctl stop nginx
. Automaticamente, aparecerá uma mensagem no seu webhook do Discord, notificando que o servidor está fora do ar. Após 30 segundos, graças ao systemd, o Nginx reiniciará e o site voltará normalmente
A principal função desse projeto foi consolidar os meus conhecimentos sobre AWS e Linux. As soluções implementadas, como a configuração do Nginx e a criação do script de monitoramento, resultaram em um sistema funcional, eficiente e automatizado. As dificuldades encontradas durante a implementação foram cruciais para o meu aprendizado em Cloud Computing e DevSecOps.