gcx/blockchain/docker-compose.yml

192 lines
5.0 KiB
YAML

# ============================================================
# Genex Blockchain Stack — Docker Compose
#
# 包含:
# - genex-node-1/2/3: 3个创世验证节点
# - genex-inst-1/2: 2个机构验证节点
# - genex-regulatory: 1个监管只读节点
# - contract-deployer: 智能合约部署任务
#
# 启动:
# docker compose up -d
#
# 仅启动单节点开发模式:
# docker compose up genex-node-1 -d
#
# 部署合约:
# docker compose run contract-deployer
# ============================================================
version: "3.9"
x-genex-node: &genex-node-defaults
build:
context: ./genex-chain
dockerfile: Dockerfile
restart: unless-stopped
networks:
- genex-net
services:
# =============================================
# Genesis Validator Node 1 (Primary, US-East)
# =============================================
genex-node-1:
<<: *genex-node-defaults
container_name: genex-us-east-1
hostname: genex-us-east-1
environment:
- MONIKER=genex-us-east-1
- CHAIN_ID=genex-testnet-1
- NODE_TYPE=genesis
ports:
- "26656:26656" # P2P
- "26657:26657" # CometBFT RPC
- "8545:8545" # EVM JSON-RPC
- "8546:8546" # EVM WebSocket
- "1317:1317" # Cosmos REST API
- "9090:9090" # gRPC
volumes:
- node1-data:/home/genex/.genexd
# =============================================
# Genesis Validator Node 2 (US-West)
# =============================================
genex-node-2:
<<: *genex-node-defaults
container_name: genex-us-west-1
hostname: genex-us-west-1
environment:
- MONIKER=genex-us-west-1
- CHAIN_ID=genex-testnet-1
- NODE_TYPE=genesis
- PERSISTENT_PEERS=genex-us-east-1:26656
ports:
- "26666:26656"
- "26667:26657"
- "8555:8545"
volumes:
- node2-data:/home/genex/.genexd
depends_on:
- genex-node-1
# =============================================
# Genesis Validator Node 3 (Singapore)
# =============================================
genex-node-3:
<<: *genex-node-defaults
container_name: genex-sg-1
hostname: genex-sg-1
environment:
- MONIKER=genex-sg-1
- CHAIN_ID=genex-testnet-1
- NODE_TYPE=genesis
- PERSISTENT_PEERS=genex-us-east-1:26656,genex-us-west-1:26656
ports:
- "26676:26656"
- "26677:26657"
- "8565:8545"
volumes:
- node3-data:/home/genex/.genexd
depends_on:
- genex-node-1
# =============================================
# Institution Validator Node 1
# =============================================
genex-inst-1:
<<: *genex-node-defaults
container_name: genex-inst-1
hostname: genex-inst-1
environment:
- MONIKER=genex-inst-1
- CHAIN_ID=genex-testnet-1
- NODE_TYPE=institution
- PERSISTENT_PEERS=genex-us-east-1:26656,genex-sg-1:26656
ports:
- "26686:26656"
- "26687:26657"
- "8575:8545"
volumes:
- inst1-data:/home/genex/.genexd
depends_on:
- genex-node-1
- genex-node-3
# =============================================
# Institution Validator Node 2
# =============================================
genex-inst-2:
<<: *genex-node-defaults
container_name: genex-inst-2
hostname: genex-inst-2
environment:
- MONIKER=genex-inst-2
- CHAIN_ID=genex-testnet-1
- NODE_TYPE=institution
- PERSISTENT_PEERS=genex-us-east-1:26656,genex-inst-1:26656
ports:
- "26696:26656"
- "26697:26657"
- "8585:8545"
volumes:
- inst2-data:/home/genex/.genexd
depends_on:
- genex-node-1
# =============================================
# Regulatory Observer Node (Read-Only)
# =============================================
genex-regulatory:
<<: *genex-node-defaults
container_name: genex-regulatory-1
hostname: genex-regulatory-1
environment:
- MONIKER=genex-regulatory-1
- CHAIN_ID=genex-testnet-1
- NODE_TYPE=regulatory
- PERSISTENT_PEERS=genex-us-east-1:26656,genex-sg-1:26656
ports:
- "26706:26656"
- "26707:26657"
- "8595:8545"
volumes:
- regulatory-data:/home/genex/.genexd
depends_on:
- genex-node-1
# =============================================
# Smart Contract Deployer (one-shot job)
# =============================================
contract-deployer:
build:
context: ./genex-contracts
dockerfile: Dockerfile
container_name: genex-contract-deployer
environment:
- RPC_URL=http://genex-node-1:8545
- DEPLOYER_PRIVATE_KEY=${DEPLOYER_PRIVATE_KEY:-}
- USDC_ADDRESS=${USDC_ADDRESS:-}
- FEE_COLLECTOR=${FEE_COLLECTOR:-}
networks:
- genex-net
depends_on:
- genex-node-1
profiles:
- deploy
volumes:
node1-data:
node2-data:
node3-data:
inst1-data:
inst2-data:
regulatory-data:
networks:
genex-net:
driver: bridge
ipam:
config:
- subnet: 172.28.0.0/16