Skip to content
BaseHub by wbnns Updated

Deployment

Production runs are best served by the published Docker image, which is built from base/base:

Terminal window
docker pull ghcr.io/base/node-reth:latest

This image bundles both vanilla Reth and Base Reth and can be toggled with the NODE_TYPE environment variable:

Terminal window
# Run Base Reth
docker run ghcr.io/base/node-reth -e NODE_TYPE=base
# Run vanilla Reth
docker run ghcr.io/base/node-reth -e NODE_TYPE=vanilla

The root docker-compose.yml in base/base pulls ghcr.io/base/node:latest unless you say otherwise. To run one specific published release without compiling anything, name its tag:

Terminal window
NODE_TAG=v1.3.0 docker compose up

A pinned tag bypasses the source build completely, so the node starts once the pull finishes. Leave --build off when you pin. Passing it triggers a local compile that takes precedence over the tag you asked for.

Note that v1.3.0 is the earliest release published to ghcr.io/base/node out of base/base. Tags older than that were never pushed to this image path, so they are not reachable by pin.

A handful of variables let you retune the compose file from your shell or a .env file, so you never have to edit the file itself:

VariableDefaultPurpose
NODE_TAGlatestTag pulled from ghcr.io/base/node. Give it a release tag such as v1.3.0 to pin.
NETWORK_ENV.env.mainnetEnv file loaded by the execution and node services. Use .env.sepolia for testnet.
HOST_DATA_DIR./reth-dataHost directory bind-mounted to /data in the execution container. Repoint it at an external volume if you need to.
PROFILEreleaseCargo profile applied when you pass --build. It matches the profile behind the published image.

Running docker compose up --build compiles whatever is in your base/base checkout through the base target of etc/docker/Dockerfile.rust-services. That is the same target the published ghcr.io/base/node image comes from, so a local build and a pinned image lay out their binaries identically.

If you need a custom build:

Terminal window
# Standard release build
just build release

A local --build compiles with release, which sets opt-level = 3, lto = "thin", codegen-units = 16, and strips symbols. Note that this is not the profile behind the image you pull. Base bakes its published images with maxperf, which adds fat LTO and one codegen unit on top of release. Expect a locally built node to behave the same and to benchmark a little slower.

If you need to profile a deployed binary, build the release-symbols variant instead. It keeps release codegen untouched and only restores the symbol table:

Terminal window
cargo build --profile release-symbols --package base-reth-node --bin base-reth-node

A release build leaves the binary at target/release/base-reth-node. See Configuration for the full profile table.

Base Reth Node requires:

  • CPU: Multi-core processor (4+ cores recommended)
  • Memory: 16 GB+ RAM
  • Storage: NVMe SSD with sufficient space for chain state
  • Network: Stable, high-bandwidth connection

See the Configuration Reference for all available options, or run:

Terminal window
./target/release/base-reth-node --help