Instalação e Configuração
Suba o stack com Docker Compose ou instale os serviços no Ubuntu.
Requisitos
Para Docker
- • Docker Engine + Compose v2
- • Git
- • (Opcional) Node.js 20/22 LTS se for rodar a API fora do container
Serviços do stack
- • API NestJS (multi-stage Dockerfile + HEALTHCHECK)
- • PostgreSQL 16 (TypeORM, connection pool)
- • MongoDB 7 (Mongoose, connection pool)
- • Redis 7
- • Apache Kafka KRaft (sem Zookeeper)
- • MinIO, MailHog, OpenSearch, Graylog
1. Docker Compose
O arquivo .env.docker já aponta hosts internos (postgres, mongo, redis, kafka, mailhog, graylog) e senhas de teste. Containers usam container_name estáveis (sem sufixo -1).
# Na raiz do repositório docker compose --env-file .env.docker up -d --build # Status docker compose --env-file .env.docker ps # Logs da API docker compose --env-file .env.docker logs -f api # Parar docker compose --env-file .env.docker down
Serviços e portas
- /api/v1 — API · /swagger · / · /health · /swagger · / · /health
- /mailhog/ — MailHog UI (SMTP 1025)
http://localhost:9000/:9001— MinIO API / Console- /graylog/ — Graylog UI (GELF 12201)
localhost:5432— PostgreSQLlocalhost:27017— MongoDBlocalhost:6379— Redis (senha em REDIS_PASSWORD)- Kafka interno:
kafka:9092(modo KRaft, sem Zookeeper) - http://localhost:8088 — Kafka UI
HEALTHCHECK
A imagem da API faz healthcheck em GET /health, que inclui ping + metadados de pool Postgres/Mongo.
2. Configuração do projeto
Clone e dependências
git clone https://github.com/mateuslacorte/backend-nestjs.git cd backend-nestjs npm install
Variáveis de ambiente
Copie .env.example → .env para desenvolvimento local. Em Compose, use .env.docker.
# JWT API_VERSION=v1 JWT_SECRET=seu_jwt_secret JWT_EXPIRATION_TIME=1h JWT_REFRESH_SECRET=seu_refresh_secret JWT_REFRESH_EXPIRATION_TIME=7d JWT_JITTER_SECONDS=60 # Graylog (GELF) GRAYLOG_ENABLED=true GRAYLOG_ENDPOINT=http://localhost:12201/gelf GRAYLOG_HOST=backend GRAYLOG_FACILITY=nestjs # Mongo pool MONGO_URI=mongodb://localhost:27017/mongo MONGO_POOL_MAX=10 MONGO_POOL_MIN=0 MONGO_POOL_IDLE=30000 MONGO_POOL_TIMEOUT=5000 # Postgres pool POSTGRES_HOST=localhost POSTGRES_PORT=5432 POSTGRES_USER=postgres POSTGRES_PASSWORD=postgres POSTGRES_DB=backend POSTGRES_SYNCHRONIZE=false POSTGRES_POOL_MAX=10 POSTGRES_POOL_MIN=2 POSTGRES_POOL_IDLE=30000 POSTGRES_POOL_TIMEOUT=5000 # Kafka (KRaft broker; sem Zookeeper) KAFKA_BROKERS=localhost:9092 # Argon2id ARGON2_MEMORY_COST=19456 ARGON2_TIME_COST=2 ARGON2_PARALLELISM=1
Connection pools
Postgres (TypeORM/pg) e Mongo (Mongoose) usam pool configurável. O pool reutiliza conexões; max/min e timeouts controlam tamanho e reciclagem. Veja também Arquitetura.
3. API em modo desenvolvimento
Com a infra no Compose (ou serviços locais), rode a API no host:
# Ajuste .env para hosts localhost (ou portas publicadas do Compose) npm run start:dev # Produção (build local) npm run build npm run start:prod
4. Ubuntu nativo
Instale Node, Postgres, Mongo, Redis e MinIO no host. Kafka (KRaft), Graylog, OpenSearch e MailHog podem continuar no Compose em setup híbrido.
Node.js LTS (20 ou 22)
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - sudo apt install -y nodejs node --version npm --version
PostgreSQL
sudo apt update sudo apt install -y postgresql postgresql-contrib sudo systemctl enable --now postgresql sudo -u postgres psql -c "CREATE USER backend_user WITH PASSWORD 'sua_senha';" sudo -u postgres psql -c "CREATE DATABASE backend_db OWNER backend_user;"
MongoDB
# Siga a doc oficial da versão 7.x para Ubuntu # https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-ubuntu/ sudo systemctl enable --now mongod
Redis
sudo apt install -y redis-server sudo systemctl enable --now redis-server redis-cli ping
Kafka (KRaft — sem Zookeeper)
Este projeto usa Kafka em modo KRaft (sem Zookeeper). Exemplo com o serviço do Compose:
docker compose --env-file .env.docker up -d kafka
MinIO
# Binário oficial ou via Compose: docker compose --env-file .env.docker up -d minio
MailHog / Graylog / OpenSearch
Use o Compose: docker compose --env-file .env.docker up -d mailhog opensearch graylog.
Troubleshooting
Compose / health
docker compose --env-file .env.docker ps curl -s https://nest.lacorte.dev/health | jq docker compose --env-file .env.docker logs -f api
Serviços nativos
sudo systemctl status postgresql sudo systemctl status mongod sudo systemctl status redis-server
Porta em uso
sudo lsof -i :3000 # ou altere PORT no .env