# Rocketpool on Dappnode

By [mozzer](https://paragraph.com/@mozzer) · 2022-08-13

---

Introduction
------------

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.

Setup
-----

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`

### Dappnode packages install

We need to install `Goerli Geth` and `Prysm Prater` dappnode packages.

### Goerli Geth package

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
    

![Goerli Geth Config page](https://storage.googleapis.com/papyrus_images/1e583088b1c20f3428ba928d7919d2985dc9a62022247586ab79b66f7d6ab2d2.png)

Goerli Geth Config page

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.

### Prysm Prater package

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.

![infura prater checkpoint url](https://storage.googleapis.com/papyrus_images/04df595f6a282202d4bb48b03085b88af9014ce433ca7a67747b265e392214eb.png)

infura prater checkpoint url

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
    

![Prysm-Prater package beacon chain extra options](https://storage.googleapis.com/papyrus_images/3070f5e82a20e6a4b137a44c6677fc8416d3d5b7ec1e077f0240562d719ef1bc.png)

Prysm-Prater package beacon chain extra options

### Monitoring dappnode packages

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` package
    
*   `Metrics Tools` package
    

Rocketpool installation
-----------------------

Once we have our dappnode packages ready and those packages are syncing we will take care of RP installation.

### Prerequisite

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.

### Install Rocketpool

I was following this tutorial to install `rocketpool` on dappnode NUC.

[https://docs.rocketpool.net/guides/node/docker.html#downloading-the-rocket-pool-cli](https://docs.rocketpool.net/guides/node/docker.html#downloading-the-rocket-pool-cli)

### Rocketpool service install

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](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):

![\~/.rocketpool](https://storage.googleapis.com/papyrus_images/bd28fdbf8a2790e7701559ecd85644adf727efe9c80fa13146be6e1c23ec3cd1.png)

\\~/.rocketpool

### Rocketpool service override

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

[https://docs.rocketpool.net/guides/node/advanced-config.html#customizing-the-docker-compose-definition-files](https://docs.rocketpool.net/guides/node/advanced-config.html#customizing-the-docker-compose-definition-files)

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
    

### Rocketpool minipool

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](https://docs.rocketpool.net/guides/node/create-validator.html#staking-rpl)

### Rocketpool config

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**:

![](https://storage.googleapis.com/papyrus_images/1c6a7d61fd32c6f54c2cc44b4d1e10d4f24665b964248b0c90642b2ccdeed8e0.png)

*   HTTP URL: `http://goerli-geth.dappnode:8545`
    
*   Web-socket URL: `http://goerli-geth.dappnode:8551`
    

**EHT2 (Consensus) Client**:

![](https://storage.googleapis.com/papyrus_images/a0e95fdc16cf03c8be4452e23859a65fe4da21429a1b2decee05c44c925f05b9.png)

*   HTTP URL: `http://beacon-chain.prysm-prater.dappnode:3500`
    
*   JSON-RPC URL: `http://beacon-chain.prysm-prater.dappnode:4000`
    

**Monitoring/metrics:**

We need to enabled monitoring and metrics.

![](https://storage.googleapis.com/papyrus_images/9b799f5ad99b6894e8d6fde360e81f2ec3fd3469f82e2ea0628ca40ce1901cf3.png)

### Rocketpool start service

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 status
    

![](https://storage.googleapis.com/papyrus_images/a2271dced39a981e78d1112acb5debe1523030efe8883cf57aa4d53099b0960e.png)

*   now 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=`
    

![RP prometheus](https://storage.googleapis.com/papyrus_images/acb2df98f0f4f63fb729b546bd6a208c57e0d7aab08cec049895128ffcd45864.png)

RP prometheus

*   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](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/](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:

![](https://storage.googleapis.com/papyrus_images/9b670c402ee17fec5cf4c4521eeb0600dc623d73ca18bc457b94b0777927d81d.png)

### Future observations

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.

---

*Originally published on [mozzer](https://paragraph.com/@mozzer/rocketpool-on-dappnode)*
