version: "3.7" x-default-variables: &default-variables API_URL: ${API_URL-http://api:8081} API_METRICS_URL: ${API_METRICS_URL-http://api:8082} KEY_MANAGER_URL: ${KEY_MANAGER_URL-http://key-manager:8080} KEY_MANAGER_METRICS_URL: ${KEY_MANAGER_URL-http://key-manager:8081} KEY_MANAGER_STORE_NAME: ${KEY_MANAGER_STORE_NAME-orchestrate-eth} KEY_MANAGER_TLS_SKIP_VERIFY: ${KEY_MANAGER_TLS_SKIP_VERIFY-} KEY_MANAGER_API_KEY: ${KEY_MANAGER_API_KEY-} KEY_MANAGER_CLIENT_TLS_CERT: ${KEY_MANAGER_CLIENT_TLS_CERT-} KEY_MANAGER_CLIENT_TLS_KEY: ${KEY_MANAGER_CLIENT_TLS_KEY-} TX_SENDER_METRICS_URL: ${TX_SENDER_METRICS_URL-http://tx-sender:8082} TX_LISTENER_METRICS_URL: ${TX_LISTENER_METRICS_URL-http://tx-listener:8082} TX_LISTENER_REFRESH_INTERVAL: ${TX_LISTENER_REFRESH_INTERVAL-} ETH_CLIENT_RETRY_MAX_ELAPSED_TIME: 5s ACCESSLOG_ENABLED: ${ACCESSLOG_ENABLED-false} LOG_LEVEL: ${LOG_LEVEL-} LOG_FORMAT: ${LOG_FORMAT-} LOG_TIMESTAMP: ${LOG_TIMESTAMP-true} NONCE_MANAGER_TYPE: ${NONCE_MANAGER_TYPE-in-memory} MULTI_TENANCY_ENABLED: ${MULTI_TENANCY_ENABLED-false} AUTH_API_KEY: ${AUTH_API_KEY-} AUTH_JWT_ISSUER_URL: ${AUTH_JWT_ISSUER_URL-} AUTH_JWT_AUDIENCE: ${AUTH_JWT_AUDIENCE-} AUTH_JWT_ORCHESTRATE_CLAIMS: ${AUTH_JWT_ORCHESTRATE_CLAIMS-} KAFKA_URL: ${KAFKA_URL-kafka:29092} KAFKA_SASL_ENABLED: ${KAFKA_SASL_ENABLED-false} KAFKA_SASL_MECHANISM: ${KAFKA_SASL_MECHANISM-PLAIN} KAFKA_SASL_USER: ${KAFKA_SASL_USER-} KAFKA_SASL_PASSWORD: ${KAFKA_SASL_PASSWORD-} KAFKA_TLS_ENABLED: ${KAFKA_TLS_ENABLED-false} KAFKA_TLS_INSECURE_SKIP_VERIFY: ${KAFKA_TLS_INSECURE_SKIP_VERIFY-false} KAFKA_NUM_CONSUMERS: ${KAFKA_NUM_CONSUMERS-} DB_TLS_SSLMODE: ${DB_TLS_SSLMODE-} DB_TLS_CERT: ${DB_TLS_CERT-} DB_TLS_KEY: ${DB_TLS_KEY-} DB_TLS_CA: ${DB_TLS_CA-} DB_HOST: ${DB_HOST-postgres} DB_PORT: ${DB_PORT-} DB_DATABASE: ${DB_DATABASE-} DB_POOLSIZE: ${DB_POOLSIZE-} DB_POOL_TIMEOUT: ${DB_POOL_TIMEOUT-} METRICS_MODULES: ${METRICS_MODULES-} x-container-common: &container-common restart: ${CONTAINER_RESTART-on-failure} image: consensys/orchestrate:v21.12.2 networks: - orchestrate - deps services: vault: <<: *container-common image: consensys/quorum-hashicorp-vault-plugin:v1.1.4 tty: true restart: "no" cap_add: - IPC_LOCK environment: VAULT_DEV_ROOT_TOKEN_ID: ${VAULT_TOKEN-DevVaultToken} VAULT_ADDR: http://vault:8200 PLUGIN_MOUNT_PATH: quorum PLUGIN_PATH: /vault/plugins entrypoint: - sh - -c - | ( sleep 2 ; vault-init-dev.sh ) & vault server -dev -dev-plugin-dir=/vault/plugins -dev-listen-address="0.0.0.0:8200" ports: - 8200:8200 healthcheck: test: [ "CMD", "wget", "--spider", "--proxy", "off", "http://vault:8200/v1/sys/health?standbyok=true" ] interval: 10s timeout: 3s retries: 10 start_period: 5s zookeeper: image: confluentinc/cp-zookeeper:5.4.3 ports: - ${ZOOKEEPER_EXTERNAL_PORT-2181}:2181 restart: "on-failure" networks: - deps environment: ZOOKEEPER_CLIENT_PORT: ${ZOOKEEPER_CLIENT_PORT-32181} ZOOKEEPER_TICK_TIME: ${ZOOKEEPER_TICK_TIME-2000} kafka: image: confluentinc/cp-kafka:5.4.3 depends_on: - zookeeper ports: - ${KAFKA_EXTERNAL_PORT-9092}:9092 restart: "on-failure" networks: - deps environment: KAFKA_BROKER_ID: 1 KAFKA_NUM_PARTITIONS: ${KAFKA_NUM_PARTITIONS-3} KAFKA_ZOOKEEPER_CONNECT: zookeeper:${ZOOKEEPER_CLIENT_PORT-32181} KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:29092,EXTERNAL://${KAFKA_EXTERNAL_HOSTNAME-localhost}:${KAFKA_EXTERNAL_PORT-9092} KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL healthcheck: test: ["CMD", "kafka-topics", "--list", "--bootstrap-server", "kafka:9092"] interval: 3s timeout: 3s retries: 10 start_period: 5s postgres: image: postgres:13.4-alpine environment: POSTGRES_PASSWORD: postgres volumes: - db-data-api:/var/lib/postgresql/data ports: - 5432 networks: - deps healthcheck: test: [ "CMD-SHELL", "pg_isready -U postgres" ] interval: 1s timeout: 1s retries: 5 restart: "on-failure" key-manager-init: image: gcr.io/distroless/static:debug volumes: - manifests:/manifests entrypoint: - sh - -c - | cat < /manifests/default.yml - kind: Vault type: hashicorp name: hashicorp-quorum specs: mount_point: quorum address: http://vault:8200 token: DevVaultToken namespace: '' - kind: Store type: key name: orchestrate-keystore specs: vault: hashicorp-quorum - kind: Store type: ethereum name: orchestrate-eth specs: key_store: orchestrate-keystore EOF key-manager-migration: image: consensys/quorum-key-manager:v21.12.2 environment: <<: *default-variables command: migrate up restart: "on-failure" networks: - deps depends_on: - postgres key-manager: image: consensys/quorum-key-manager:v21.12.2 environment: <<: *default-variables MANIFEST_PATH: ${MANIFEST_PATH-/manifests} ports: - 8080:8080 - 8081:8081 depends_on: - vault - key-manager-init - key-manager-migration - postgres networks: - deps restart: "on-failure" command: run volumes: - manifests:/manifests api-migration-init: <<: *container-common environment: <<: *default-variables restart: "on-failure" depends_on: - postgres command: api migrate init api-migration: <<: *container-common environment: <<: *default-variables restart: "on-failure" depends_on: - api-migration-init - postgres command: api migrate up api: <<: *container-common ports: - 8031:8081 - 8032:8082 environment: <<: *default-variables depends_on: - api-migration - key-manager - kafka restart: "on-failure" command: api run labels: filebeat: "false" tx-sender: <<: *container-common ports: - 8062:8082 environment: <<: *default-variables restart: "on-failure" depends_on: - api - postgres - kafka command: tx-sender run tx-listener: ports: - 8082:8082 <<: *container-common environment: <<: *default-variables restart: "on-failure" depends_on: - api - postgres command: tx-listener run networks: orchestrate: name: orchestrate deps: name: deps_orchestrate volumes: db-data-api: driver: local manifests: driver: local