A fully containerized full‑stack To‑Do List application
- DevOps: Docker & Docker Compose, ELK Stack (Elasticsearch, Filebeat, Kibana)
- Backend: NestJS, MongoDB, RabbitMQ, Redis, Apollo GraphQL
- Frontend: React, Next.js, SCSS, Apollo Client
Last Updated: April 20, 2025
- Project Overview
- Tech Architecture
- Getting Started
- Dockerization Rationale
- Logging & Visualization
- Kibana Dashboard Import
- Screenshots
- License
This application provides GraphQL‑powered CRUD operations for tasks, backed by MongoDB, cached in Redis, and events published to RabbitMQ. All operations emit structured JSON logs that are collected by Filebeat and visualized in Kibana.
[Frontend: Next.js] <--GraphQL--> [NestJS Backend]
|
+--> MongoDB (store tasks)
+--> Redis (cache list queries)
+--> RabbitMQ (publish task events)
+--> Filebeat -> Elasticsearch -> Kibana (logs)
- Docker & Docker Compose v1.29+
- Node.js v14+ (for local development outside containers)
-
Clone the repo:
git clone https://github.com/innovategy/todo-list.git cd todo-list
-
Build and start all services:
docker-compose up --build -d
-
Verify services:
- Frontend: http://localhost:3000
- GraphQL API: http://localhost:4000/graphql
- Kibana: http://localhost:5601
-
Stop services:
docker-compose down
- NestJS Backend: Isolated environment, consistent Node version, simplified dependency management.
- React Frontend (Next.js): Encapsulates build/runtime, ensures parity across machines.
- MongoDB: Containerized for data isolation and easy teardown.
- Redis: Ephemeral cache service, container simplifies local setup.
- RabbitMQ: Messaging broker in a container for consistent configuration.
- Elasticsearch: Stateful search engine, containerized for easy orchestration.
- Filebeat: Collects logs from NestJS, container ensures correct version/config.
- Kibana: Visualization UI, container ensures compatibility with Elasticsearch.
- The NestJS app logs every operation in JSON:
{"timestamp":"...","level":"info","operation":"createTask","taskId":"...","payload":{...}}
- Filebeat harvests
/app/logs/*.json
and forwards to Elasticsearch. - Kibana provides a dashboard for tracking CRUD events and errors.
- Open Kibana at
http://localhost:5601
. - Go to Management > Saved Objects.
- Click Import, select
helm/kibana/kibana-dashboard.json
. - Apply default index pattern
filebeat-*
.
CRUD Operations Over Time
- 2025 by Innovategy Oy is licensed under CC BY 4.0