# Devnet Configuration - Network ID 5, Ports 9840+ # Usage: docker compose -f compose.devnet.yml up -d # # Development network for protocol testing and experimentation version: "3.8" networks: devnet: driver: bridge ipam: config: - subnet: 172.32.0.0/24 volumes: devnet-postgres: devnet-redis: devnet-node1-data: devnet-node2-data: devnet-node3-data: devnet-node4-data: devnet-node5-data: x-node-common: &node-common image: ghcr.io/luxfi/node:${NODE_VERSION:-latest} restart: unless-stopped networks: - devnet extra_hosts: - "host.docker.internal:host-gateway" environment: NETWORK_ID: 3 services: # Infrastructure devnet-postgres: image: ghcr.io/hanzoai/sql:0.1.0 container_name: devnet-postgres restart: unless-stopped environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: devnet volumes: - devnet-postgres:/var/lib/postgresql/data ports: - "15434:5432" networks: - devnet healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5 devnet-redis: image: ghcr.io/hanzoai/kv:0.1.0 container_name: devnet-redis restart: unless-stopped command: redis-server --appendonly yes volumes: - devnet-redis:/data ports: - "16381:6379" networks: - devnet # Bootstrap Node (Node 1) - Dev network with fresh genesis devnet-node-1: <<: *node-common container_name: devnet-node-1 volumes: - devnet-node1-data:/app/data - ~/.lux/keys/node0:/app/keys:ro - ../genesis/configs/devnet:/app/genesis:ro ports: - "9840:9630" - "9841:9631" command: > --network-id=3 --http-host=0.0.0.0 --http-port=9630 --staking-port=9631 --staking-host=0.0.0.0 --network-allow-private-ips=true --genesis-file=/app/genesis/genesis.json --staking-tls-cert-file=/app/keys/staking/staker.crt --staking-tls-key-file=/app/keys/staking/staker.key --staking-signer-key-file=/app/keys/bls/private.key --index-enabled --api-admin-enabled --data-dir=/app/data --log-level=debug healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9630/v1/health"] interval: 30s timeout: 10s start_period: 60s retries: 3 devnet-node-2: <<: *node-common container_name: devnet-node-2 volumes: - devnet-node2-data:/app/data - ~/.lux/keys/node1:/app/keys:ro - ../genesis/configs/devnet:/app/genesis:ro ports: - "9842:9630" - "9843:9631" command: > --network-id=3 --http-host=0.0.0.0 --http-port=9630 --staking-port=9631 --network-allow-private-ips=true --genesis-file=/app/genesis/genesis.json --staking-tls-cert-file=/app/keys/staking/staker.crt --staking-tls-key-file=/app/keys/staking/staker.key --staking-signer-key-file=/app/keys/bls/private.key --bootstrap-ips=devnet-node-1:9631 --bootstrap-ids=NodeID-FrtEjhat6RUqjEWCJgYZKqBaxY2Woyy5G --data-dir=/app/data --log-level=debug depends_on: devnet-node-1: condition: service_healthy devnet-node-3: <<: *node-common container_name: devnet-node-3 volumes: - devnet-node3-data:/app/data - ~/.lux/keys/node2:/app/keys:ro - ../genesis/configs/devnet:/app/genesis:ro ports: - "9844:9630" - "9845:9631" command: > --network-id=3 --http-host=0.0.0.0 --http-port=9630 --staking-port=9631 --network-allow-private-ips=true --genesis-file=/app/genesis/genesis.json --staking-tls-cert-file=/app/keys/staking/staker.crt --staking-tls-key-file=/app/keys/staking/staker.key --staking-signer-key-file=/app/keys/bls/private.key --bootstrap-ips=devnet-node-1:9631 --bootstrap-ids=NodeID-FrtEjhat6RUqjEWCJgYZKqBaxY2Woyy5G --data-dir=/app/data --log-level=debug depends_on: devnet-node-1: condition: service_healthy devnet-node-4: <<: *node-common container_name: devnet-node-4 volumes: - devnet-node4-data:/app/data - ~/.lux/keys/node3:/app/keys:ro - ../genesis/configs/devnet:/app/genesis:ro ports: - "9846:9630" - "9847:9631" command: > --network-id=3 --http-host=0.0.0.0 --http-port=9630 --staking-port=9631 --network-allow-private-ips=true --genesis-file=/app/genesis/genesis.json --staking-tls-cert-file=/app/keys/staking/staker.crt --staking-tls-key-file=/app/keys/staking/staker.key --staking-signer-key-file=/app/keys/bls/private.key --bootstrap-ips=devnet-node-1:9631 --bootstrap-ids=NodeID-FrtEjhat6RUqjEWCJgYZKqBaxY2Woyy5G --data-dir=/app/data --log-level=debug depends_on: devnet-node-1: condition: service_healthy devnet-node-5: <<: *node-common container_name: devnet-node-5 volumes: - devnet-node5-data:/app/data - ~/.lux/keys/node4:/app/keys:ro - ../genesis/configs/devnet:/app/genesis:ro ports: - "9848:9630" - "9849:9631" command: > --network-id=3 --http-host=0.0.0.0 --http-port=9630 --staking-port=9631 --network-allow-private-ips=true --genesis-file=/app/genesis/genesis.json --staking-tls-cert-file=/app/keys/staking/staker.crt --staking-tls-key-file=/app/keys/staking/staker.key --staking-signer-key-file=/app/keys/bls/private.key --bootstrap-ips=devnet-node-1:9631 --bootstrap-ids=NodeID-FrtEjhat6RUqjEWCJgYZKqBaxY2Woyy5G --data-dir=/app/data --log-level=debug depends_on: devnet-node-1: condition: service_healthy # LXD Gateway for DEX devnet-gateway: build: context: ../dex dockerfile: Dockerfile image: lxd-gateway:devnet container_name: devnet-gateway restart: unless-stopped ports: - "8082:8080" environment: LUX_RPC_URL: http://devnet-node-1:9630/v1/chain/c/rpc ZOO_RPC_URL: http://devnet-node-1:9630/v1/chain/zoo/rpc LOG_LEVEL: debug networks: - devnet depends_on: devnet-node-1: condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/health"] interval: 30s timeout: 10s retries: 3