How to set up a LUKSO validator node on AWS ☁️

Johann B.
6 min readMay 18, 2023
LUKSO mainnet is coming 🚀

LUKSO is a Layer 1 blockchain that brings new standards to increase adoption and user friendliness of blockchain. If you want to know more about it, I strongly recommend to read the following 3 articles:

As part of their Mainnet launch, everyone can become a genesis validator (provided that you had at least 32LYXe), and so I decided to become one 🎉🎉🎉 !

In this article, I'll explain how to set up a LUKSO validator node in AWS.

The final LUKSO validator setup (using either the LUKSO CLI or the dockerfile option) will be added after the mainnet launch.

Note: This is ONE way of doing it, not the ONLY one (a node can be set as a spare machine at home, as a VM in public cloud, as a dappNode, …).

Disclaimer: I’m part of the LUKSO internal team, but this work is not an official documentation. I’m a LYXe holder, but I didn’t received any incentive for doing such guide.

AWS Setup

Calculate estimate (optional)

For this setup, I wanted to use an EC2 saving plan, as I know I will run this validator for at least 1 year (hopefully more), and it will provide a nice discount on the price.

Note: I will use us-east-2 (Ohio) throughout this guide, as it’s one of the cheapest region (see more info here)

To calculate an estimate of your AWS bill, head to the AWS Calculator, and add a new EC2 service.
Click "configure" and scroll down to "EC2 Instances (570)" to select your machine type. I selected a t3a.large (2 vCPU + 8Go of RAM).

Pick your ec2 instance

Scroll down to "Payment options" and select "EC2 Instance Savings Plans" / "1 year" / "No upfront".

An acceptable price for a machine for 1 year

You can continue scrolling and add the EBS (elastic block storage, the SSD) to have a better estimate. I decided to go with 300GB, as it will be enough for sometime, and I can add more later if needed. Then click "Save and view summary" to see how much it will cost you.

Note: This is an estimate that doesn't take into consideration data transfer, logs and other services you might want to use in your setup.

Final estimation for compute & SSD

Configure AWS Savings plan

As seen in the estimate calculation, we will be using an AWS Savings plan. After creating an account on AWS, head to the Cost management center in your AWS Console, and click on "Purchase Savings Plan" on the left menu.

Select "EC2 Instance Savings Plans" and select the term, the region and the instance family you want to use for your saving plan. In my case, I selected "1 year" / "US East (Ohio)" / "t3a".

Note: Remember that you're purchasing a plan that represents a commitment of usage for a specific machine family, in a specific region, within a specific period of time. Be extra careful to validate the correct plan for your usage!

The next box is about Hourly commitment. To get the correct one, go to the Compute Savings Plan Pricing where you can find the hourly commited price: select your region, term and instance family, and copy the "Savings plan rate" in the Hourly Commitment field as shown in the image bellow.

Getting the right rate.

Finally, select your upfront settings and you will be able to confirm that the price displayed is matching the one in the estimate calculator phase.

34.38$ monthly on both sides!

Provision your EC2

Now that we have a Saving plan, let's use it! Head to the EC2 instances dashboard, and click on "Launch instances".

  • Give it a name
  • Select Ubuntu
  • In the "Instance type", select your correct instance family (for me, t3a.large)
First part of the instance setup
  • Choose (or create) a key pair (tips: run chmod 0600 yourkey.pem otherwise you will have an issue when using it to connect)
  • In the "Network settings", click on the "edit" button in the top right corner to specify all the required FW rules:

- SSH / TCP / port 22 / anywhere (or your IP, depending on your ISP IP (static or dynamic))
- CUSTOM / TCP / port 30303 / anywhere or your IP
- CUSTOM / UDP / port 30303 / anywhere or your IP
- CUSTOM / TCP / port 13000 / anywhere or your IP
- CUSTOM / UDP / port 12000 / anywhere or your IP

  • Configure storage with the desired SSD size (300Gb of gp3 in my case).
Special rules for our instance

Click "launch instance" and that's it, your node is running!

Last thing to do is to assign an Elastic IP to your node (e.g., a static IP). To do that, click on the Elastic IPs link on the left menu.

  • Click "Allocate Elastic IP address" button on the top right, then click "Allocate"
  • Select your Elastic IP in the list, and click on "Actions" > "Associate Elastic IP address"
  • In the next screen, select your instance, and click on "Associate"

Configuring your validator

Now that the machine is running, we can connect to it with SSH and configure it.

  • SSH to your machine (tips: use ssh -i /path/to/yourkey.pem ubuntu@your-vm-ip to connect to your machine)
  • Update / upgrade your node (tips: runsudo apt update -y && sudo apt upgrade -y)

After that, you choose between using the LUKSO CLI (check the github or the doc website) or docker to start your node + validator. I will use the docker option, as I found it more suited to my skills level 😊

To do that, follow the README instructions here: lukso-validator-docker

Monitoring

To install the monitoring setup (prometheus / grafana), you can follow the instruction here: network-docker-monitoring

Here are some tips:

  • On your node, create a folder named monitoring and cd into it
  • git clone the monitoring repo in it
  • Create the folders data/prometheus_data and data/grafana_data in the monitoring folder, and give them 777 permission
  • Modify the prometheus/prometheus.yaml file at your convenience (remove geth or erigon, …)

Lastly, don't forget to open the ports in your AWS > Security Group:
- CUSTOM / TCP / port 3000 / anywhere or your IP (Grafana)
- CUSTOM / TCP / port 9090 / anywhere or your IP (Prometheus)

I hope you liked this guide / tutorial, clap if you liked it, subs if you loved it!

My ETH Address (if you want to tip me some coins 😇): kalote.eth
My Twitter: https://twitter.com/JohannKalote
LUKSO discord: https://discord.com/invite/lukso

If you have any issue, you can contact me on Discord, on the LUKSO server.

--

--

Johann B.

DevOps, Developer, Automation lover, Technology & blockchain enthusiast, Guitarist, Fighting game player, Dad, Skater, and so much more