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

One profile now covers production. The workspace dropped its separate maxperf profile, so release is what the published image is built from and what a local --build reproduces. It sets opt-level = 3, lto = "thin", codegen-units = 16, and strips symbols.

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