This repo contains the necessary tools to deploy an Ethereum full-node using Nethermind & Nimbus.
.
└── holesky-autodeploy/
├── ansible-role/ <- Contains ansible playbook, roles and config required for install
├── terraform/ <- Contains the Terraform file to deploy hosts
├── hosts.ini <- Config for ansible
└── README.md <- The file you are reading now
.
├── ethereum-fullnode.yml
├── roles
│ ├── generate_jwt
│ │ └── tasks
│ │ └── main.yml
│ ├── nethermind
│ │ ├── tasks
│ │ │ ├── configure.yml
│ │ │ ├── fetch_nethermind.yml
│ │ │ └── main.yml
│ │ └── templates
│ │ └── nethermind_service.j2
│ ├── nimbus
│ │ ├── tasks
│ │ │ ├── configure.yml
│ │ │ ├── fetch_nimbus.yml
│ │ │ └── main.yml
│ │ └── templates
│ │ └── nimbus_service.j2
│ ├── node_exporter
│ │ └── tasks
│ │ └── main.yml
│ └── system_setup
│ └── tasks
│ └── main.yml
└── vars.yml
The playbook 'ethereum-fullnode.yml' will deploy the fullnode on two hosts :
- eth_nethermind
- eth_nimbus
This playbook have been tested with 3 hosts deployed on a proxmox and using two disks:
- One for the system e.g :
/dev/sda
- One for the chain data e.g :
/dev/sdb
Please check the second disk is using this dev location before running the playbook.
It use several roles :
- system_setup : Will create a user, by defaut ethereum, format and mount the chain data disk under /mnt/block-volume and install the required packages.
- node_exporter : Will install node exporter for system monitoring. It use this script : https://gist.githubusercontent.com/galexrt/44d62a0681146bfdbe98d0b549a01999/raw/88d675dc06a43a03265a607f28222cf21cf07cac/node_exporter.sh
- generate_jwt : Will generate the JWT token used by Nimbus and Nethermind on the ansible host and distribute it to the eth_nethermind and eth_nimbus machines.
- nimbus : Get the latest binary, configure the user home and setup the nimbus service.
- nethermind : Get the latest binary, configure the user home and setup the nethermind service.
The final file scheme for hosts will be :
└── /mnt/block-volume/
└── {{ node_user_name }} <- e.g ethereum (home of the user)/
├── .bin/
│ └── vX.X.X <- version tag (e.g v1.1.0)/
│ ├── binary_vX.X.X.zip
│ └── "release files"
├── data <- data home for nodes
└── config/
└── jwt.hex
The terraform config file has not been tested. It should nevertheless setup two hosts with same specs and two disks according the the setup described above.
- Git clone the repo:
git clone https://github.com/Lune1l/holesky-autodeploy
- Edit the
hosts.ini
file You need to edit thehosts.ini
file to be able to run the playbook, please change the host ip and password. - Edit the
vars.yml
file Please edit thevars.yml
file according to your need :
- by default, the playbook will setup the nodes for holesky.
- please set the nethermind rpc url according to your nethermind's host ip address.
- Run the playbook At root of the project run
ansible-playbook -i hosts.ini ansible-role/ethereum-fullnode.yml
If Nethermind or Nimbus team have released a new version tagged as latest, you can upgrade the nodes by runnnig the playbook again. It will automatically detect the release, download the bin into a new directory, update the service file and restart everything.
Note : For security concerns, it will also renew the jwt.hex token.
Once the playbook has been run, the two services will start, Nethermind will start syncing and Nimbus will crash due to unreachability of Nethermind as it is not synced yet. Once Nethermind is synced with chain, Nimbus should start syncing. Complete sync has not been tested due to the limitation of my baremetal server.