Skip to content

Create Startup Service

A Cardano blockchain data node written in Go which actively participates in network communications on the Cardano blockchain using the Ouroboros Network Node-to-Node family of mini-protocols.

⚠️ This is a work in progress and is currently under heavy development



For this guide we will walk you through setting up a systemd service. Using a systemd service to run a Dingo Node maximizes the uptime by automatically restarting the Dingo node when the computer reboots. To get started follow the steps below.


✅ This guide assumes typical Linux setup. Please adjust commands and paths as needed.

✅ For this guide we assume you have already completed the Quick Start guide.



Step 1 - Move Dingo Binary and Configuration

Section titled “Step 1 - Move Dingo Binary and Configuration”

We will move the Dingo binary to /usr/local/bin/ and the configuration to /etc/dingo/ so they are accessible system-wide.


Copy the binary:

sudo cp ~/dingo/dingo /usr/local/bin/

✅ You can verify the binary was copied by running which dingo


Create the config directory and copy the configuration:

sudo mkdir -p /etc/dingo
sudo cp ~/dingo/dingo.yaml /etc/dingo/


Since the service will run as your user but the config is now in /etc/dingo/, we need to make sure the database and socket paths use absolute paths. Run the following to regenerate the config with your $HOME expanded:

sudo bash -c "cat <<EOF > /etc/dingo/dingo.yaml
# Database
database:
blob:
plugin: \"badger\"
badger:
block-cache-size: 0
compression: false
data-dir: \"$HOME/dingo/.dingo/badger\"
gc: true
index-cache-size: 0
metadata:
plugin: \"sqlite\"
sqlite:
data-dir: \"$HOME/dingo/.dingo/metadata.db\"
databasePath: \"$HOME/dingo/.dingo\"
# Mempool
mempoolCapacity: 1048576
# Mithril
mithril:
aggregatorUrl: \"\"
cleanupAfterLoad: true
enabled: true
verifyCertificates: true
# Network
bindAddr: \"0.0.0.0\"
metricsPort: 12798
network: \"preview\"
privateBindAddr: \"127.0.0.1\"
privatePort: 3002
relayPort: 3001
socketPath: \"$HOME/dingo/dingo.socket\"
# Storage
blockfrostPort: 0
meshPort: 0
storageMode: \"core\"
utxorpcPort: 0
EOF"


Step 3 - Bootstrap from Mithril (First Run Only)

Section titled “Step 3 - Bootstrap from Mithril (First Run Only)”

Before starting the service for the first time, bootstrap the database from a Mithril snapshot:

dingo mithril sync --config /etc/dingo/dingo.yaml

This downloads and loads a snapshot, saving hours of sync time. See Step 4 of the Quick Start guide for details.

📝 You only need to do this once. After the initial bootstrap, the systemd service will keep the node synced.



Create the systemd service file. Replace YOUR_USER with your username (echo $USER):

cat <<ENDFILE | sudo tee /etc/systemd/system/dingo.service > /dev/null
[Unit]
Description=Dingo Node
After=network-online.target
[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=YOUR_USER
ExecStart=/usr/local/bin/dingo serve --config /etc/dingo/dingo.yaml
SyslogIdentifier=dingo
TimeoutStopSec=5
[Install]
WantedBy=multi-user.target
ENDFILE


Enable the service to start on boot and start it now:

sudo systemctl enable dingo.service
sudo systemctl start dingo.service


Verify the service is running:

sudo systemctl status dingo.service

To follow the logs in real time:

sudo journalctl -u dingo -f

To see recent logs if there is an error:

sudo journalctl -u dingo -n 50 --no-pager


Congratulations you have setup a startup service for Dingo!

Section titled “Congratulations you have setup a startup service for Dingo!”