Files
bootnode/infra
zeekay d5fbe67fad feat(lux): graphical fleet dashboard at lux.cloud
Turn lux.cloud into a live graphical fleet dashboard for the managed luxd
fleet (devnet/testnet/mainnet, 5 validators each on do-sfo3-lux-k8s).

Backend (read-only collector, no mutations, no monolith dependency):
- core/chains/lux_fleet.py: reads the operator LuxNetwork CR (lux.cloud/v1)
  for validators/version/plugin-set/phase, lists luxd-N pods + per-pod LB
  Services, and queries luxd JSON-RPC per node (info.getNodeVersion/getNodeID/
  peers/isBootstrapped, C-Chain eth_blockNumber, P-Chain platform.getHeight),
  plus a native D-Chain DEX summary. Aggregates all 3 nets concurrently.
- fleet_app.py: minimal standalone FastAPI exposing GET /v1/fleets/lux/overview
  (public, read-only). Reuses the bootnode api image; isolated from the
  (currently import-broken) monolith.
- fleets/__init__.py: same overview endpoint also mounted on the main router.
- Uses a READ-ONLY lux-k8s kubeconfig from KMS; only public chain data leaves.

Frontend (Next.js 16, Lux white-label, auto by hostname):
- lib/fleet.ts: typed client + health/status derivations.
- components/lux/fleet-dashboard.tsx: graphical multi-net dashboard — totals,
  world topology map, per-network cards (phase, version, plugin-set, peers,
  C-Chain height, DEX state, per-chain C/P/X/D bootstrap), expandable per-node
  tables (node ID, version, peers, heights). Auto-refresh 15s.
- app/fleet/page.tsx: public /fleet page (the lux.cloud fleet dashboard).
- components/lux/fleet-strip.tsx + page.tsx: live fleet status strip on the
  landing hero.
- navbar + dashboard nav: Fleet links; register existing Lux fleet mgmt page.
- brand.ts: add skillsOrg (fixes pre-existing typecheck/build break).

Deploy: infra/k8s/lux-fleet.yaml — lux-fleet Deployment/Service + ExternalSecret
(lux-k8s RO kubeconfig from KMS) + ingress path /v1/fleets/lux/overview on
api.cloud.lux.network.

Verified: collector live against all 3 nets (real heights/peers/versions/DEX);
api + collector tests pass (8/8); web typecheck + production build green;
/fleet renders live data in browser (screenshot).
2026-07-25 12:35:14 -07:00
..

Bootnode Infrastructure

Docker Compose and Kubernetes configurations for running the Bootnode blockchain development platform.

Quick Start

Prerequisites

  • Docker & Docker Compose v2
  • 8GB+ RAM recommended
  • Configure RPC endpoints in .env

Local Development

# Copy environment template
cp .env.example .env

# Edit .env with your RPC endpoints and secrets
vim .env

# Start core services
docker compose up -d

# View logs
docker compose logs -f

# Check health
curl http://localhost:8000/health

Services

Service Port Description
API 8000 Bootnode FastAPI backend
Web 3001 Next.js dashboard
Indexer 5000 Multi-chain blockchain indexer
PostgreSQL 5432 Operational database
Redis 6379 Cache & rate limiting
DataStore 8123 ClickHouse analytics
RabbitMQ 5672, 15672 Message queue

Profiles

# Core services only
docker compose up -d

# With monitoring (Prometheus + Grafana)
docker compose --profile monitoring up -d

# With ERC-4337 bundler
docker compose --profile bundler up -d

# Everything
docker compose --profile monitoring --profile bundler up -d

Scaling

# Scale API horizontally
docker compose up -d --scale api=3

Kubernetes

Deploy to Kubernetes clusters on any cloud provider.

Prerequisites

  • kubectl configured
  • Helm 3 installed
  • Cluster with 3+ nodes (8GB+ RAM each)

Deploy

# Create namespace and secrets
kubectl apply -f k8s/namespace.yaml
kubectl apply -f k8s/secrets.yaml

# Deploy services
kubectl apply -f k8s/

# Check status
kubectl -n bootnode get pods

Cloud-Specific Deployment

# AWS EKS
./cloud/deploy.sh aws

# Google Cloud GKE
./cloud/deploy.sh gcp

# Azure AKS
./cloud/deploy.sh azure

# DigitalOcean DOKS
./cloud/deploy.sh digitalocean

Configuration

Environment Variables

See .env.example for all configuration options.

Key variables:

  • DATABASE_URL - PostgreSQL connection
  • REDIS_URL - Redis connection
  • DATASTORE_URL - ClickHouse connection
  • *_RPC - Chain RPC endpoints

Chain Configuration

Edit config/chains.yaml to enable/disable chains and configure protocols.

ethereum:
  mainnet:
    chain_id: 1
    enabled: true
    protocols:
      - uniswap_v3
      - aave_v3

Monitoring

Prometheus

Access at http://localhost:9091

Metrics available:

  • API request latency
  • RPC call counts
  • Indexer block height
  • Queue depth

Grafana

Access at http://localhost:3000

Default credentials: admin / bootnode

Pre-configured dashboards:

  • API Overview
  • Chain Status
  • Indexer Progress

Troubleshooting

Service won't start

# Check logs
docker compose logs <service>

# Verify dependencies
docker compose ps

Database connection issues

# Ensure postgres is healthy
docker compose exec postgres pg_isready

# Reset database
docker compose down -v
docker compose up -d

High memory usage

# Limit indexer chains
MAX_CHAINS=10 docker compose up -d indexer

Architecture

┌─────────────────────────────────────────────────────────────────┐
│                         Load Balancer                            │
├─────────────────────────────────────────────────────────────────┤
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐            │
│  │   API   │  │   API   │  │   Web   │  │ Indexer │            │
│  └────┬────┘  └────┬────┘  └────┬────┘  └────┬────┘            │
│       │            │            │            │                   │
│       └────────────┴────────────┴────────────┘                   │
│                           │                                      │
│  ┌────────────────────────┴────────────────────────┐            │
│  │                   Data Layer                     │            │
│  │  ┌──────────┐  ┌──────────┐  ┌──────────────┐  │            │
│  │  │PostgreSQL│  │  Redis   │  │  DataStore   │  │            │
│  │  └──────────┘  └──────────┘  └──────────────┘  │            │
│  └──────────────────────────────────────────────────┘            │
└─────────────────────────────────────────────────────────────────┘