mirror of
https://github.com/luxfi/dex.git
synced 2026-09-24 00:26:31 +00:00
deploy/testnet: one-command-per-box bring-up for a fleet of standalone `dexd run` venues across two boxes, a cross-arch determinism proof, and a ZAP load/throughput bench (drives the existing cmd/dexbench). - compose.yml + gen-compose.sh: N independent venues/box (default 3, scales to ~11), one ZAP port/node, per-node data dirs, 128GB-box resource caps. - Dockerfile: pure-Go CPU image (dexd + dexbench), native amd64/arm64. - Makefile: make up/bench/verify/down — git pull + one command per box. - topology.md: honest consensus model (independent venues, deterministic per-node genesis, no gossip) + the luxd `dexd plugin` BFT path. - overlay/: opt-in hanzozt (OpenZiti) tunneler for NAT; direct 2.5GbE is the default for true wire numbers. - README.md: exact per-box commands, 128GB sizing, reading bench output. Validated locally: signed place/cross load 0 rejects (cross=1 fill/submit); dexbench -verify across two independent venues PASS (byte-identical 3-fill multi-level sweep).
74 lines
2.5 KiB
Bash
Executable File
74 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# gen-compose.sh — emit compose.gen.yml with N independent dexd venues.
|
|
#
|
|
# Same shape as the hand-written compose.yml (the 3-node reference), generated for
|
|
# any N. Reads .env if present; every value falls back to a sane default.
|
|
#
|
|
# N=11 ./gen-compose.sh # writes compose.gen.yml with 11 venues
|
|
# docker compose -f compose.gen.yml up -d
|
|
#
|
|
# Node i: host port BASE_PORT+i -> container 9099, volume dexN-data, mem/cpu caps.
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")"
|
|
|
|
# Load .env (export every assignment) if it exists.
|
|
if [ -f .env ]; then set -a; . ./.env; set +a; fi
|
|
|
|
N="${N:-3}"
|
|
DEX_IMAGE="${DEX_IMAGE:-dexd-testnet:local}"
|
|
BASE_PORT="${BASE_PORT:-9099}"
|
|
BIND_ADDR="${BIND_ADDR:-0.0.0.0}"
|
|
NODE_MEM="${NODE_MEM:-6g}"
|
|
NODE_CPUS="${NODE_CPUS:-4.0}"
|
|
OUT="${OUT:-compose.gen.yml}"
|
|
|
|
case "$N" in (*[!0-9]*|"") echo "gen-compose: N must be a positive integer (got '$N')" >&2; exit 2;; esac
|
|
[ "$N" -ge 1 ] || { echo "gen-compose: N must be >= 1" >&2; exit 2; }
|
|
|
|
{
|
|
echo "# GENERATED by gen-compose.sh — N=${N}. Do not edit; re-run the generator."
|
|
echo "# ${N} independent dexd venues (own zapdb + own sealer). See topology.md."
|
|
echo
|
|
echo "x-venue: &venue"
|
|
echo " image: ${DEX_IMAGE}"
|
|
echo " restart: unless-stopped"
|
|
echo " stop_grace_period: 30s"
|
|
echo " healthcheck:"
|
|
echo ' test: ["CMD", "nc", "-z", "127.0.0.1", "9099"]'
|
|
echo " interval: 10s"
|
|
echo " timeout: 3s"
|
|
echo " retries: 5"
|
|
echo " start_period: 10s"
|
|
echo " deploy:"
|
|
echo " resources:"
|
|
echo " limits:"
|
|
echo " cpus: \"${NODE_CPUS}\""
|
|
echo " memory: ${NODE_MEM}"
|
|
echo " reservations:"
|
|
echo " memory: 512m"
|
|
echo " ulimits:"
|
|
echo " nofile: { soft: 1048576, hard: 1048576 }"
|
|
echo " networks: [dexnet]"
|
|
echo
|
|
echo "services:"
|
|
for i in $(seq 0 $((N-1))); do
|
|
port=$((BASE_PORT + i))
|
|
echo " dex${i}:"
|
|
echo " <<: *venue"
|
|
echo " container_name: dex${i}"
|
|
echo ' command: ["run", "-addr", "0.0.0.0:9099", "-db", "/data/db"]'
|
|
echo " ports: [\"${BIND_ADDR}:${port}:9099\"]"
|
|
echo " volumes: [\"dex${i}-data:/data\"]"
|
|
echo " labels: { dexd.testnet.node: \"${i}\" }"
|
|
done
|
|
echo
|
|
echo "networks:"
|
|
echo " dexnet:"
|
|
echo " driver: bridge"
|
|
echo
|
|
echo "volumes:"
|
|
for i in $(seq 0 $((N-1))); do echo " dex${i}-data:"; done
|
|
} > "$OUT"
|
|
|
|
echo "wrote ${OUT}: ${N} venues, host ports ${BASE_PORT}..$((BASE_PORT+N-1)) on ${BIND_ADDR}, ${NODE_MEM}/${NODE_CPUS}cpu each"
|