At the time when this post is being written there is no official Dappnode RocketPool package which can be run.
Purpose of this article is not to guide you how to setup rocketpool minipool, but to guide you how to setup rocketpool on dappnode, where rocketpool will use Dappnode packages for Consensus and Execution layer. This means Rocketpool Consensus and Execution clients during rocketpool config setup will be chose as Externally managed
.
Let’s start.
For this setup we will use Prater test network. Goerli-Geth
as execution client and Prysm-Prater
as consensus client.
FYI: if you want to use dns names like my.dappnode
or dms.dappnode
you will need to be connected to Dappnode WiFi
or on Dappnode VPN
We need to install Goerli Geth
and Prysm Prater
dappnode packages.
After Goerli Geth
package is installed we need to go to package dappnode page in Config
section as we need to change run arguments in order to start metrics
endpoints which will be used by prometheus
to scrape metrics for Grafana dashboard.
In EXTRA_OPTION
field you should put following:
--http.api eth,engine,net,web3,txpool --metrics --metrics.port 6060 --metrics.addr 0.0.0.0 --ws --ws.addr 0.0.0.0
After these config is saved Goerli Geth
will be restarted and what is left is to wait until is fully synced, it will take some time.
After Prysm Prater
package is installed we need to go to Config
page as well and at the bottom right corner click SHOW ADVANCED EDITOR
to get list of advanced config.
Now we need to edit start arguments for Beacon Chain
via. EXTRA_OPTS
config where prometheus metrics will be enabled as well, also we will set CHECKPOINT_URL
so our Consensus Client is synced fast and not to wait two days. This config was available before in package config but fr some reason was removed, so we need to use EXTRA_OPTS
to handle it.
If you do not have available checkpoint url you can open infutura.io
account, create key for free and copy HTTPS
prater checkpoint url which you will use.
After we have this lets update EXTRA_OPTS
and set it:
--monitoring-host 0.0.0.0 --monitoring-port 9100 --checkpoint-sync-url=https://xxxxxxxx:yyyyyyyyy@eth2-beacon-prater.infura.io//eth/v2/debug/beacon/states/finalized
We also need to install Dappnode monitoring packages where we will get Grafana for visualisation and Prometheus for scraping metrics.
We need to instal
Dms
packageMetrics Tools
packageOnce we have our dappnode packages ready and those packages are syncing we will take care of RP installation.
We will need to SSH
into dappnode machine via terminal and you will need you password which you’ve setup for you dappnode on first dappnode start, it was called host user password
After you have connected you dappnode to you local network there was ip assigned to it, my dappnode on local network is on 192.168.1.162
You can check you local ip by executing ping dappnode.local
command in terminal.
I was following this tutorial to install rocketpool
on dappnode NUC.
We do not need full docker service install, as we do not need dependencies as we already have docker installed and setup as part of Dappnode setup, we just need rocketpool configuration files which will be create at ~/.rocketpool
location.
In order to only create confg files we need to run following command with -d
flag as described here:
rocketpool service install -d
once service is installed you will have ~/.rocketpool
created.
It will look something like this (without backup files I created):
We will need to do few service overrides in order to rocketpool
works with Dappnode external services (Geth and Prysm) , as we need to make sure rocketpool
docker services can see dappnode docker service and to achive that we we need to put some rocketpool
docker services also in dappnode docker network which is called dncore_network
.
Rocketpool override or Customizing the Docker-Compose Definition Files
and how it is done can be checked here
This will allow us to tweak services we need.
Empty docker compose override file looks like this:
version: "3.7"
services:
eth1:
x-rp-comment: Add your customizations below this line
rocketpool
overrides:
~/.rocketpool/override/node.yml
# Enter your own customizations for the node container here. These changes will persist after upgrades, so you only need to do them once.
#
# See https://docs.docker.com/compose/extends/#adding-and-overriding-configuration
# for more information on overriding specific parameters of docker-compose files.
version: "3.7"
services:
node:
x-rp-comment: Add your customizations below this lin
networks:
- dncore_network
networks:
dncore_network:
name: dncore_network
external: true
~/.rocketpool/override/prometheus.yml
# Enter your own customizations for the Prometheus container here. These changes will persist after upgrades, so you only need to do them once.
#
# See https://docs.docker.com/compose/extends/#adding-and-overriding-configuration
# for more information on overriding specific parameters of docker-compose files.
version: "3.7"
services:
prometheus:
x-rp-comment: Add your customizations below this line
ports:
- "8888:9091"
networks:
- dncore_network
networks:
dncore_network:
name: dncore_network
external: true
We have expose RP prometheus to host port 8888
which will allow as to access RP prometheus dashboard to check our targets.
~/.rocketpool/override/grafana.yml
# Enter your own customizations for the Grafana container here. These changes will persist after upgrades, so you only need to do them once.
#
# See https://docs.docker.com/compose/extends/#adding-and-overriding-configuration
# for more information on overriding specific parameters of docker-compose files.
version: "3.7"
services:
grafana:
x-rp-comment: Add your customizations below this line
networks:
dncore_network:
ipv4_address: 172.33.0.88
networks:
dncore_network:
name: dncore_network
external: true
In grafana
override we have also set static IP so we can easily access it later to see RP Prysm dashboard
~/.rocketpool/override/validator.yml
# Enter your own customizations for the validator container here. These changes will persist after upgrades, so you only need to do them once.
#
# See https://docs.docker.com/compose/extends/#adding-and-overriding-configuration
# for more information on overriding specific parameters of docker-compose files.
version: "3.7"
services:
validator:
x-rp-comment: Add your customizations below this lini
networks:
- dncore_network
networks:
dncore_network:
name: dncore_network
external: true
~/.rocketpool/override/watchtower.yml
# Enter your own customizations for the watchtower container here. These changes will persist after upgrades, so you only need to do them once.
#
# See https://docs.docker.com/compose/extends/#adding-and-overriding-configuration
# for more information on overriding specific parameters of docker-compose files.
version: "3.7"
services:
watchtower:
x-rp-comment: Add your customizations below this line
networks:
- dncore_network
networks:
dncore_network:
name: dncore_network
external: true
Also we will need to update prometheus
targets to match ones with dappnode services for eth1
and eth2
clients that we exposed on beginning of this tutorial.
~/.rocketpool/prometheus.tmpl
# Default Prometheus configuration for Rocket Pool
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
scrape_timeout: 12s # Timeout must be shorter than the interval
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:${PROMETHEUS_PORT:-9091}']
- job_name: 'node'
static_configs:
# node-exporter is on the host network so it can get access to the actual machine's network info
# We have to use 'hosts.docker.internal' to refer to it due to this configuration
- targets: ['host.docker.internal:${EXPORTER_METRICS_PORT:-9103}']
- job_name: 'geth'
static_configs:
- targets: ['goerli-geth.dappnode:6060']
metrics_path: /debug/metrics/prometheus
- job_name: 'eth1'
static_configs:
- targets: ['${EC_HOSTNAME:-eth1}:${EC_METRICS_PORT:-9105}']
- job_name: 'eth2'
static_configs:
- targets: ['beacon-chain.prysm-prater.dappnode:9100']
- job_name: 'validator'
static_configs:
- targets: ['validator:${VC_METRICS_PORT:-9101}']
- job_name: 'rocketpool'
scrape_interval: 5m
scrape_timeout: 5m
static_configs:
- targets: ['node:${NODE_METRICS_PORT:-9102}']
and last one to edit is grafana template where prometheus URL will be updated to one form Rocketpool, as prometheus
alias is not conflicting with dappnode prometheus which will cause wrong prometheus to be called.
~/.rocketpool/templates/grafana-prometheus-datasource.tmpl
apiVersion: 1
deleteDatasources:
- name: Prometheus
orgId: 1
datasources:
- name: Prometheus
type: prometheus
access: proxy
orgId: 1
url: http://rocketpool_prometheus:9091
basicAuth: false
isDefault: true
version: 1
editable: true
at this moment I already have setup minipool and I will not do tutorial hot to do it, but for Prater, you will need test goerli, etc,
RP tutorial:
One more thing is required before we start rocketpool service.
We need to run config command so we can choose rocketpool to connect on externally managed consensus and execution clients, one that we installed as dappnode packages.
ETH1 (Execution) client:
http://goerli-geth.dappnode:8545
http://goerli-geth.dappnode:8551
EHT2 (Consensus) Client:
http://beacon-chain.prysm-prater.dappnode:3500
http://beacon-chain.prysm-prater.dappnode:4000
Monitoring/metrics:
We need to enabled monitoring and metrics.
After config is saved service should start immediately, but if not started execute command to start services
rocketpool service start
command needs to be executed.rocketpool service status
will give you statusnow we can check our prometheus
dashboard. we go to our dappnode local ip on port 8888
in my case that is 192.168.1.162:8888
where we can see prometheus targets
192.168.1.162:8888/targets?search=
172.33.0.88:3100
We need to import Prysm Rocketpool
grafana dashboard and all details can be found here:
our dashboard to import:
and once we have imported it it will give us nice dashboard for minipool that is running:
My plan was to reuse Dappnode grafana, but it did not work because of different grafana versions which makes RP Prysm grafana dashboard only to show few data.
I managed to add new DMS Grafana datasource for rocketpool
prometheus and successfully imported dashboard we mentioned before but only part of dashboard was working.
I have investigated it and I can see Dappnode grafana has version of 8.1.8
and RP
grafana has version 8.5.9
which I think caused issue as RP dashboard was written for higher version of grafana, but maybe in future we manage to solve it, I just did not have time and motivation as I am satisfied with this RP grafana, but it would be handy to have it in one place.
While I was playing I managed to use dappnode prometheus as well to scrape targets from RP but issue was again with grafana so I stayed on RP grafana.