Pré-requisitos:
- Docker e Docker Compose instalados
O arquivo 'compose.yml' sobre dois serviços:
- 'db' (PostgreSQL)
- 'app' (Kube News)
As variáveis de ambiente necessárias já estão definidas no 'compose.yml'.
-
Build e subida:
docker compose -f compose.yml up -d --build
-
Verificar os serviços
docker compose -f compose.yml ps docker compose -f compose.yml logs -f app
-
Acessar a aplicação:
- APP: http://localhost:8080
- Health Check: http://localhost:8080/health
- Readiness: http://localhost:8080/ready
-
Popular dados de exemplo (opcional)
- Via VS Code (extensão REST Client): abra
popula-dados.httpe clique em “Send Request”. - Via curl (Linux):
curl -X POST http://localhost:8080/api/post \
-H "Content-Type: application/json" \
--data-binary @popula-dados.http- Parar e remover os serviços
docker compose -f compose.yml down # Para remover volume do Postgres (dados serão perdidos): docker compose -f compose.yml down -v
Dicas:
- Se a porta 8080 ou 5432 já estiver em uso no host, edite os mapeamentos de porta no
compose.yml. - Em caso de conflito de nome de container, execute:
docker rm -f kubedevnews_app kubedevnews_db 2>/dev/null || true docker compose -f compose.yml up -d --build
Uma aplicação de notícias desenvolvida em NodeJS para demonstrar o uso de containers e Kubernetes.
O projeto Kube-News é uma aplicação web simples desenvolvida em Node.js, projetada como exemplo para demonstrar o uso de contêineres. É um portal de notícias que permite criar, visualizar e gerenciar artigos através de uma interface web.
- Listagem de notícias na página inicial
- Criação de novas notícias através de formulário
- Visualização detalhada de cada notícia
- API REST para inserção em massa de notícias
- Endpoints de health check para monitoramento
- Coleta de métricas para Prometheus
- Backend: Node.js com Express.js
- Frontend: EJS (Embedded JavaScript) como motor de templates
- Banco de Dados: PostgreSQL com Sequelize ORM
- Monitoramento: Prometheus (via express-prom-bundle)
/
├── src/ # Código-fonte principal
│ ├── models/ # Modelos de dados
│ │ └── post.js # Definição do modelo Post
│ ├── views/ # Templates EJS
│ │ ├── partial/ # Componentes parciais (header, footer)
│ │ ├── edit-news.ejs # Formulário de edição
│ │ ├── index.ejs # Página principal
│ │ └── view-news.ejs # Visualização de notícia
│ ├── static/ # Arquivos estáticos (CSS, imagens)
│ ├── middleware.js # Middlewares personalizados
│ ├── server.js # Ponto de entrada da aplicação
│ ├── system-life.js # Endpoints de health check
│ └── package.json # Dependências
├── popula-dados.http # Arquivo para popular o banco com dados de exemplo
└── README.md # Documentação
- Node.js
- PostgreSQL
- Docker (opcional, para containerização)
- Kubernetes (opcional, para orquestração)
Para configurar a aplicação, defina as seguintes variáveis de ambiente:
| Variável | Descrição | Valor Padrão |
|---|---|---|
| DB_DATABASE | Nome do banco de dados | kubedevnews |
| DB_USERNAME | Usuário do banco de dados | kubedevnews |
| DB_PASSWORD | Senha do usuário | Pg#123 |
| DB_HOST | Endereço do banco de dados | localhost |
| DB_PORT | Porta do banco de dados | 5432 |
| DB_SSL_REQUIRE | Habilitar SSL para conexão | false |
- Clone o repositório
- Instale as dependências:
cd src npm install - Configure as variáveis de ambiente necessárias
- Inicie a aplicação:
npm start
- Acesse a aplicação em http://localhost:8080
Utilize o arquivo popula-dados.http para inserir notícias de exemplo:
# Com uma ferramenta como o REST Client no VS Code ou curl
POST http://localhost:8080/api/post
Content-Type: application/json
# Conteúdo do arquivo popula-dados.httpA aplicação disponibiliza endpoints para monitoramento e também recursos para simular cenários de falha, muito úteis para testar a resiliência em ambientes Kubernetes:
/health- Verifica o estado atual da aplicação (retorna status da aplicação e hostname da máquina)/ready- Verifica se a aplicação está pronta para receber tráfego/metrics- Métricas do Prometheus (geradas pelo express-prom-bundle)
/unhealth- (PUT) Altera o estado da aplicação para não saudável. Todas as requisições subsequentes receberão status code 500./unreadyfor/:seconds- (PUT) Simula indisponibilidade temporária por um número específico de segundos. Durante este período, o endpoint/readyretornará status code 500.
Estes recursos de simulação de falhas são extremamente úteis para testar:
- Comportamento de probes de liveness e readiness no Kubernetes
- Políticas de retry e circuit breaker
- Mecanismos de failover
- Resiliência geral da sua infraestrutura
O projeto utiliza um único modelo Post com os seguintes campos:
| Campo | Tipo | Descrição |
|---|---|---|
| title | String | Título da notícia (limite: 30 caracteres) |
| summary | String | Resumo da notícia (limite: 50 caracteres) |
| content | String | Conteúdo completo (limite: 2000 caracteres) |
| publishDate | Date | Data de publicação |