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
DmspackageMetrics Toolspackage
Once 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.
https://docs.rocketpool.net/guides/node/docker.html#downloading-the-rocket-pool-cli
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:
https://docs.rocketpool.net/guides/node/docker.html#downloading-the-rocket-pool-cli
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:
https://docs.rocketpool.net/guides/node/create-validator.html#staking-rpl
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 URL:
http://goerli-geth.dappnode:8545Web-socket URL:
http://goerli-geth.dappnode:8551
EHT2 (Consensus) Client:

HTTP URL:
http://beacon-chain.prysm-prater.dappnode:3500JSON-RPC URL:
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 startcommand needs to be executed.rocketpool service statuswill give you status

now we can check our
prometheusdashboard. we go to our dappnode local ip on port8888in my case that is192.168.1.162:8888where we can see prometheus targets192.168.1.162:8888/targets?search=

also lets access RP Grafana
172.33.0.88:3100
We need to import Prysm Rocketpool grafana dashboard and all details can be found here:
https://docs.rocketpool.net/guides/node/grafana.html#importing-the-rocket-pool-dashboard
our dashboard to import:
https://grafana.com/grafana/dashboards/14885-rocket-pool-dashboard-v1-1-0-for-prysm/
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.

