Serviço HTTP em Go com infraestrutura containerizada, monitoramento e automação completa via Ansible.
- Visão Geral · Tech Stack
- Rodar localmente: Pré-requisitos · Obter o projeto · Docker Compose · Ansible · Verificação
- Referência: Endpoints · Monitoramento · Métricas · Testes
- Estrutura · Referências
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
O
http-server-projeto-korp:8080é interno à rede — sem porta publicada no host. Todo o tráfego da aplicação entra pelo NGINX. Apenasnginx(:80),grafana(:3000) eprometheus(:9090) expõem portas ao host.
As tecnologias abaixo (definidas pelo desafio) estão organizadas por área de atuaçã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. |
| 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. |
| 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. |
| 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. |
| 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. |
- Docker + Docker Compose
- Go 1.21+ (apenas para desenvolvimento/testes locais)
- Ansible + coleção
community.docker(para provisionamento automatizado)
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.
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-challengedocker compose up -d --buildApós subir:
curl http://localhost:80/projeto-korpPara derrubar o ambiente:
docker compose downNota: o playbook usa o módulo
apte o repositório oficial do Docker, portanto é destinado a hosts Debian/Ubuntu. Ele executa contralocalhostcombecome(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 -KO playbook executa em ordem:
- Instalação do Docker Engine e Compose plugin
- Criação da rede bridge
korp-network - Build da imagem
http-server-projeto-korp - Deploy de todos os containers via Docker Compose
- Validação do serviço com requisição HTTP e exibição da resposta
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 nginxO 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.
| 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"
}| 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é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) |
go test ./... -v.
├── 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