# Docker compose file to simulate a sentry node setup. # # # Setup: # # Validator A is not supposed to be connected to the public internet. Instead it # connects to a sentry node (sentry-a) which connects to the public internet. # Validator B can reach validator A via sentry node A and vice versa. # # # Usage: # # 1. Build `target/release/substrate` binary: `cargo build --release` # # 2. Start networks and containers: `sudo docker-compose -f scripts/sentry-node/docker-compose.yml up` # # 3. Reach: # - polkadot/apps on localhost:3000 # - validator-a: localhost:9944 # - validator-b: localhost:9945 # - sentry-a: localhost:9946 version: "3.7" services: validator-a: ports: - "9944:9944" volumes: - ../../target/release/substrate:/usr/local/bin/substrate image: parity/substrate networks: - network-a command: # Local node id: QmRpheLN4JWdAnY7HGJfWFNbfkQCb6tFf4vvA6hgjMZKrR - "--node-key" - "0000000000000000000000000000000000000000000000000000000000000001" - "--base-path" - "/tmp/alice" - "--chain=local" - "--key" - "//Alice" - "--port" - "30333" - "--validator" - "--name" - "AlicesNode" - "--reserved-nodes" - "/dns4/sentry-a/tcp/30333/p2p/QmV7EhW6J6KgmNdr558RH1mPx2xGGznW7At4BhXzntRFsi" # Not only bind to localhost. - "--ws-external" - "--rpc-external" # - "--log" # - "sub-libp2p=trace" # - "--log" # - "afg=trace" - "--no-telemetry" - "--rpc-cors" - "all" sentry-a: image: parity/substrate ports: - "9946:9944" volumes: - ../../target/release/substrate:/usr/local/bin/substrate networks: - network-a - internet command: # Local node id: QmV7EhW6J6KgmNdr558RH1mPx2xGGznW7At4BhXzntRFsi - "--node-key" - "0000000000000000000000000000000000000000000000000000000000000003" - "--base-path" - "/tmp/sentry" - "--chain=local" # Don't configure a key, as sentry-a is not a validator. # - "--key" # - "//Charlie" - "--port" - "30333" # sentry-a is not a validator. # - "--validator" - "--name" - "CharliesNode" - "--bootnodes" - "/dns4/validator-a/tcp/30333/p2p/QmRpheLN4JWdAnY7HGJfWFNbfkQCb6tFf4vvA6hgjMZKrR" - "--bootnodes" - "/dns4/validator-b/tcp/30333/p2p/QmSVnNf9HwVMT1Y4cK1P6aoJcEZjmoTXpjKBmAABLMnZEk" - "--no-telemetry" - "--rpc-cors" - "all" # Not only bind to localhost. - "--ws-external" - "--rpc-external" # Make sure sentry-a still participates as a grandpa voter to forward # grandpa finality gossip messages. - "--grandpa-voter" validator-b: image: parity/substrate ports: - "9945:9944" volumes: - ../../target/release/substrate:/usr/local/bin/substrate networks: - internet command: # Local node id: QmSVnNf9HwVMT1Y4cK1P6aoJcEZjmoTXpjKBmAABLMnZEk - "--node-key" - "0000000000000000000000000000000000000000000000000000000000000002" - "--base-path" - "/tmp/bob" - "--chain=local" - "--key" - "//Bob" - "--port" - "30333" - "--validator" - "--name" - "BobsNode" - "--bootnodes" - "/dns4/validator-a/tcp/30333/p2p/QmRpheLN4JWdAnY7HGJfWFNbfkQCb6tFf4vvA6hgjMZKrR" - "--bootnodes" - "/dns4/sentry-a/tcp/30333/p2p/QmV7EhW6J6KgmNdr558RH1mPx2xGGznW7At4BhXzntRFsi" - "--no-telemetry" - "--rpc-cors" - "all" # Not only bind to localhost. - "--ws-external" - "--rpc-external" ui: image: polkadot-js/apps ports: - "3000:80" networks: network-a: internet: