version: '3.8' services: # Nacos 注册中心 (Derby 独立模式) nacos-server: image: nacos/nacos-server:latest container_name: nacos-server environment: - PREFER_HOST_MODE=hostname - MODE=standalone - NACOS_AUTH_TOKEN=eW91cl9uYWNvc19zZWNyZXRfa2V5X211c3RfYmVfYXRfbGVhc3RfMzJfYnl0ZXNfbG9uZ19mb3Jfc2VjdXJpdHk= - NACOS_AUTH_IDENTITY_KEY=Authorization - NACOS_AUTH_IDENTITY_VALUE=token - NACOS_AUTH_ENABLE=false ports: - "8848:8848" - "9848:9848" restart: unless-stopped networks: - memquorum-network # API Gateway Service api-gateway: build: context: . dockerfile: api/Dockerfile # Enable BuildKit for cache mount optimization args: BUILDKIT_INLINE_CACHE: 1 container_name: memquorum-api-gateway environment: - NACOS_SERVER_ADDR=nacos-server:8848 - MEMQUORUM_ENGINE_TOTAL_SHARDS=16 - JAVA_OPTS=-Xmx256m -Xms128m ports: - "8080:8080" depends_on: - nacos-server restart: unless-stopped networks: - memquorum-network # MemQuorum Engine 节点1 engine-node1: build: context: . dockerfile: engine/Dockerfile # Enable BuildKit for cache mount optimization args: BUILDKIT_INLINE_CACHE: 1 container_name: memquorum-engine-node1 environment: - MEMQUORUM_NODE_ID=engine-node1 - MEMQUORUM_NODE_PORT=9090 - NACOS_SERVER_ADDR=nacos-server:8848 - MEMQUORUM_SHARDS_TOTAL=16 - MEMQUORUM_REPLICATION_FACTOR=3 - JAVA_OPTS=-Xmx512m -Xms256m ports: - "9091:9090" depends_on: - nacos-server restart: unless-stopped networks: - memquorum-network volumes: # Mount data directory from current directory - ./data/node1:/app/data # Mount logs directory from current directory - ./logs/node1:/app/logs # MemQuorum Engine 节点2 engine-node2: build: context: . dockerfile: engine/Dockerfile # Enable BuildKit for cache mount optimization args: BUILDKIT_INLINE_CACHE: 1 container_name: memquorum-engine-node2 environment: - MEMQUORUM_NODE_ID=engine-node2 - MEMQUORUM_NODE_PORT=9090 - NACOS_SERVER_ADDR=nacos-server:8848 - MEMQUORUM_SHARDS_TOTAL=16 - MEMQUORUM_REPLICATION_FACTOR=3 - JAVA_OPTS=-Xmx512m -Xms256m - MEMQUORUM_STARTUP_DELAY=10 ports: - "9092:9090" depends_on: - nacos-server restart: unless-stopped networks: - memquorum-network volumes: # Mount data directory from current directory - ./data/node2:/app/data # Mount logs directory from current directory - ./logs/node2:/app/logs # MemQuorum Engine 节点3 engine-node3: build: context: . dockerfile: engine/Dockerfile # Enable BuildKit for cache mount optimization args: BUILDKIT_INLINE_CACHE: 1 container_name: memquorum-engine-node3 environment: - MEMQUORUM_NODE_ID=engine-node3 - MEMQUORUM_NODE_PORT=9090 - NACOS_SERVER_ADDR=nacos-server:8848 - MEMQUORUM_SHARDS_TOTAL=16 - MEMQUORUM_REPLICATION_FACTOR=3 - JAVA_OPTS=-Xmx512m -Xms256m - MEMQUORUM_STARTUP_DELAY=20 ports: - "9093:9090" depends_on: - nacos-server restart: unless-stopped networks: - memquorum-network volumes: # Mount data directory from current directory - ./data/node3:/app/data # Mount logs directory from current directory - ./logs/node3:/app/logs # Prometheus 监控 prometheus: image: prom/prometheus:latest container_name: prometheus ports: - "9090:9090" volumes: # Mount Prometheus configuration from current directory - ./config/prometheus.yml:/etc/prometheus/prometheus.yml:ro # Mount persistent data volume - 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' restart: unless-stopped networks: - memquorum-network # Grafana 可视化 grafana: image: grafana/grafana:latest container_name: grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin123 volumes: # Mount persistent data volume - grafana-data:/var/lib/grafana # Mount dashboard configuration from current directory - ./config/grafana/dashboards:/etc/grafana/provisioning/dashboards:ro # Mount datasource configuration from current directory - ./config/grafana/datasources:/etc/grafana/provisioning/datasources:ro depends_on: - prometheus restart: unless-stopped networks: - memquorum-network networks: memquorum-network: driver: bridge volumes: prometheus-data: grafana-data: # Files and directories mounted from current directory: # Configuration files: # - ./config/prometheus.yml -> /etc/prometheus/prometheus.yml (Prometheus config) # - ./config/grafana/dashboards -> /etc/grafana/provisioning/dashboards (Grafana dashboards) # - ./config/grafana/datasources -> /etc/grafana/provisioning/datasources (Grafana datasources) # # Engine service data and logs: # - ./data/node1 -> /app/data (Engine node1 data directory) # - ./logs/node1 -> /app/logs (Engine node1 logs directory) # - ./data/node2 -> /app/data (Engine node2 data directory) # - ./logs/node2 -> /app/logs (Engine node2 logs directory) # - ./data/node3 -> /app/data (Engine node3 data directory) # - ./logs/node3 -> /app/logs (Engine node3 logs directory) # # Services: # - api-gateway: HTTP API Gateway (Port 8080) # - engine-node1/2/3: Engine services with gRPC (Ports 9091/9092/9093) # - nacos-server: Service registry (Port 8848) # - prometheus: Monitoring (Port 9090) # - grafana: Visualization (Port 3000)