version: '3.8' services: # Cosmian KMS para demo de gestión de secretos cosmian-kms: image: cosmian/kms:4.0.0 container_name: demo-cosmian-kms ports: - "9998:9998" environment: - KMS_DATABASE_URL=sqlite:///tmp/kms.db - KMS_LOG_LEVEL=info - KMS_SERVER_PORT=9998 - KMS_ALLOW_ORIGIN=* volumes: - cosmian_data:/tmp - ./config/cosmian:/config networks: - demo-network restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9998/version"] interval: 30s timeout: 10s retries: 3 start_period: 40s # PostgreSQL para demos que requieren base de datos postgres: image: postgres:15-alpine container_name: demo-postgres environment: - POSTGRES_DB=provisioning_demo - POSTGRES_USER=demo_user - POSTGRES_PASSWORD=demo_password ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data - ./config/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql networks: - demo-network restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U demo_user -d provisioning_demo"] interval: 10s timeout: 5s retries: 5 # Redis para caching en demos redis: image: redis:7-alpine container_name: demo-redis ports: - "6379:6379" networks: - demo-network restart: unless-stopped healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 3s retries: 3 # Nginx como reverse proxy para demos web nginx: image: nginx:alpine container_name: demo-nginx ports: - "8080:80" - "8443:443" volumes: - ./config/nginx/nginx.conf:/etc/nginx/nginx.conf - ./config/nginx/html:/usr/share/nginx/html - ./config/certs:/etc/nginx/certs depends_on: - cosmian-kms networks: - demo-network restart: unless-stopped # Prometheus para monitoring demos (opcional) prometheus: image: prom/prometheus:latest container_name: demo-prometheus ports: - "9090:9090" volumes: - ./config/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--web.console.templates=/etc/prometheus/consoles' - '--storage.tsdb.retention.time=200h' - '--web.enable-lifecycle' networks: - demo-network restart: unless-stopped # Grafana para visualización (opcional) grafana: image: grafana/grafana:latest container_name: demo-grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=demo123 - GF_USERS_ALLOW_SIGN_UP=false volumes: - grafana_data:/var/lib/grafana - ./config/grafana/provisioning:/etc/grafana/provisioning depends_on: - prometheus networks: - demo-network restart: unless-stopped # Simulador de servidor AWS para demos offline localstack: image: localstack/localstack:3.0 container_name: demo-localstack ports: - "4566:4566" environment: - SERVICES=s3,ec2,iam,sts - DEBUG=1 - DOCKER_HOST=unix:///var/run/docker.sock - PERSISTENCE=1 volumes: - localstack_data:/tmp/localstack - ./config/localstack:/etc/localstack/init/ready.d - "/var/run/docker.sock:/var/run/docker.sock" networks: - demo-network restart: unless-stopped # MCP Server para demos de AI (cuando no esté disponible localmente) mcp-server: build: context: ../../mcp dockerfile: Dockerfile container_name: demo-mcp-server ports: - "8000:8000" environment: - PROVISIONING_PATH=/app - PROVISIONING_DEMO=true - LOG_LEVEL=info volumes: - ../../:/app networks: - demo-network restart: unless-stopped depends_on: - cosmian-kms - postgres networks: demo-network: driver: bridge ipam: config: - subnet: 172.20.0.0/16 volumes: cosmian_data: driver: local postgres_data: driver: local prometheus_data: driver: local grafana_data: driver: local localstack_data: driver: local