# ============================================================================= # MPC Service - Docker Compose # ============================================================================= services: mpc-service: build: context: . dockerfile: Dockerfile container_name: rwa-mpc-service ports: - "3001:3001" environment: # Application NODE_ENV: production APP_PORT: 3001 API_PREFIX: api/v1 # Database (PostgreSQL) DATABASE_URL: postgresql://postgres:password@postgres:5432/rwa_mpc?schema=public # Redis REDIS_HOST: redis REDIS_PORT: 6379 REDIS_PASSWORD: "" REDIS_DB: 5 # JWT JWT_SECRET: ${JWT_SECRET:-your-jwt-secret-change-in-production} JWT_ACCESS_EXPIRES_IN: 2h JWT_REFRESH_EXPIRES_IN: 30d # Kafka KAFKA_BROKERS: kafka:29092 KAFKA_CLIENT_ID: mpc-service KAFKA_GROUP_ID: mpc-service-group # MPC System (Go/TSS Backend) MPC_SYSTEM_URL: ${MPC_SYSTEM_URL:-http://mpc-system:4000} MPC_API_KEY: ${MPC_API_KEY:-your-mpc-api-key} MPC_COORDINATOR_URL: ${MPC_COORDINATOR_URL:-http://mpc-system:8081} MPC_MESSAGE_ROUTER_WS_URL: ${MPC_MESSAGE_ROUTER_WS_URL:-ws://mpc-system:8082} MPC_COORDINATOR_TIMEOUT: 30000 # Share Encryption SHARE_MASTER_KEY: ${SHARE_MASTER_KEY:-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef} # Timeouts MPC_KEYGEN_TIMEOUT: 300000 MPC_SIGNING_TIMEOUT: 180000 MPC_REFRESH_TIMEOUT: 300000 depends_on: postgres: condition: service_healthy redis: condition: service_started kafka: condition: service_started networks: - mpc-network restart: unless-stopped volumes: - ./logs:/app/logs healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3001/api/v1/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s postgres: image: postgres:16-alpine container_name: rwa-mpc-postgres ports: - "5433:5432" environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: password POSTGRES_DB: rwa_mpc volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 5s timeout: 5s retries: 10 networks: - mpc-network redis: image: redis:7-alpine container_name: rwa-mpc-redis ports: - "6380:6379" volumes: - redis_data:/data networks: - mpc-network zookeeper: image: confluentinc/cp-zookeeper:7.5.0 container_name: rwa-mpc-zookeeper environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 networks: - mpc-network kafka: image: confluentinc/cp-kafka:7.5.0 container_name: rwa-mpc-kafka ports: - "9093:9092" environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9093,PLAINTEXT_INTERNAL://kafka:29092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,PLAINTEXT_INTERNAL://0.0.0.0:29092 KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT_INTERNAL KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" depends_on: - zookeeper networks: - mpc-network networks: mpc-network: driver: bridge volumes: postgres_data: redis_data: