# Configuring a Standard Rocket Pool Node with Docker

In this section, we will walk through the process of installing the Rocket Pool Smartnode stack using the standard Docker (opens new window)-based setup. This will install and configure everything you need to run a complete node, including:

  • The Rocket Pool Smartnode software
  • An ETH1 client of your choice
  • An ETH2 client of your choice

All you need to do is tell it what you want to run!

NOTE

The below instructions require you to use your system's terminal to enter and execute commands. If you are connected to the node machine via SSH, you are already doing this. If you are on the node machine and using a Desktop UI, you will need to open a terminal window to execute the following commands. Refer to your OS's instructions to learn how to do this if you are unfamiliar.

# Process Overview

At a high level, here's what is involved in installing Rocket Pool:

  1. Download the Rocket Pool command-line interface (CLI)
  2. Use the CLI to install the Smartnode stack
  3. Use the CLI to configure the Smartnode stack with a simple interview
  4. Done!

# Downloading the Rocket Pool CLI

The instructions for downloading the CLI vary based on your Operating System.

NOTE

You must perform the following instructions on the machine you will use for your Rocket Pool node. If you are not using a keyboard and monitor directly connected to your node machine, you will need to access it remotely (e.g. via SSH) and run these commands on it through that remote connection.

# Installing the Smartnode Stack

Now that you have the CLI installed, you can deploy the Smartnode stack. This will prepare your system with Docker, docker-compose (opens new window), and load the Smartnode files so they're ready to go. It won't actually run anything yet; that comes later.

To deploy the Smartnode stack, you will need to run the following command on your node machine (either by logging in locally, or connecting remotely such as through SSH).

TIP

Choose whether you want to use the Prater test network to test Rocket Pool with free test ETH, or if you want to use the real Ethereum main network to stake real ETH, and follow the corresponding tab below.

This will grab the latest version of the Smartnode stack and set it up. You should see output like this at the end:

Step 5 of 7: Creating Rocket Pool user data directory...
Step 6 of 7: Downloading Rocket Pool package files...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   651  100   651    0     0   3271      0 --:--:-- --:--:-- --:--:--  3271
100 7845k  100 7845k    0     0  5689k      0  0:00:01  0:00:01 --:--:-- 10.2M
Step 7 of 7: Copying package files to Rocket Pool user data directory...

If there aren't any error messages, then the installation was successful. By default, it will be put into the ~/.rocketpool directory inside of your user account's home folder.

Note that the Smartnode installer cannot install docker and docker-compose on all platforms automatically. If you receive an error message like this during the installation:

Automatic dependency installation for the Mint operating system is not supported.
Please install docker and docker-compose manually, then try again with the '-d' flag to skip OS dependency installation.
Be sure to add yourself to the docker group with 'sudo usermod -aG docker $USER' after installing docker.
Log out and back in, or restart your system after you run this command.

Then you simply have to install those two things manually.

Docker provides common install instructions here (opens new window).

Docker-compose provides common install instructions here (opens new window).

Once both are installed, make sure you give your user account permission to use Docker:

sudo usermod -aG docker $USER

After this, log out and back in or restart your SSH session for the settings to take effect.

Finally, re-run the installer with the -d flag to skip Docker installation:

Once this is finished, the Smartnode stack will be ready to run.

# Configuring Docker's Storage Location

By default, Docker will store all of its container data on your operating system's drive. In some cases, this is not what you want. For example, on Raspberry Pi systems, all of the chain data should be stored on the external SSD, not on the MicroSD card.

NOTE

If you are fine with this default behavior, skip down to the next section.

To do this, create a new file called /etc/docker/daemon.json as the root user:

$ sudo nano /etc/docker/daemon.json

This will be empty at first, which is fine. Add this as the contents:

{
    "data-root": "<your external mount point>/docker"
}

where <your external mount point> is the directory that your other drive is mounted to. In the case of Raspberry Pi users, it should be /mnt/rpdata or whatever folder you set up in the Preparing a Raspberry Pi section.

Press Ctrl+O, Enter to save the file, and Ctrl+X, Enter to exit the editor.

Next, make the folder:

sudo mkdir -p <your external mount point>/docker

(Again, for example, this would be /mnt/rpdata/docker for Raspberry Pi users.)

Now, restart the docker daemon so it picks up on the changes:

sudo systemctl restart docker

After that, Docker will store its data on your desired disk.

# Configuring the Smartnode Stack

With all of that setup finished, you can now configure the Smartnode stack with your choice of ETH1 and ETH2 clients, and their custom settings. To do this, run the configuration command:

rocketpool service config

This will launch a CLI-based interview that will ask you a few questions to help make configuration easy.

The first question you will see is as follows:

Some settings (such as port selection) come with recommended defaults.
Would you like to use them automatically? You can review them at the end of this setup. [y/n]

Rocket Pool has many settings, including:

  • The network ports to run its various services on
  • The maximum number of peers the ETH1 and ETH2 clients should connect to
  • Login information if you want to publish your node's statistics to the ethstats (opens new window) monitor

Many people tend to leave these at their default recommended values.

If you answer y, Rocket Pool will use the recommended default values for most of the settings, and only ask you about settings that don't have defaults - this is the standard configuration mode.

If you answer n, it will show you all of the settings so you can change each one individually - this is advanced configuration mode.

While going through the sections below, choose the tab that corresponds to the mode you selected.

# ETH1 Configuration

The first main question will be you about which ETH1 client you want to use. For help deciding on an option, consult the Choosing your ETH Clients section.

The prompt will look like this:

Which Eth 1.0 client would you like to run?
1: Geth 	Geth is one of the three original implementations of the
 		    Ethereum protocol. It is written in Go, fully open source and
 		    licensed under the GNU LGPL v3.
		    https://geth.ethereum.org/

2: Infura 	Use infura.io as a light client for Eth 1.0. Not recommended
 		    for use in production.
		    https://infura.io/

3: Pocket 	Use Pocket Network as a light client for Eth 1.0. Suitable
 		    for use in production.
		    https://dashboard.pokt.network/

4: Custom 	Use a custom Eth 1.0 client at a specified address (does not
 		    work on localhost).

NOTE

If you already ran service config before and selected an ETH1 client, the interview will ask if you want to continue using the same client first.

For this configuration mode, where Rocket Pool will install and manage your ETH1 and ETH2 clients, select between Geth, Infura, Pocket, or a custom ETH1 endpoint (for advanced users).

# ETH2 Configuration

Once you're finished configuring the ETH1 client, you will be prompted with this question:

Would you like to run a random Eth 2.0 client (recommended)? [y/n]

Rocket Pool is firmly committed to the health and diversity of the Beacon Chain, which means we do not favor one client over another. To this end, the default behavior is to run a random ETH2 client. All four clients are stable and perform very well, so there is no wrong choice (depending on your available hardware resources). Therefore, choosing a random client with not negatively impact your validators but will contribute to the security of the ETH2 ecosystem.

That being said, we also offer you the option to choose a specific client if you have one in mind. For example, users with low-power systems such as the Raspberry Pi may want to explicitly pick an ETH2 client that is tailored to systems with low resources.

For help comparing the ETH2 clients, consult the Choosing your ETH Clients section.

# ETH2 Checkpoint Syncing with Infura

Checkpoint syncing is a very useful technique that some Beacon Chain clients support. It allows your Beacon client to instantly sync the entire Beacon chain without having to start from the beginning and catch up on every block. This means instead of taking days, your Beacon client can be ready in a matter of minutes. All it needs is access to an existing Beacon client that you trust.

Currently, Lighthouse and Teku support checkpoint syncing.

You can use any Beacon node that provides access to its HTTP API. In this example, we will show you how to use the free Infura service to do it. Both the Prater Testnet and Mainnet are supported.

If you don't have an account already, start by heading to https://infura.io/register (opens new window) to create one. You can use the free tier for checkpoint syncing, so all you will need to provide is an email address.

Once you are logged in, head to the ETH2 project page (opens new window). Create a new project here using the Create New Project button. It can be named anything you want (for example, "RP Checkpoint Sync").

Now, click on the project and go to the Settings tab:

Here, there is a section called Keys. In this section, first select Mainnet or Prater from the Endpoints dropdown, depending on whether you're using the Prater Testnet or Mainnet.

Next, click on the small clipboard icon to the right of the long https://... string:

This is your personal, private access string for Infura's Beacon node. Clicking on the clipboard icon will copy it to your clipboard. You can then paste this in the terminal during rocketpool service config when it prompts you for a Checkpoint Sync Provider.

After that, your Beacon node will be configured to connect to Infura when it first starts up and instantly pull down the latest state of the chain!

# Metrics Configuration

Rocket Pool comes with the ability to display a detailed dashboard showing metrics about your node's hardware health, system updates, your validator performance, your rewards, information about the overall Rocket Pool network, and more:

The next question in the service config interview will ask you if you want to enable this:

Would you like to enable Rocket Pool's metrics dashboard? [y/n]

Answer y if you would like to enable it, or n if you would rather disable it.

If you choose to enable it, you will learn more about setting it up and how to use it in the Setting up the Grafana Dashboard section later in the process.

Enabling it will create three new Docker containers:

  • rocketpool_prometheus: this runs Prometheus (opens new window), a tool that collects, stores, and formats metrics and data from lots of endpoints into one convenient place.
  • rocketpool_exporter - this runs Prometheus's Node Exporter (opens new window), a small service that collects hardware health about your machine and provides it to Prometheus.
  • rocketpool_grafana - this runs Grafana (opens new window), a webapp for creating and displaying modular dashboards. It connects to Prometheus to get the raw data, then shows it to you in a pretty format like you see in the screenshot above.

NOTE

All of the data collected by this system stays on your machine. Rocket Pool does not collect any of the telemetry or send it to a separate service. It's purely there for you to use so you can monitor your own node!

If you answer y to the question, you will go through the configuration process for the metrics service which is described below.

Once you finish setting up the Metrics service, you're finished!

# Wrapping Up

At this point, your configuration is complete. Congratulations! You're ready to secure your operating system to protect your node. Move on to the Securing your Node section next.