From 10ed297386a0a8617aa2a433bc307cb4c39268ac Mon Sep 17 00:00:00 2001 From: nick_h Date: Wed, 14 Jan 2026 12:16:46 -0500 Subject: [PATCH 1/6] feat(lighthouse): expose HTTP API port for cross-stack connectivity --- docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yml b/docker-compose.yml index 201def4..bb95be7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -53,6 +53,7 @@ services: - ${LIGHTHOUSE_PORT_P2P:-9000}:9000/tcp # P2P TCP - 5054:5054/tcp # P2P TCP - ${LIGHTHOUSE_PORT_P2P:-9000}:9000/udp # P2P UDP + - ${LIGHTHOUSE_IP_HTTP:-127.0.0.1}:${LIGHTHOUSE_PORT_HTTP:-5052}:5052 labels: - "alloy-monitored=${LIGHTHOUSE_ALLOY_MONITORED:-true}" command: | From 4d9d18b54d74ac1cbafb84359035db5c4d66f461 Mon Sep 17 00:00:00 2001 From: nick_h Date: Wed, 14 Jan 2026 13:04:24 -0500 Subject: [PATCH 2/6] fix(cl):expose P2P (tcp+udp) and HTTP ports for all CL clients --- compose-cl.yml | 22 +++++++++++++++++----- docker-compose.yml | 2 +- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/compose-cl.yml b/compose-cl.yml index 37605e9..00221d4 100644 --- a/compose-cl.yml +++ b/compose-cl.yml @@ -30,7 +30,9 @@ services: - --builder-url=http://${MEV}:18550 - --max-empty-slots=4096 ports: - - ${CL_PORT_P2P:-9000}:9000 # P2P TCP+UDP + - ${CL_PORT_P2P:-9000}:9000/tcp + - ${CL_PORT_P2P:-9000}:9000/udp + - ${CL_IP_HTTP:-127.0.0.1}:${CL_PORT_HTTP:-5052}:5052 volumes: - ./data/cl-grandine:/root/.grandine - ./jwt:/jwt:ro @@ -66,7 +68,9 @@ services: --metrics-port=5054 --metrics-allow-origin="*" ports: - - ${CL_PORT_P2P:-9000}:9000 # P2P TCP+UDP + - ${CL_PORT_P2P:-9000}:9000/tcp + - ${CL_PORT_P2P:-9000}:9000/udp + - ${CL_IP_HTTP:-127.0.0.1}:${CL_PORT_HTTP:-5052}:5052 volumes: - ./data/lighthouse:/opt/app/beacon # Keep data in lighthouse and not cl-lighthouse for backwards compatibility - ./jwt:/opt/jwt @@ -80,7 +84,7 @@ services: cl-teku: profiles: [cl-teku] - image: consensys/teku:${VC_VERSION:-25.12.0} + image: consensys/teku:${TEKU_VERSION:-25.12.0} restart: unless-stopped labels: - "alloy-monitored=${CL_TEKU_ALLOY_MONITORED:-true}" @@ -99,6 +103,10 @@ services: --metrics-interface=0.0.0.0 --metrics-port=5054 --metrics-host-allowlist="*" + ports: + - ${CL_PORT_P2P:-9000}:9000/tcp + - ${CL_PORT_P2P:-9000}:9000/udp + - ${CL_IP_HTTP:-127.0.0.1}:${CL_PORT_HTTP:-5052}:5052 volumes: - ./data/cl-teku:/opt/teku/data - ./jwt:/jwt:ro @@ -112,7 +120,7 @@ services: cl-lodestar: profiles: [cl-lodestar] - image: chainsafe/lodestar:${VC_VERSION:-v1.38.0} + image: chainsafe/lodestar:${LODESTAR_VERSION:-v1.38.0} restart: unless-stopped labels: - "alloy-monitored=${CL_LODESTAR_ALLOY_MONITORED:-true}" @@ -131,7 +139,11 @@ services: --metrics --metrics.address=0.0.0.0 --metrics.port=5054 + ports: + - ${CL_PORT_P2P:-9000}:9000/tcp + - ${CL_PORT_P2P:-9000}:9000/udp + - ${CL_IP_HTTP:-127.0.0.1}:${CL_PORT_HTTP:-5052}:5052 volumes: - ./data/cl-lodestar:/opt/lodestar/data - ./jwt:/jwt:ro - networks: [dvnode] + networks: [dvnode] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index bb95be7..a38d81d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -53,7 +53,7 @@ services: - ${LIGHTHOUSE_PORT_P2P:-9000}:9000/tcp # P2P TCP - 5054:5054/tcp # P2P TCP - ${LIGHTHOUSE_PORT_P2P:-9000}:9000/udp # P2P UDP - - ${LIGHTHOUSE_IP_HTTP:-127.0.0.1}:${LIGHTHOUSE_PORT_HTTP:-5052}:5052 + - ${LIGHTHOUSE_IP_HTTP:-127.0.0.1}:${LIGHTHOUSE_PORT_HTTP:-5052}:5052 # BN TCP labels: - "alloy-monitored=${LIGHTHOUSE_ALLOY_MONITORED:-true}" command: | From 9e905ce7b5320610814f29475cf976c046f83077 Mon Sep 17 00:00:00 2001 From: nick_h Date: Wed, 14 Jan 2026 16:53:46 -0500 Subject: [PATCH 3/6] feat(charon): enables cross-stack connectivity from charon --- docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index a38d81d..caf9358 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -109,6 +109,8 @@ services: labels: - "alloy-monitored=${CHARON_ALLOY_MONITORED:-true}" networks: [dvnode] + extra_hosts: + - "host.docker.internal:host-gateway" volumes: - .charon:/opt/charon/.charon restart: unless-stopped From e5bff1b4a1217918c78e805b37df8b5b4fae5413 Mon Sep 17 00:00:00 2001 From: nickh-obol Date: Thu, 15 Jan 2026 08:07:42 -0500 Subject: [PATCH 4/6] Update compose-cl.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Oisín Kyne <4981644+OisinKyne@users.noreply.github.com> Signed-off-by: nickh-obol --- compose-cl.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compose-cl.yml b/compose-cl.yml index 00221d4..4bcad2e 100644 --- a/compose-cl.yml +++ b/compose-cl.yml @@ -120,7 +120,7 @@ services: cl-lodestar: profiles: [cl-lodestar] - image: chainsafe/lodestar:${LODESTAR_VERSION:-v1.38.0} + image: chainsafe/lodestar:${CL_LODESTAR_VERSION:-v1.38.0} restart: unless-stopped labels: - "alloy-monitored=${CL_LODESTAR_ALLOY_MONITORED:-true}" From d2fe5c0f5130681f871ada363af48dc3056bda72 Mon Sep 17 00:00:00 2001 From: nickh-obol Date: Thu, 15 Jan 2026 08:08:19 -0500 Subject: [PATCH 5/6] Update compose-cl.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Oisín Kyne <4981644+OisinKyne@users.noreply.github.com> Signed-off-by: nickh-obol --- compose-cl.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compose-cl.yml b/compose-cl.yml index 4bcad2e..7e62a34 100644 --- a/compose-cl.yml +++ b/compose-cl.yml @@ -84,7 +84,7 @@ services: cl-teku: profiles: [cl-teku] - image: consensys/teku:${TEKU_VERSION:-25.12.0} + image: consensys/teku:${CL_TEKU_VERSION:-25.12.0} restart: unless-stopped labels: - "alloy-monitored=${CL_TEKU_ALLOY_MONITORED:-true}" From da073e822ec502cfeefb07333c7baf93e33825e5 Mon Sep 17 00:00:00 2001 From: nick_h Date: Thu, 15 Jan 2026 08:37:38 -0500 Subject: [PATCH 6/6] feat(cl): add CL IP and port options to .env, remove holesky .env --- .env.sample.holesky | 231 -------------------------------------------- .env.sample.hoodi | 4 + .env.sample.mainnet | 4 + 3 files changed, 8 insertions(+), 231 deletions(-) delete mode 100644 .env.sample.holesky diff --git a/.env.sample.holesky b/.env.sample.holesky deleted file mode 100644 index e4d41b8..0000000 --- a/.env.sample.holesky +++ /dev/null @@ -1,231 +0,0 @@ -# This is a sample environment file that allows overriding default configuration defined -# in docker-compose.yml. Rename this file to `.env` and then uncomment and set any variable below. - -# Overrides network for all the relevant services. -NETWORK=holesky - -# Execution layer client to be used in a DV setup. Uncomment only the desired client. -EL=el-nethermind -#EL=el-reth -#EL=el-none - -# Consensus layer client to be used in a DV setup. Uncomment only the desired client. -CL=cl-lighthouse -#CL=cl-grandine -#CL=cl-teku -#CL=cl-lodestar -#CL=cl-none - -# Validator client to be used in a DV setup. Uncomment only the desired client. -VC=vc-lodestar -#VC=vc-nimbus -#VC=vc-prysm -#VC=vc-teku - -# MEV client to be used in a DV setup. Uncomment only the desired client. -MEV=mev-mevboost -#MEV=mev-commitboost -#MEV=mev-none - -# Do not edit. These profiles and files dictate Docker which client types and from where to start for execution, consensus, validator and MEV. -# The actual adjustable values are specified above -COMPOSE_PROFILES=${EL},${CL},${VC},${MEV} -COMPOSE_FILE=compose-el.yml:compose-cl.yml:compose-vc.yml:compose-mev.yml:docker-compose.yml - -# Enables Builder API. -BUILDER_API_ENABLED=true - -######### Execution Layer Config ######### - -# EL host exposed IPs and ports. -#EL_PORT_P2P= -#EL_IP_HTTP= -#EL_PORT_HTTP= -#EL_IP_ENGINE= -#EL_PORT_ENGINE= - -# Nethermind docker container image version. -# See available tags https://hub.docker.com/r/nethermind/nethermind/tags -#NETHERMIND_VERSION= - -# Reth docker container image version. -# See available tags https://github.com/paradigmxyz/reth/pkgs/container/reth -#RETH_VERSION= - -######### Consensus Layer Config ######### - -# CL beacon node host exposed ports. -#CL_PORT_P2P= - -# Lighthouse becon node checkpoint sync URL used by consensus layer to fast sync. -LIGHTHOUSE_CHECKPOINT_SYNC_URL=https://checkpoint-sync.holesky.ethpandaops.io/ - -# Lighthouse beacon node docker container image version. -# See available tags https://hub.docker.com/r/sigp/lighthouse/tags. -#CL_LIGHTHOUSE_VERSION= - -# Grandine beacon node docker container image version. -# See available tags https://hub.docker.com/r/sifrai/grandine/tags. -#CL_GRANDINE_VERSION= - -# Teku beacon node docker container image version. -# See available tags https://hub.docker.com/r/consensys/teku/tags -#CL_TEKU_VERSION= - -# Lodestar beacon node docker container image version. -# See available tags https://hub.docker.com/r/chainsafe/lodestar/tags -#CL_LODESTAR_VERSION= - -######### Validator Client Config ######### - -# Override prometheus metrics port for validator client. -#VC_PORT_METRICS= - -# Lodestar validator client docker container image version. -# See available tags https://hub.docker.com/r/chainsafe/lodestar/tags -#VC_LODESTAR_VERSION= - -#VC_LODESTAR_BUILDER_SELECTION= - -# Nimbus validator client docker container image version. -# See available tags https://hub.docker.com/r/statusim/nimbus-validator-client/tags -#VC_NIMBUS_VERSION= - -# Prysm validator client docker container image version. -# See available tags https://hub.docker.com/r/offchainlabs/prysm-validator/tags -#VC_PRYSM_VERSION= - -# Teku validator client docker container image version. -# See available tags https://hub.docker.com/r/consensys/teku/tags -#VC_TEKU_VERSION= - -######### MEV Config ######### - -# MEV timeouts. -# N.B.: Commit-boost uses TOML configuration instead of env variables. Configure those at commit-boost/. -#MEV_TIMEOUT_GETHEADER= -#MEV_TIMEOUT_GETPAYLOAD= -#MEV_TIMEOUT_REGVAL= - -# Comma separated list of MEV relays. You can choose public relays from https://enchanted-direction-844.notion.site/6d369eb33f664487800b0dedfe32171e?v=d255247c822c409f99c498aeb6a4e51d. -# N.B.: Commit-boost uses TOML configuration instead of env variables. Configure those at commit-boost/. -MEV_RELAYS=https://0xab78bf8c781c58078c3beb5710c57940874dd96aef2835e7742c866b4c7c0406754376c2c8285a36c630346aa5c5f833@holesky.aestus.live,https://0xb1559beef7b5ba3127485bbbb090362d9f497ba64e177ee2c8e7db74746306efad687f2cf8574e38d70067d40ef136dc@relay-stag.ultrasound.money,https://0xaa58208899c6105603b74396734a6263cc7d947f444f396a90f7b7d3e65d102aec7e5e5291b27e08d02c50a050825c2f@holesky.titanrelay.xyz - -# MEV-Boost docker container image version. -#MEV_MEVBOOST_VERSION= - -# Commit-Boost docker container image version. -#MEV_COMMITBOOST_VERSION= - -######### Charon Config ######### - -# Charon docker container image version. -# See available tags https://hub.docker.com/r/obolnetwork/charon/tags. -#CHARON_VERSION= - -# Define custom relays. One or more ENRs or an http URL that return an ENR. Use a comma separated list excluding spaces. -#CHARON_P2P_RELAYS= - -# Connect to one or more external beacon nodes. Use a comma separated list excluding spaces. -#CHARON_BEACON_NODE_ENDPOINTS= - -# Supply optional HTTP headers during beacon node requests. These headers are sent to all primary and fallback endpoints, be sure to rely on trusted BNs only. -#CHARON_BEACON_NODE_HEADERS= - -# Specify one or more fallback beacon node endpoints, which are called in the case that the primary beacon nodes are offline or unhealthy. -# Use fallback beacon nodes sparingly, particularly if latency is high, which can impact DV cluster performance. -#CHARON_FALLBACK_BEACON_NODE_ENDPOINTS= - -# Increase the duration charon will wait for requests to the beacon node. -#CHARON_BEACON_NODE_TIMEOUT= - -# Increase the duration charon will wait while publishing data to the beacon node. -#CHARON_BEACON_NODE_SUBMIT_TIMEOUT= - -# The address of the execution engine JSON-RPC API. -#CHARON_EXECUTION_CLIENT_RPC_ENDPOINT= - -# Override the charon logging level; debug, info, warning, error. -#CHARON_LOG_LEVEL= - -# Override the charon logging format; console, logfmt, json. Grafana panels require logfmt. -#CHARON_LOG_FORMAT= - -# Advertise a custom external DNS hostname or IP address for libp2p peer discovery. -#CHARON_P2P_EXTERNAL_HOSTNAME= - -# Loki log aggregation server addresses. Disable loki log aggregation by setting an empty address. -#CHARON_LOKI_ADDRESSES= - -# Charon Cluster Name. Mandatory to send logs with Alloy and metrics with Prometheus. -#CLUSTER_NAME="" - -# Charon Cluster Peer. Mandatory to send logs with Alloy and metrics with Prometheus. -#CLUSTER_PEER="" - -# Nickname to identify this charon node on monitoring (max 32 characters). -#CHARON_NICKNAME="" - -# Docker network of running charon node. See `docker network ls`. -#CHARON_DOCKER_NETWORK= - -# Charon host exposed ports. -#CHARON_PORT_P2P_TCP= - -######### Monitoring Config ######### - -# Grafana docker container image version. -# See available tags https://github.com/grafana/grafana/releases. -#GRAFANA_VERSION= - -# Grafana host exposed IP and port. -#MONITORING_IP_GRAFANA= -#MONITORING_PORT_GRAFANA= - -# Prometheus docker container image version. -# See available tags https://github.com/prometheus/prometheus/releases. -#PROMETHEUS_VERSION= - -# Prometheus remote write token used for accessing external prometheus. -#PROM_REMOTE_WRITE_TOKEN= - -# Prometheus service owner used to uniquely identify user from which metrics are pushed. -#SERVICE_OWNER=charon_user - -# Uncomment these if you have log exporting with Alloy -# and want to disable log export on a particular container. -#EL_NETHERMIND_ALLOY_MONITORED=false -#EL_RETH_ALLOY_MONITORED=false -#CL_LIGHTHOUSE_ALLOY_MONITORED=false -#CL_GRANDINE_ALLOY_MONITORED=false -#CL_TEKU_ALLOY_MONITORED=false -#CL_LODESTAR_ALLOY_MONITORED=false -#CHARON_ALLOY_MONITORED=false -#VC_LODESTAR_ALLOY_MONITORED=false -#VC_NIMBUS_ALLOY_MONITORED=false -#VC_PRYSM_ALLOY_MONITORED=false -#VC_TEKU_ALLOY_MONITORED=false -#MEV_MEV_BOOST_ALLOY_MONITORED=false -#MEV_COMMIT_BOOST_ALLOY_MONITORED=false -#EJECTOR_ALLOY_MONITORED=false -#DV_EXIT_ALLOY_MONITORED=false - -######### Debug Config ######### - -# This applies to compose-debug.yml only. - -# Prometheus Node exporter docker container image version. -# See available tags https://hub.docker.com/r/bitnamilegacy/node-exporter/tags. -#NODE_EXPORTER_VERSION= - -# Grafana Tempo docker container image version. -# Use Grafana Explore to access Tempo data. -# See available tags https://hub.docker.com/r/grafana/tempo/tags. -#TEMPO_VERSION= - -# Grafana Loki docker container image version. -# See available tags https://hub.docker.com/r/grafana/loki/tags. -#LOKI_VERSION= - -# Loki host exposed port. -#MONITORING_PORT_LOKI= diff --git a/.env.sample.hoodi b/.env.sample.hoodi index 7a710b0..6b6a5fa 100644 --- a/.env.sample.hoodi +++ b/.env.sample.hoodi @@ -56,6 +56,10 @@ BUILDER_API_ENABLED=true # CL beacon node host exposed ports. #CL_PORT_P2P= +# To expose the beacon API to an external network, set this to the listen IP address. Use with caution. +#CL_IP_HTTP= +# Beacon node api port +#CL_PORT_HTTP # Lighthouse becon node checkpoint sync URL used by consensus layer to fast sync. LIGHTHOUSE_CHECKPOINT_SYNC_URL=https://checkpoint-sync.hoodi.ethpandaops.io/ diff --git a/.env.sample.mainnet b/.env.sample.mainnet index 04dc142..b9ec341 100644 --- a/.env.sample.mainnet +++ b/.env.sample.mainnet @@ -56,6 +56,10 @@ BUILDER_API_ENABLED=true # CL beacon node host exposed ports. #CL_PORT_P2P= +# To expose the beacon API to an external network, set this to the listen IP address. Use with caution. +#CL_IP_HTTP= +# Beacon node api port +#CL_PORT_HTTP # Lighthouse becon node checkpoint sync URL used by consensus layer to fast sync. LIGHTHOUSE_CHECKPOINT_SYNC_URL=https://mainnet.checkpoint.sigp.io/