Running Juno
You can run a Juno node using several methods:
- Docker container or Standalone binary (see below)
- Building from source
- Kubernetes with Helm
- Google Cloud Platform (GCP)
You can use a snapshot to quickly synchronise your node with the network. Check out the Sync from a Snapshot guide to get started.
- Docker
- Standalone Binary
1. Get the Docker image
Juno Docker images can be found at the nethermind/juno repository on Docker Hub. Download the latest image:
docker pull nethermind/juno
You can also build the image locally:
# Clone the Juno repository
git clone https://github.com/NethermindEth/juno
cd juno
# Build the Docker image
docker build -t nethermind/juno:latest .
2. Run the Docker container
# Prepare the database directory
mkdir -p juno_mainnet
# Run the container
docker run -d \
--name juno \
-p 6060:6060 \
-p 6061:6061 \
-v $(pwd)/juno_mainnet:/snapshots/juno_mainnet \
nethermind/juno \
--http \
--http-port 6060 \
--http-host 0.0.0.0 \
--ws \
--ws-port 6061 \
--ws-host 0.0.0.0 \
--eth-node <YOUR-ETH-NODE> \
--db-path /snapshots/juno_mainnet
You can view logs from the Docker container using the following command:
docker logs -f juno
1. Download the binary
Download the standalone binary from Juno's GitHub Releases as a ZIP archive for Linux and MacOS (amd64 and arm64). For Windows users, consider running Juno via Docker instead.
2. Run the binary
# Prepare the database directory
mkdir -p juno_mainnet
# Run the binary
./juno \
--http \
--http-port 6060 \
--http-host 0.0.0.0 \
--ws \
--ws-port 6061 \
--ws-host 0.0.0.0 \
--eth-node <YOUR-ETH-NODE> \
--db-path ./juno_mainnet
Replace <YOUR-ETH-NODE> with your actual Ethereum node address. If you're using Infura, it might look something like wss://mainnet.infura.io/ws/v3/your-infura-project-id. Make sure you use the WebSockets URL (ws/wss) and not the HTTP URL (http/https).
You can view logs from the standalone binary by redirecting the output to a file:
./juno \
--http \
--http-port 6060 \
--http-host 0.0.0.0 \
--ws \
--ws-port 6061 \
--ws-host 0.0.0.0 \
--eth-node <YOUR-ETH-NODE> \
--db-path ./juno_mainnet \
> juno.log 2>&1
The --ws, --ws-port, and --ws-host options enable the WebSocket RPC server, which is required for subscriptions like starknet_subscribeNewHeads. Check out the WebSockets guide to learn more.
Building from source
You can build the Juno binary or Docker image from the source code to access the latest updates or specific versions.
- Docker
- Standalone Binary
Building the Docker image requires only Docker.
1. Clone the repository
git clone https://github.com/NethermindEth/juno
cd juno
You can use git tag -l to view specific version tags.
2. Build the Docker image
docker build -t nethermind/juno:latest .
3. Run the Docker container
# Prepare the database directory
mkdir -p juno_mainnet
# Run the container
docker run -d \
--name juno \
-p 6060:6060 \
-p 6061:6061 \
-v $(pwd)/juno_mainnet:/snapshots/juno_mainnet \
nethermind/juno \
--http \
--http-port 6060 \
--http-host 0.0.0.0 \
--ws \
--ws-port 6061 \
--ws-host 0.0.0.0 \
--eth-node <YOUR-ETH-NODE> \
--db-path /snapshots/juno_mainnet
Prerequisites
- Golang 1.26 or later
- Rust 1.94.1 or higher.
- C compiler:
gccorclang - jemalloc
- Ubuntu
- MacOS (Homebrew)
sudo apt-get install -y build-essential make libjemalloc-dev libjemalloc2 pkg-config libbz2-dev
brew install jemalloc pkg-config
1. Clone the repository
git clone https://github.com/NethermindEth/juno
cd juno
You can use git tag -l to view specific version tags.
2. Build the binary
# Install juno dependencies
make install-deps
# Build the binary
make juno
3. Run the binary
Locate the standalone binary in the ./build/ directory:
# Prepare the database directory
mkdir -p juno_mainnet
# Run the binary
./build/juno \
--http \
--http-port 6060 \
--http-host 0.0.0.0 \
--ws \
--ws-port 6061 \
--ws-host 0.0.0.0 \
--db-path ./juno_mainnet \
--eth-node <YOUR-ETH-NODE>
To learn how to configure Juno, check out the Configuration guide.