version: '3.8' services: context-plugin: build: context: . dockerfile: Dockerfile container_name: marketally-context-plugin restart: unless-stopped ports: - "8080:8080" - "8081:8081" environment: - ASPNETCORE_ENVIRONMENT=Production - CONTEXT_STORAGE_PATH=/app/data/.context - CONTEXT_LOG_LEVEL=Information - CONTEXT_ENABLE_METRICS=true - CONTEXT_ENABLE_HEALTH_CHECKS=true - CONTEXT_MAX_CONTEXT_SIZE=50000 - CONTEXT_RETENTION_DAYS=90 - CONTEXT_ENABLE_COMPRESSION=true - CONTEXT_ENABLE_CACHING=true - CONTEXT_CACHE_EXPIRATION_MINUTES=30 - CONTEXT_MAX_CONCURRENT_OPERATIONS=10 - CONTEXT_ENABLE_ENCRYPTION=true - CONTEXT_ENABLE_SENSITIVE_DATA_DETECTION=true volumes: - context-data:/app/data - context-logs:/app/logs - ./config:/app/config:ro networks: - context-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8081/health"] interval: 30s timeout: 10s retries: 3 start_period: 60s labels: - "com.marketally.service=context-plugin" - "com.marketally.version=1.0.0" - "com.marketally.environment=production" # Redis for caching (optional) redis: image: redis:7-alpine container_name: marketally-context-redis restart: unless-stopped ports: - "6379:6379" volumes: - redis-data:/data networks: - context-network command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 30s timeout: 10s retries: 3 # Prometheus for metrics collection (optional) prometheus: image: prom/prometheus:latest container_name: marketally-context-prometheus restart: unless-stopped ports: - "9090:9090" volumes: - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro - prometheus-data:/prometheus networks: - context-network 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=15d' - '--web.enable-lifecycle' # Grafana for metrics visualization (optional) grafana: image: grafana/grafana:latest container_name: marketally-context-grafana restart: unless-stopped ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin123 - GF_USERS_ALLOW_SIGN_UP=false volumes: - grafana-data:/var/lib/grafana - ./monitoring/grafana/dashboards:/etc/grafana/provisioning/dashboards:ro - ./monitoring/grafana/datasources:/etc/grafana/provisioning/datasources:ro networks: - context-network depends_on: - prometheus # Jaeger for distributed tracing (optional) jaeger: image: jaegertracing/all-in-one:latest container_name: marketally-context-jaeger restart: unless-stopped ports: - "16686:16686" - "14268:14268" environment: - COLLECTOR_OTLP_ENABLED=true networks: - context-network # Log aggregation with Loki (optional) loki: image: grafana/loki:latest container_name: marketally-context-loki restart: unless-stopped ports: - "3100:3100" volumes: - ./monitoring/loki.yml:/etc/loki/local-config.yaml:ro - loki-data:/loki networks: - context-network command: -config.file=/etc/loki/local-config.yaml # Log shipping with Promtail (optional) promtail: image: grafana/promtail:latest container_name: marketally-context-promtail restart: unless-stopped volumes: - ./monitoring/promtail.yml:/etc/promtail/config.yml:ro - context-logs:/var/log/context:ro - /var/log:/var/log:ro networks: - context-network command: -config.file=/etc/promtail/config.yml depends_on: - loki volumes: context-data: driver: local context-logs: driver: local redis-data: driver: local prometheus-data: driver: local grafana-data: driver: local loki-data: driver: local networks: context-network: driver: bridge ipam: config: - subnet: 172.20.0.0/16