services: metadata: image: postgres:17-alpine restart: unless-stopped environment: POSTGRES_DB: objectstore POSTGRES_USER: objectstore POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD} volumes: - metadata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U objectstore -d objectstore"] interval: 5s timeout: 3s retries: 10 mem_limit: 256m security_opt: - no-new-privileges:true node-local: image: objectstore-durability:local restart: unless-stopped entrypoint: ["java", "--add-modules", "jdk.httpserver,java.net.http", "-cp", "/app:/app/postgresql.jar", "cloud.lunarsky.store.ClusterNode"] environment: CLUSTER_TOKEN: ${CLUSTER_TOKEN:?Set CLUSTER_TOKEN} CLUSTER_REPAIR_TOKEN: ${CLUSTER_REPAIR_TOKEN:?Set CLUSTER_REPAIR_TOKEN} CLUSTER_HOST_ID: ${LOCAL_HOST_ID:?Set LOCAL_HOST_ID} NODE_BIND: 0.0.0.0 DATA_DIR: /data volumes: - node-local:/data healthcheck: test: ["CMD", "wget", "-qO-", "http://127.0.0.1:9100/health"] interval: 5s timeout: 3s retries: 10 mem_limit: 256m security_opt: - no-new-privileges:true cap_drop: - ALL gateway: image: objectstore-durability:local restart: unless-stopped environment: STORE_MODE: cluster CLUSTER_LOCAL_DEV: "true" BIND_ADDRESS: 0.0.0.0 S3_ACCESS_KEY: ${S3_ACCESS_KEY:?Set S3_ACCESS_KEY} S3_SECRET_KEY: ${S3_SECRET_KEY:?Set S3_SECRET_KEY} S3_BUCKET: durability S3_REGION: us-east-1 MAX_OBJECT_BYTES: 67108864 MAX_TOTAL_BYTES: 536870912 CLUSTER_TOKEN: ${CLUSTER_TOKEN:?Set CLUSTER_TOKEN} CLUSTER_NODES: http://node-local:9100,${REMOTE_NODE_URL:?Set REMOTE_NODE_URL} POSTGRES_JDBC_URL: jdbc:postgresql://metadata:5432/objectstore?connectTimeout=3&socketTimeout=10 POSTGRES_USER: objectstore POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD} ports: - "127.0.0.1:${CLUSTER_HOST_PORT:-9003}:9000" depends_on: metadata: condition: service_healthy node-local: condition: service_healthy healthcheck: test: ["CMD", "wget", "-qO-", "http://127.0.0.1:9000/ready"] interval: 5s timeout: 3s retries: 10 mem_limit: 384m security_opt: - no-new-privileges:true cap_drop: - ALL repair: image: objectstore-durability:local profiles: [repair] entrypoint: ["/usr/local/bin/objectstore", "cluster-repair"] environment: STORE_MODE: cluster CLUSTER_LOCAL_DEV: "true" CLUSTER_NODES: http://node-local:9100,${REMOTE_NODE_URL:?Set REMOTE_NODE_URL} CLUSTER_TOKEN: ${CLUSTER_TOKEN:?Set CLUSTER_TOKEN} CLUSTER_REPAIR_TOKEN: ${CLUSTER_REPAIR_TOKEN:?Set CLUSTER_REPAIR_TOKEN} S3_BUCKET: durability POSTGRES_JDBC_URL: jdbc:postgresql://metadata:5432/objectstore?connectTimeout=3&socketTimeout=10 POSTGRES_USER: objectstore POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD} mem_limit: 384m security_opt: - no-new-privileges:true cap_drop: - ALL metadata-recovery: image: postgres:17-alpine profiles: [recovery] environment: POSTGRES_DB: objectstore POSTGRES_USER: objectstore POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD} volumes: - metadata-recovery:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U objectstore -d objectstore"] interval: 5s timeout: 3s retries: 10 mem_limit: 256m security_opt: - no-new-privileges:true volumes: metadata: metadata-recovery: node-local: