Rocket Pool
Published in

Rocket Pool

Rocket Pool Smart Nodes on AWS

Introduction

In this article, you’ll learn how to set up a server on AWS to run a Rocket Pool smart node. Smart nodes can deposit ETH into Rocket Pool to have an equivalent amount of ETH (deposited by users) matched with it, in order to run an Ethereum 2.0 validator and earn rewards. They receive rewards on their own deposit, plus a percentage of the rewards earned on the ETH assigned to them.

If you want to run a smart node but don’t have access to a machine running a Unix operating system (or don’t want to keep one online 24/7), this guide is for you! It assumes basic familiarity with a terminal (such as the MacOS terminal or Windows PowerShell). Windows users running WSL should follow the instructions for Linux.

Getting Started

First up, you’ll need to sign up to AWS if you haven’t already. Once you’re logged in, you’ll see a management console looking something like this:

Use the drop-down in the toolbar at the top of the screen to select the geographic region you want your server in. Servers can’t be moved between regions once created, so you’ll want to get this right before continuing:

Ethereum is all about decentralization, so go ahead and pick a random city instead of just putting it in the U.S. ;)

Next, click Services in the toolbar, and select EC2 under the Compute section. You’ll see a new dashboard looking something like this:

Creating an EC2 Instance

Go ahead and click the Launch Instance button, then select the “Launch Instance” option. You’ll be presented with a list of Amazon Machine Images to choose from — this determines the Operating System of the server, as well as some other software on it. Select Ubuntu Server 20.04 LTS (HVM).

Next, choose an Instance Type. The list of available options will display the number of CPU cores and amount of RAM each type has available. To run a smart node, you’ll need at least a t2.large. Select this type, or one with more resources if you like, then click the Next button.

Now we’ll configure the Instance Details. There’s no need to modify anything here, simply leave the default values and move on.

Next up, we’ll Add Storage to the instance. Storage volumes are managed separately from your server, and can be swapped in and out if need be. The storage created in this step will be automatically added to your server. Update the size to at least 100 GiB, and leave the other settings as the default values.

On the Add Tags step, we’ll give our instance a name so we remember what it is. Click the “click to add a Name tag” option and enter something like “Rocket Pool Smart Node”.

Now we’ll configure the Security Group for the server. Security groups list firewall rules which determine which IP addresses can access your server, and over which ports. Leave the “Create a new security group” option selected, and enter a name and description for it, like “Smart Node” and “Smart Node Group”. Remove any existing rules in the table and add the following ones:

  • Type: SSH, Source: My IP
  • Type: Custom TCP, Port Range: 30303, Source: Anywhere
  • Type: Custom UDP, Port Range: 30303, Source: Anywhere
  • Type: Custom TCP, Port Range: 9001, Source: Anywhere
  • Type: Custom UDP, Port Range: 9001, Source: Anywhere

This will allow you to remotely connect to your server, and will allow the Ethereum 1.0 and 2.0 clients running on it to be discovered and connected to by peers. You should end up with a table like this:

Finally, review your instance details and click Launch. You’ll be prompted to generate an SSH key pair for connecting to your server. Select “Create a new key pair” and enter a name for it like “Smart Node Key”, then click Download Key Pair. Never share this file with anyone, and keep it secure, as it’s used to access your server remotely. We’ll come back to this file shortly.

Now, click Launch Instance to create your server! You’ll see a notice with a View Instances button to view your list of servers. There, you’ll see it appear with some details next to it.

Creating an Elastic IP

Now, you’ll want to create an Elastic IP Address for your server to make sure that you can always access it at the same address. Otherwise, it might change if you need to restart it, which is inconvenient. Click Elastic IPs under “Network and Security” in the navigation panel to the left, then click the Allocate Elastic IP Address button. Click through the prompts to create the elastic IP address and return to the list.

Next, select the address in the list and click the Actions button above it, then choose Associate Elastic IP Address. Leave the resource type on Instance, and select your new smart node instance from the drop-down list. Click Associate to finish and return to the list. You’ll now see your instance ID under the Associated Instance ID column, and can click it to return to the instance list!

Installing the Smart Node Client

We’ll be interacting with the server via the Rocket Pool smart node client, which can be used on your own computer to manage the node remotely!

Windows

On Windows, simply download the smart node client and move it to an appropriate location on your system, e.g. C:\bin\rocketpool.exe. You can run it by opening PowerShell and typing its full path.

Other Operating Systems

The smart node client can be downloaded manually or by using cURL or wget; try the following commands to see which tools you have available:

curl --version
wget --version

(if you don’t have these tools installed, you’ll see something like command not found: curl). Now, depending on what you’re working with, run one of the following commands to install the client:

Linux (cURL):

curl -L https://github.com/rocket-pool/smartnode-install/releases/latest/download/rocketpool-cli-linux-amd64 --create-dirs -o ~/bin/rocketpool && chmod +x ~/bin/rocketpool

Linux (wget):

mkdir -p ~/bin && wget https://github.com/rocket-pool/smartnode-install/releases/latest/download/rocketpool-cli-linux-amd64 -O ~/bin/rocketpool && chmod +x ~/bin/rocketpool

MacOS (cURL):

curl -L https://github.com/rocket-pool/smartnode-install/releases/latest/download/rocketpool-cli-darwin-amd64 -o /usr/local/bin/rocketpool && chmod +x /usr/local/bin/rocketpool

MacOS (wget):

wget https://github.com/rocket-pool/smartnode-install/releases/latest/download/rocketpool-cli-darwin-amd64 -O /usr/local/bin/rocketpool && chmod +x /usr/local/bin/rocketpool

Then simply start a new shell session (or run source .profile). If you use zshell, you may need to modify your .zshrc or .zprofile and add ~/bin to your PATH.

Once that’s done, run rocketpool — you should see an ASCII Rocket Pool logo and a list of options if everything worked.

Managing Your Server

Now we’ll set up an alias to easily manage the server without entering a wall of text. The method for this depends on your operating system:

Linux & MacOS

  1. Copy the SSH key you created somewhere safe, like under the .ssh folder in your user path, e.g. ~/.ssh/certificates/SmartNodeKey.pem (if you’re using WSL, /mnt/c/Users/[USERNAME]/ corresponds to your user path on Windows). Then, set the file mode to make sure other users on your machine can’t access it:
    chmod 600 ~/.ssh/certificates/SmartNodeKey.pem
  2. Open your shell profile (probably ~/.bash_profile, or ~/.zprofile if you use zshell — this is the default on MacOS Catalina and above), then add a line like the following (replacing XXX.XXX.XXX.XXX with the Elastic IP address we created earlier) and save it:
    alias rpl="rocketpool --host XXX.XXX.XXX.XXX --user ubuntu --key ~/.ssh/certificates/SmartNodeKey.pem"
  3. Restart your terminal.

Windows

  1. Copy the SSH key you created somewhere safe, e.g. C:\Users\[USERNAME]\ssh\certificates\SmartNodeKey.pem. Then, right click the file, select Properties, and navigate to the Security tab. Make sure that no other users have permission to read, write or execute the file.
  2. Open PowerShell and run Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted
  3. Run notepad $profile to edit your PowerShell profile (if you don’t have one, you’ll be prompted to create it). Add a line like the following (replacing XXX.XXX.XXX.XXX with the Elastic IP address we created earlier) and save it:
    function rpl { C:\bin\rocketpool.exe --host XXX.XXX.XXX.XXX --user ubuntu --key $env:USERPROFILE\ssh\certificates\SmartNodeKey.pem $args }
  4. Restart PowerShell.

Once you’re done, you can manage your node simply by typing rpl followed by the desired command (e.g. rpl service install)!

Setting Up Your Smart Node

We’re finally ready to set up the smart node and get started with Rocket Pool! Head over to the Node Operator’s Guide for installation and setup instructions — just substitute rocketpool with rpl in all the examples to use the alias you created. You’re all done here!

Cleaning Up

Once the beta has finished and you’re all done with your AWS instance, you can clean up everything you created during this guide in the AWS management console:

  1. Navigate to Instances and select your smart node instance. Click the Actions button above the list, and select Instance state > Terminate instance.
  2. Navigate to Security Groups and select your smart node group. Click the Actions button above the list, and select Delete security group.
  3. Navigate to Elastic IPs and select your (now unallocated) elastic IP address. Click the Actions button above the list, and select Release Elastic IP address.

That’s it! Your storage volume should have been automatically deleted so there’s no need to remove it manually. The instance will still appear in your list for a short time, but will no longer incur any charges.

Questions or just say hello!

Well, 10 points to you for making it this far! If you have beta questions, feedback, bug reports or want to know a bit more about us, why not swing by for a chat and say G’day! You can view our website or have a chat with us in our chat room that anyone can join. If chat rooms aren’t your thing, we’re also on Twitter!

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Jake Pospischil

Jake Pospischil

Senior software developer at Rocket Pool