version: '3' services: sl-bootnode: build: context: .. dockerfile: geth-poa/Dockerfile environment: - GETH_NODE_TYPE=bootnode - BOOT_KEY=7b548c1c0fbe80ef1eb0aaec2edf26fd20fb0d758e94948cf6c5f2a486e735f6 - NET_RESTRICT=172.29.0.0/16 networks: primev_net: ipv4_address: '172.29.0.98' ports: - 8545:8545 - 8546:8546 - 6060:6060 # metrics server @ /debug/metrics - 6068:6068 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*" ] } ] sl-node1: build: context: .. dockerfile: geth-poa/Dockerfile environment: - GETH_NODE_TYPE=signer - BLOCK_SIGNER_ADDRESS=0xd9cd8E5DE6d55f796D980B818D350C0746C25b97 - BLOCK_SIGNER_PRIVATE_KEY=${NODE1_PRIVATE_KEY} - BOOTNODE_ENDPOINT=enode://34a2a388ad31ca37f127bb9ffe93758ee711c5c2277dff6aff2e359bcf2c9509ea55034196788dbd59ed70861f523c1c03d54f1eabb2b4a5c1c129d966fe1e65@172.29.0.98:30301 - NET_RESTRICT=172.29.0.0/16 networks: primev_net: ipv4_address: '172.29.0.99' 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": [ "txpool*", "trie*", "system*", "state*", "rpc*", "p2p*", "eth*", "chain*", "clique*" ] } ] sl-node2: build: context: .. dockerfile: geth-poa/Dockerfile environment: - GETH_NODE_TYPE=signer - BLOCK_SIGNER_ADDRESS=0x788EBABe5c3dD422Ef92Ca6714A69e2eabcE1Ee4 - BLOCK_SIGNER_PRIVATE_KEY=${NODE2_PRIVATE_KEY} - BOOTNODE_ENDPOINT=enode://34a2a388ad31ca37f127bb9ffe93758ee711c5c2277dff6aff2e359bcf2c9509ea55034196788dbd59ed70861f523c1c03d54f1eabb2b4a5c1c129d966fe1e65@172.29.0.98:30301 - NET_RESTRICT=172.29.0.0/16 networks: primev_net: ipv4_address: '172.29.0.100' 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": [ "txpool*", "trie*", "system*", "state*", "rpc*", "p2p*", "eth*", "chain*", "clique*" ] } ] # L1 geth services only used for local dev l1-bootnode: build: context: . dockerfile: ./local-l1/Dockerfile environment: - GETH_NODE_TYPE=bootnode - BOOT_KEY=7b548c1c0fbe80ef1eb0aaec2edf26fd20fb0d758e94948cf6c5f2a486e735f6 - NET_RESTRICT=172.14.0.0/24 networks: l1_net: ipv4_address: '172.14.0.2' volumes: - geth-data-l1-bootnode:/data profiles: - local_l1 l1-node1: build: context: . dockerfile: ./local-l1/Dockerfile environment: - GETH_NODE_TYPE=signer - BLOCK_SIGNER_ADDRESS=0xd9cd8E5DE6d55f796D980B818D350C0746C25b97 - BLOCK_SIGNER_PRIVATE_KEY=${NODE1_PRIVATE_KEY} - BOOTNODE_ENDPOINT=enode://34a2a388ad31ca37f127bb9ffe93758ee711c5c2277dff6aff2e359bcf2c9509ea55034196788dbd59ed70861f523c1c03d54f1eabb2b4a5c1c129d966fe1e65@172.14.0.2:30301 - NET_RESTRICT=172.14.0.0/24 networks: l1_net: ipv4_address: '172.14.0.3' volumes: - geth-data-l1-first-signer:/data profiles: - local_l1 l1-node2: build: context: . dockerfile: ./local-l1/Dockerfile environment: - GETH_NODE_TYPE=signer - BLOCK_SIGNER_ADDRESS=0x788EBABe5c3dD422Ef92Ca6714A69e2eabcE1Ee4 - BLOCK_SIGNER_PRIVATE_KEY=${NODE2_PRIVATE_KEY} - BOOTNODE_ENDPOINT=enode://34a2a388ad31ca37f127bb9ffe93758ee711c5c2277dff6aff2e359bcf2c9509ea55034196788dbd59ed70861f523c1c03d54f1eabb2b4a5c1c129d966fe1e65@172.14.0.2:30301 - NET_RESTRICT=172.14.0.0/24 networks: l1_net: ipv4_address: '172.14.0.4' volumes: - geth-data-l1-second-signer:/data profiles: - local_l1 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: primev_net: ipv4_address: '172.29.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: primev_net: ipv4_address: '172.29.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: primev_net: ipv4_address: '172.29.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: primev_net: ipv4_address: '172.29.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: primev_net: ipv4_address: '172.29.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: primev_net: ipv4_address: 172.29.4.24 profiles: - prod_agents networks: primev_net: external: true l1_net: driver: bridge ipam: driver: default config: - subnet: 172.14.0.0/16 volumes: geth-data-bootnode: geth-data-node1: geth-data-node2: geth-data-l1-bootnode: geth-data-l1-first-signer: geth-data-l1-second-signer: hyperlane-deploy-artifacts: hyperlane-validator1-sigs: hyperlane-validator2-sigs: hyperlane-validator1-db: hyperlane-validator2-db: hyperlane-relayer-db: