Files
universe/docker/compose.yml
T
zeekayandHanzo Dev 7417193940 A chain answers under one segment, and the fleet asks for it there
luxd moved chain APIs from /v1/bc/<alias> to /v1/chain/<alias> and deleted the
old prefix, and health moved onto typed ops at /v1/health/ops/*. Both landed in
node 1.36.181. Nothing here could move before that image existed, and the image
cannot roll out while the manifests still ask for addresses it no longer serves,
so the pin and the paths move in one commit.

What moved:
  image    1.36.171 -> 1.36.181, digest with it, on devnet/testnet/mainnet
  internal exchange-api, lux-hb2, rpc-tip-gate, the luxd startup script
  probes   /v1/health/liveness -> /v1/health/ops/liveness (bare /v1/health,
           which the local compose healthcheck used, no longer routes at all)
  public   the devnet and testnet gateway routes

Comments that RECORD an observation keep their original spelling: a note saying
/v1/bc/zoo/rpc returned 404 on a given date is a fact about that date, and
rewriting it would make the record false. Only live addresses moved.

1.36.181 also carries chains v1.7.38, so the deployed node has the zkvm
content-derived transaction identity.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-30 16:17:20 -07:00

234 lines
5.5 KiB
YAML

networks:
lux-network:
driver: bridge
volumes:
postgres-data:
ipfs-data:
node1-data:
node2-data:
node3-data:
node4-data:
node5-data:
services:
# Shared PostgreSQL
postgres:
image: ghcr.io/hanzoai/sql:latest
container_name: lux-postgres
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
volumes:
- postgres-data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
ports:
- "5432:5432"
networks:
- lux-network
healthcheck:
test: ["CMD", "pg_isready", "-U", "postgres"]
interval: 10s
# Unified IPFS
ipfs:
image: ipfs/go-ipfs:latest
container_name: lux-ipfs
restart: always
environment:
IPFS_PROFILE: server
volumes:
- ipfs-data:/data/ipfs
ports:
- "5001:5001"
- "8080:8080"
- "4001:4001"
networks:
- lux-network
command: daemon --migrate=true --enable-pubsub-experiment
# 5 Lux validator nodes
lux-node-1:
build:
context: ..
dockerfile: docker/Dockerfile.node
container_name: lux-node-1
restart: always
volumes:
- node1-data:/app/data
- ../hanzo-genesis.json:/app/genesis.json:ro
ports:
- "9650:9650"
- "9651:9651"
networks:
- lux-network
command: >
--network-id=96369
--http-host=0.0.0.0
--http-port=9650
--staking-port=9651
--staking-enabled=false
--sybil-protection-enabled=false
--snow-sample-size=1
--snow-quorum-size=1
--index-enabled=true
--api-admin-enabled=true
--data-dir=/app/data
lux-node-2:
extends: lux-node-1
container_name: lux-node-2
volumes:
- node2-data:/app/data
- ../hanzo-genesis.json:/app/genesis.json:ro
ports:
- "9660:9650"
- "9661:9651"
command: >
--network-id=96369
--http-host=0.0.0.0
--http-port=9650
--staking-port=9651
--staking-enabled=false
--sybil-protection-enabled=false
--snow-sample-size=1
--snow-quorum-size=1
--bootstrap-ips=lux-node-1:9651
--data-dir=/app/data
lux-node-3:
extends: lux-node-1
container_name: lux-node-3
volumes:
- node3-data:/app/data
- ../hanzo-genesis.json:/app/genesis.json:ro
ports:
- "9670:9650"
- "9671:9651"
command: >
--network-id=96369
--http-host=0.0.0.0
--http-port=9650
--staking-port=9651
--staking-enabled=false
--sybil-protection-enabled=false
--snow-sample-size=1
--snow-quorum-size=1
--bootstrap-ips=lux-node-1:9651
--data-dir=/app/data
lux-node-4:
extends: lux-node-1
container_name: lux-node-4
volumes:
- node4-data:/app/data
- ../hanzo-genesis.json:/app/genesis.json:ro
ports:
- "9680:9650"
- "9681:9651"
command: >
--network-id=96369
--http-host=0.0.0.0
--http-port=9650
--staking-port=9651
--staking-enabled=false
--sybil-protection-enabled=false
--snow-sample-size=1
--snow-quorum-size=1
--bootstrap-ips=lux-node-1:9651
--data-dir=/app/data
lux-node-5:
extends: lux-node-1
container_name: lux-node-5
volumes:
- node5-data:/app/data
- ../hanzo-genesis.json:/app/genesis.json:ro
ports:
- "9690:9650"
- "9691:9651"
command: >
--network-id=96369
--http-host=0.0.0.0
--http-port=9650
--staking-port=9651
--staking-enabled=false
--sybil-protection-enabled=false
--snow-sample-size=1
--snow-quorum-size=1
--bootstrap-ips=lux-node-1:9651
--data-dir=/app/data
# Block Explorers
explorer-base:
image: ghcr.io/luxfi/explorer:latest
restart: always
environment:
ETHEREUM_JSONRPC_VARIANT: geth
ETHEREUM_JSONRPC_HTTP_URL: http://lux-node-1:9650/v1/chain/C/rpc
ETHEREUM_JSONRPC_WS_URL: ws://lux-node-1:9650/v1/chain/C/ws
POOL_SIZE: 50
ECTO_USE_SSL: "false"
HEART_BEAT_TIMEOUT: 30
BLOCKSCOUT_HOST: localhost
BLOCKSCOUT_PROTOCOL: http
DISABLE_EXCHANGE_RATES: "false"
CHECKSUM_FUNCTION: eth
networks:
- lux-network
depends_on:
- postgres
- lux-node-1
lux-explorer:
extends: explorer-base
container_name: lux-explorer
environment:
DATABASE_URL: postgresql://postgres:postgres@postgres:5432/explorer_lux
NETWORK: LUX
SUBNETWORK: Mainnet
COIN: LUX
COIN_NAME: LUX
CHAIN_ID: 96369
ports:
- "4000:4000"
hanzo-explorer:
extends: explorer-base
container_name: hanzo-explorer
environment:
DATABASE_URL: postgresql://postgres:postgres@postgres:5432/explorer_hanzo
NETWORK: HANZO
SUBNETWORK: AI Network
COIN: AI
COIN_NAME: AI Token
CHAIN_ID: 36963
ports:
- "4003:4000"
zoo-explorer:
extends: explorer-base
container_name: zoo-explorer
environment:
DATABASE_URL: postgresql://postgres:postgres@postgres:5432/explorer_zoo
NETWORK: ZOO
SUBNETWORK: Zoo Network
COIN: ZOO
COIN_NAME: ZOO Token
CHAIN_ID: 200200
ports:
- "4001:4000"
spc-explorer:
extends: explorer-base
container_name: spc-explorer
environment:
DATABASE_URL: postgresql://postgres:postgres@postgres:5432/explorer_spc
NETWORK: SPC
SUBNETWORK: Sparkle Pony Club
COIN: SPC
COIN_NAME: SPC Token
CHAIN_ID: 36911
ports:
- "4002:4000"