Skip to content

Repository files navigation

http-server-projeto-korp

Go Docker Docker Compose NGINX Prometheus Grafana Ansible

Serviço HTTP em Go com infraestrutura containerizada, monitoramento e automação completa via Ansible.

Índice

  1. Visão Geral · Tech Stack
  2. Rodar localmente: Pré-requisitos · Obter o projeto · Docker Compose · Ansible · Verificação
  3. Referência: Endpoints · Monitoramento · Métricas · Testes
  4. Estrutura · Referências

Visão Geral

O projeto implementa um servidor HTTP que expõe um endpoint REST, executa atrás de um proxy reverso NGINX, e tem observabilidade completa via Prometheus e Grafana. Todo o ambiente é provisionado com um único comando Ansible.

%%{init: {'theme':'neutral'}}%%
flowchart LR
    curl(["curl / cliente"])
    browser(["navegador"])

    subgraph net["korp-network (bridge)"]
        direction LR
        nginx["nginx<br/>:80"]
        app["http-server-projeto-korp<br/>:8080<br/>/projeto-korp · /metrics"]
        prom["prometheus<br/>:9090"]
        graf["grafana<br/>:3000"]

        nginx -->|proxy| app
        prom -.->|scrape /metrics| app
        graf -->|query| prom
    end

    curl -->|host :80| nginx
    browser -->|host :3000| graf
    browser -->|host :9090| prom

    classDef go fill:#00ADD8,stroke:#007d9c,color:#fff
    classDef ng fill:#009639,stroke:#006622,color:#fff
    classDef pr fill:#E6522C,stroke:#b23e20,color:#fff
    classDef gf fill:#F46800,stroke:#c05300,color:#fff
    classDef ext fill:#334155,stroke:#1e293b,color:#fff

    class app go
    class nginx ng
    class prom pr
    class graf gf
    class curl,browser ext

    style net fill:#f1f5f9,stroke:#94a3b8,color:#334155
Loading

O http-server-projeto-korp:8080 é interno à rede — sem porta publicada no host. Todo o tráfego da aplicação entra pelo NGINX. Apenas nginx (:80), grafana (:3000) e prometheus (:9090) expõem portas ao host.

Tech Stack

As tecnologias abaixo (definidas pelo desafio) estão organizadas por área de atuação.

Linguagem & Aplicação

Tecnologia O que é / para que serve Neste projeto
Go Linguagem compilada e tipada, com binários estáticos e concorrência nativa — comum em serviços de rede e ferramentas de infraestrutura. Implementa o servidor HTTP (/projeto-korp) e a exposição de métricas.

Containerização & Orquestração

Tecnologia O que é / para que serve Neste projeto
Docker Plataforma de containers que empacota aplicação e dependências em imagens portáveis e isoladas. Build multi-stage e execução do serviço em imagem enxuta.
Docker Compose Ferramenta para definir e rodar aplicações multi-container a partir de um arquivo YAML declarativo. Orquestra os 4 containers, a rede bridge e os volumes.

Rede & Proxy Reverso

Tecnologia O que é / para que serve Neste projeto
NGINX Servidor web e proxy reverso de alto desempenho, usado para roteamento, TLS e balanceamento de carga. Ponto de entrada na porta 80, encaminhando o tráfego para o serviço interno.

Observabilidade

Tecnologia O que é / para que serve Neste projeto
Prometheus Sistema de monitoramento e banco de séries temporais que coleta métricas via scrape (modelo pull) e consulta com PromQL. Coleta as métricas expostas pelo serviço em /metrics.
Grafana Plataforma de visualização e dashboards para métricas e logs de diversas fontes. Exibe as métricas do Prometheus em um dashboard provisionado.

Automação & Infraestrutura como Código

Tecnologia O que é / para que serve Neste projeto
Ansible Ferramenta de automação e IaC que configura sistemas de forma declarativa, idempotente e sem agente. Provisiona todo o ambiente (do Docker ao stack) com um único comando.

Pré-requisitos

Ambiente de referência: desenvolvido e validado em Linux (Ubuntu/Debian); os comandos abaixo assumem um shell Unix (bash). O caminho via Docker Compose funciona em qualquer SO com Docker; o provisionamento com Ansible é específico para Debian/Ubuntu.

Obter o projeto

Clone o repositório e acesse o diretório do projeto antes de executar os demais comandos:

git clone https://github.com/Taresu/devops-challenge.git
cd devops-challenge

Executar com Docker Compose

docker compose up -d --build

Após subir:

curl http://localhost:80/projeto-korp

Para derrubar o ambiente:

docker compose down

Provisionamento com Ansible

Nota: o playbook usa o módulo apt e o repositório oficial do Docker, portanto é destinado a hosts Debian/Ubuntu. Ele executa contra localhost com become (sudo).

Provisiona o ambiente completo do zero em um único comando (requer sudo):

# Instalar dependências Ansible
pip3 install ansible
ansible-galaxy collection install -r ansible/requirements.yml

# Provisionar
ansible-playbook ansible/playbook.yml -K

O playbook executa em ordem:

  1. Instalação do Docker Engine e Compose plugin
  2. Criação da rede bridge korp-network
  3. Build da imagem http-server-projeto-korp
  4. Deploy de todos os containers via Docker Compose
  5. Validação do serviço com requisição HTTP e exibição da resposta

Verificação

Depois de iniciar o ambiente por qualquer um dos métodos acima, verifique cada parte da stack:

# Confirma que os quatro containers estão em execução
docker compose ps

# Confirma que o NGINX encaminha requisições para a aplicação
curl http://localhost:80/projeto-korp

# Confirma que as métricas da aplicação também passam pelo NGINX
curl http://localhost:80/metrics

# Confirma que o Prometheus está coletando a aplicação (valor esperado: "1")
curl 'http://localhost:9090/api/v1/query?query=up'

# Exibe os logs dos serviços para diagnóstico
docker compose logs http-server-projeto-korp
docker compose logs nginx

O Prometheus coleta métricas a cada 15 segundos; aguarde esse intervalo caso a consulta up ainda não retorne "1". Para conferir a visualização, acesse o Grafana em http://localhost:3000 e abra Dashboards → HTTP Server Projeto Korp.

Endpoints

Método Path Descrição
GET /projeto-korp Retorna nome do projeto e horário UTC atual
GET /metrics Métricas no formato Prometheus

Exemplo de resposta — GET /projeto-korp:

{
  "nome": "Projeto Korp",
  "horario": "2026-08-06T20:57:25Z"
}

Monitoramento

Serviço Endereço Credenciais
Grafana http://localhost:3000 admin / admin
Prometheus http://localhost:9090 —

O Grafana sobe com um dashboard pré-provisionado (HTTP Server Projeto Korp) exibindo:

  • Service Status — disponibilidade do serviço (http_server_up)
  • Request Rate — taxa de requisições por segundo
  • Total Requests — volume acumulado de requisições

Métricas expostas

Métrica Tipo Descrição
http_requests_total Counter Total de requisições por path e method
http_server_up Gauge Disponibilidade do serviço (1 = online)

Testes

go test ./... -v

Estrutura do Projeto

.
├── main.go                          # Servidor HTTP e métricas
├── main_test.go                     # Testes unitários
├── go.mod / go.sum
├── Dockerfile                       # Build multi-stage
├── docker-compose.yml               # Stack completo (4 containers)
├── nginx/
│   └── http-server-projeto-korp.conf  # Config do proxy reverso
├── prometheus/
│   └── prometheus.yml               # Scrape config
├── grafana/
│   └── provisioning/
│       ├── datasources/
│       │   └── datasources.yml
│       └── dashboards/
│           ├── dashboards.yml
│           └── http-server-projeto-korp-dashboard.json
└── ansible/
    ├── requirements.yml             # Coleção community.docker
    └── playbook.yml                 # Provisionamento completo

Referências

About

Serviço HTTP em Go com proxy reverso NGINX, monitoramento Prometheus + Grafana e provisionamento Ansible

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages