docker-compose.yml•4.22 kB
# =============================================================================
# Docker Compose para Claude Conversation Logger - MONOLITO
# Sistema integrado con MongoDB, Redis, Nginx y Node.js en un solo contenedor
# =============================================================================
services:
# Contenedor monolítico principal
claude-logger-monolith:
build:
context: .
dockerfile: Dockerfile
target: production
image: claude-conversation-logger:monolith
container_name: claude-logger-monolith
# Puertos expuestos
ports:
- "3003:3003" # HTTP API through Nginx proxy
- "50051:50051" # gRPC Server (real-time data)
- "8080:8080" # WebSocket Bridge (browser gRPC compatibility)
# Variables de entorno
environment:
NODE_ENV: production
LOG_LEVEL: info
HTTP_PORT: 3003
GRPC_PORT: 50051
WS_PORT: 8080
WS_BRIDGE_PORT: 8080
# Internal database connections (localhost dentro del contenedor)
MONGODB_URI: mongodb://localhost:27017/conversations
REDIS_URL: redis://localhost:6379
# Application secrets
API_KEY: ${API_KEY:-claude_api_secret_2024_change_me}
SESSION_SECRET: ${SESSION_SECRET:-change_me_in_production}
# Límites de recursos para el monolito completo
deploy:
resources:
limits:
cpus: '2.0'
memory: 1G
reservations:
cpus: '1.0'
memory: 512M
# Health check (verifica que Nginx responda)
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3003/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 90s
# Volumes para persistencia de datos
volumes:
- claude-data:/data/db # MongoDB data
- claude-redis-data:/var/lib/redis # Redis data
- claude-logs:/app/logs # Application logs
- /etc/localtime:/etc/localtime:ro # Timezone sync
# Política de reinicio
restart: unless-stopped
# Configuración de logging
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
compress: "true"
# =============================================================================
# VOLÚMENES PERSISTENTES
# =============================================================================
volumes:
# Datos de MongoDB (persistente)
claude-data:
driver: local
driver_opts:
type: none
o: bind
device: ./persistence/mongodb
# Datos de Redis (persistente)
claude-redis-data:
driver: local
driver_opts:
type: none
o: bind
device: ./persistence/redis
# Logs de la aplicación (persistente)
claude-logs:
driver: local
driver_opts:
type: none
o: bind
device: ./persistence/logs
# =============================================================================
# CONFIGURACIÓN DE VARIABLES DE ENTORNO
# =============================================================================
#
# Para producción, crear archivo .env con:
#
# API_KEY=your_secure_api_key_here
# SESSION_SECRET=your_secure_session_secret_here
# MONGO_ROOT_USER=admin
# MONGO_ROOT_PASS=your_secure_mongodb_password
#
# =============================================================================
# COMANDOS ÚTILES:
#
# # Iniciar el sistema monolítico
# docker compose up -d
#
# # Ver logs en tiempo real
# docker compose logs -f
#
# # Acceder al contenedor
# docker compose exec claude-logger-monolith bash
#
# # Ver estado de servicios internos (dentro del contenedor)
# docker compose exec claude-logger-monolith supervisorctl status
#
# # Backup de datos
# docker compose exec claude-logger-monolith mongodump --out /backup
#
# # Cleanup completo
# docker compose down -v
#
# Servicios internos del monolito:
# - MongoDB: localhost:27017 (interno)
# - Redis: localhost:6379 (interno)
# - Node.js: localhost:3000 (interno)
# - Nginx: puerto 3003 (expuesto) -> proxy a Node.js:3000
# - Supervisor: gestiona todos los procesos
# =============================================================================