version: '3' services: bootnode: build: context: . dockerfile: Dockerfile environment: - GETH_NODE_TYPE=bootnode - BOOT_KEY=7b548c1c0fbe80ef1eb0aaec2edf26fd20fb0d758e94948cf6c5f2a486e735f6 networks: poa_net: ipv4_address: '172.13.0.100' ports: - 8545:8545 - 8546:8546 - 6060:6060 # metrics server @ /debug/metrics volumes: - geth-data-bootnode:/data profiles: - settlement labels: com.datadoghq.ad.check_names: '["openmetrics"]' com.datadoghq.ad.init_configs: '[{}]' com.datadoghq.ad.instances: | [ { "openmetrics_endpoint": "http://%%host%%:6060/debug/metrics/prometheus", "namespace": "geth-poa", "metrics": [ "txpool*", "trie*", "system*", "state*", "rpc*", "p2p*", "eth*", "chain*" ] } ] node1: build: context: . dockerfile: Dockerfile environment: - GETH_NODE_TYPE=signer - BLOCK_SIGNER_ADDRESS=0xd9cd8E5DE6d55f796D980B818D350C0746C25b97 - BLOCK_SIGNER_PRIVATE_KEY=${NODE1_PRIVATE_KEY} networks: poa_net: ipv4_address: '172.13.0.2' volumes: - geth-data-node1:/data profiles: - settlement labels: com.datadoghq.ad.check_names: '["openmetrics"]' com.datadoghq.ad.init_configs: '[{}]' com.datadoghq.ad.instances: | [ { "openmetrics_endpoint": "http://%%host%%:6060/debug/metrics/prometheus", "namespace": "geth-poa", "metrics": [ "clique*" ] } ] node2: build: context: . dockerfile: Dockerfile environment: - GETH_NODE_TYPE=signer - BLOCK_SIGNER_ADDRESS=0x788EBABe5c3dD422Ef92Ca6714A69e2eabcE1Ee4 - BLOCK_SIGNER_PRIVATE_KEY=${NODE2_PRIVATE_KEY} networks: poa_net: ipv4_address: '172.13.0.3' volumes: - geth-data-node2:/data profiles: - settlement labels: com.datadoghq.ad.check_names: '["openmetrics"]' com.datadoghq.ad.init_configs: '[{}]' com.datadoghq.ad.instances: | [ { "openmetrics_endpoint": "http://%%host%%:6060/debug/metrics/prometheus", "namespace": "geth-poa", "metrics": [ "clique*" ] } ] hyperlane-deployer: build: context: ./hyperlane-deployer dockerfile: Dockerfile healthcheck: test: ["CMD-SHELL", "test -f /hyperlane-monorepo/artifacts/done-warp-route || exit 1"] interval: 5s retries: 100 environment: - CONTRACT_DEPLOYER_PRIVATE_KEY=${CONTRACT_DEPLOYER_PRIVATE_KEY} networks: poa_net: ipv4_address: '172.13.0.50' volumes: - hyperlane-deploy-artifacts:/hyperlane-monorepo/artifacts profiles: - bridge hyperlane-validator1: build: context: ./hyperlane-validator dockerfile: Dockerfile args: # Image can be built for arm64 with https://github.com/hyperlane-xyz/hyperlane-monorepo/blob/main/rust/build.sh - AGENT_BASE_IMAGE=${AGENT_BASE_IMAGE} # Reuse geth private key for validator command: ./validator --validator.key ${NODE1_PRIVATE_KEY} --chains.mevcommitsettlement.signer.key ${NODE1_PRIVATE_KEY} --checkpointSyncer.path /val1-sigs # TODO: evaluate why container needs to run as root user: "0:0" depends_on: hyperlane-deployer: condition: service_healthy networks: poa_net: ipv4_address: '172.13.0.75' volumes: - hyperlane-deploy-artifacts:/deploy-artifacts - hyperlane-validator1-sigs:/val1-sigs - hyperlane-validator1-db:/val-db profiles: - bridge hyperlane-validator2: build: context: ./hyperlane-validator dockerfile: Dockerfile args: - AGENT_BASE_IMAGE=${AGENT_BASE_IMAGE} # Reuse geth private key for validator command: ./validator --validator.key ${NODE2_PRIVATE_KEY} --chains.mevcommitsettlement.signer.key ${NODE2_PRIVATE_KEY} --checkpointSyncer.path /val2-sigs # TODO: evaluate why container needs to run as root user: "0:0" depends_on: hyperlane-deployer: condition: service_healthy networks: poa_net: ipv4_address: '172.13.0.76' volumes: - hyperlane-deploy-artifacts:/deploy-artifacts - hyperlane-validator2-sigs:/val2-sigs - hyperlane-validator2-db:/val-db profiles: - bridge hyperlane-relayer: build: context: ./hyperlane-relayer dockerfile: Dockerfile args: - AGENT_BASE_IMAGE=${AGENT_BASE_IMAGE} user: "0:0" depends_on: hyperlane-deployer: condition: service_healthy environment: - RELAYER_PRIVATE_KEY=${RELAYER_PRIVATE_KEY} networks: poa_net: ipv4_address: '172.13.0.77' volumes: - hyperlane-deploy-artifacts:/deploy-artifacts - hyperlane-validator1-sigs:/val1-sigs - hyperlane-validator2-sigs:/val2-sigs - hyperlane-relayer-db:/relayer-db profiles: - bridge frontend: build: context: ./frontend dockerfile: Dockerfile args: - NEXT_PUBLIC_WALLET_CONNECT_ID=${NEXT_PUBLIC_WALLET_CONNECT_ID} depends_on: hyperlane-deployer: condition: service_healthy environment: - NEXT_PUBLIC_WALLET_CONNECT_ID=${NEXT_PUBLIC_WALLET_CONNECT_ID} - L2_NODE_URL=${L2_NODE_URL} networks: poa_net: ipv4_address: '172.13.0.90' ports: - 80:3000 volumes: - hyperlane-deploy-artifacts:/deploy-artifacts profiles: - bridge datadog-agent: image: gcr.io/datadoghq/agent:latest restart: always volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - /proc/:/host/proc/:ro - /sys/fs/cgroup/:/host/sys/fs/cgroup:ro environment: - DD_API_KEY=${DD_KEY} - DD_TAGS=env:test - DD_SITE=datadoghq.com - DD_LOGS_ENABLED=true - DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true - DD_CONTAINER_EXCLUDE="name:datadog-agent" ports: - "5000:5000" networks: poa_net: ipv4_address: 172.13.4.24 profiles: - prod_agents networks: poa_net: driver: bridge ipam: driver: default config: - subnet: 172.13.0.0/16 volumes: geth-data-bootnode: geth-data-node1: geth-data-node2: hyperlane-deploy-artifacts: hyperlane-validator1-sigs: hyperlane-validator2-sigs: hyperlane-validator1-db: hyperlane-validator2-db: hyperlane-relayer-db: