SPO JAPAN GUILD
ステークプール運用

DMQノードの設定

このマニュアルは、Stake Pool Operator(SPO)が DMQ Node を安全に運用するための設定手順をまとめたものです。
ドキュメント作成時点では、DMQ Node はテストネット(preview)のみサポートされており、メインネットでの利用には対応していません。

以下は、Mithril Signerノードの設定をしている方のみ対象です。

1. DMQ Nodeのインストール

システムのアップデート

sudo apt update && sudo apt upgrade -y

作業ディレクトリの作成

mkdir -p $HOME/git/mithril/dmq
cd $HOME/git/mithril/dmq

ビルド済みバイナリファイルのダウンロード

wget -O dmq-node.tar.gz https://github.com/IntersectMBO/dmq-node/releases/download/0.4.2.0/dmq-node-linux.tar.gz

解凍してtar.gzファイルの削除

tar -xzf dmq-node.tar.gz --strip-components=2 result/bin
rm dmq-node.tar.gz

バージョン確認

./dmq-node --version
期待される表示例:
dmq-node version: 0.4.2.0

バイナリファイルをシステムフォルダへコピー

sudo cp dmq-node /usr/local/bin/dmq-node

システムに反映されたバージョン確認

dmq-node --version
期待される表示例:
dmq-node version: 0.4.2.0

2. ソケット・設定ディレクトリ作成

DMQ Node設定ディレクトリの作成

設定ファイル格納ディレクトリの作成

mkdir -p $HOME/mithril/dmq

DMQ Nodeソケットパス

grep -q '^export DMQ_NODE_SOCKET_PATH=' $HOME/.bashrc || echo "export DMQ_NODE_SOCKET_PATH=\"$HOME/mithril/dmq/socket\"" >> $HOME/.bashrc
source $HOME/.bashrc

設定内容の確認

echo $DMQ_NODE_SOCKET_PATH
期待される表示例:
/home/cardano/mithril/dmq/socket

設定ファイルの作成

cat > $HOME/mithril/dmq/${NODE_CONFIG}-dmq-config.json << EOF
{
  "NetworkMagic": 2147483650,
  "CardanoNetworkMagic": ${NODE_NETWORK_ID},
  "CardanoNodeSocket": "${CARDANO_NODE_SOCKET_PATH}",
  "PeerSharing": true,
  "PeerSelectionCounters": true,
  "TraceOptions": {
    "": {
      "backends": [
        "Stdout MachineFormat",
        "PrometheusSimple suffix 0.0.0.0 12000"
      ],
      "severity": "Debug"
    }
  }
}
EOF
cat > $HOME/mithril/dmq/${NODE_CONFIG}-dmq-config.json << EOF
{
  "NetworkMagic": 2147483650,
  "CardanoNetworkMagic": ${NODE_NETWORK_ID},
  "CardanoNodeSocket": "${CARDANO_NODE_SOCKET_PATH}",
  "PeerSharing": false,
  "PeerSelectionCounters": true,
  "TraceOptions": {
    "": {
      "backends": [
        "Stdout MachineFormat",
        "PrometheusSimple suffix 0.0.0.0 12000"
      ],
      "severity": "Debug"
    }
  }
}
EOF

3. トポロジーファイル作成

クラウドのセキュリティグループでファイアウォールを開けている場合

ufw は使わず、コンソールで BPサーバーから DMQ 通信に使用するIP のみ Relayサーバーの DMQ ポート(例: 6161)へのインバウンド を許可してください。

sudo ufw allow from <BPのIP> to any port 6161 proto tcp
sudo ufw reload
dmq_bootstrap_peer_ip=34.76.22.193
dmq_bootstrap_peer_port=6161
cat > $HOME/mithril/dmq/${NODE_CONFIG}-dmq-topology.json << EOF
{
  "bootstrapPeers": [],
  "localRoots": [
    {
      "accessPoints": [
        {
          "address": "${dmq_bootstrap_peer_ip}",
          "port": ${dmq_bootstrap_peer_port}
        }
      ],
      "advertise": true,
      "trustable": false,
      "hotValency": 1
    }
  ],
  "peerSnapshotFile": null,
  "publicRoots": []
}
EOF

クラウドのセキュリティグループでファイアウォールを開けている場合

ufw は使わず、コンソールで Relayサーバーから DMQ 通信に使用するIP のみ BPサーバーの DMQ ポート(例: 6161)へのインバウンド を許可してください。

sudo ufw allow from <リレーのIP> to any port 6161 proto tcp
sudo ufw reload

自身のRelayサーバーで稼働するDMQ NodeIPアドレスを調べ、BPタブの変数relay_dmq_ipに代入してください。

relay_dmq_ip=***.***.***.***
relay_dmq_port=6161
cat > $HOME/mithril/dmq/${NODE_CONFIG}-dmq-topology.json << EOF
{
  "bootstrapPeers": [],
  "localRoots": [
    {
      "accessPoints": [
        {
          "address": "${relay_dmq_ip}",
          "port": ${relay_dmq_port}
        }
      ],
      "advertise": false,
      "trustable": false,
      "hotValency": 1
    }
  ],
  "peerSnapshotFile": null,
  "publicRoots": []
}
EOF

4. systemd サービス作成

cat > $HOME/mithril/dmq/dmq-node.service << EOF
[Unit]
Description=DMQ relay service
Wants=network-online.target
After=network-online.target cardano-node.service
StartLimitIntervalSec=0

[Service]
User=${USER}
Type=simple
WorkingDirectory=$NODE_HOME
Restart=always
RestartSec=60
LimitNOFILE=32768
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=dmq-node
ExecStart=/usr/local/bin/dmq-node --configuration-file $HOME/mithril/dmq/${NODE_CONFIG}-dmq-config.json --topology-file $HOME/mithril/dmq/${NODE_CONFIG}-dmq-topology.json --local-socket ${DMQ_NODE_SOCKET_PATH} --host-addr $(curl -s https://api.ipify.org) --port 6161

[Install]
WantedBy=multi-user.target
EOF
cat > $HOME/mithril/dmq/dmq-node.service << EOF
[Unit]
Description=DMQ block producer service
Wants=network-online.target
After=network-online.target cardano-node.service
StartLimitIntervalSec=0

[Service]
User=${USER}
Type=simple
WorkingDirectory=$NODE_HOME
Restart=always
RestartSec=60
LimitNOFILE=32768
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=dmq-node
ExecStart=/usr/local/bin/dmq-node --configuration-file $HOME/mithril/dmq/${NODE_CONFIG}-dmq-config.json --topology-file $HOME/mithril/dmq/${NODE_CONFIG}-dmq-topology.json --local-socket ${DMQ_NODE_SOCKET_PATH} --host-addr $(curl -s https://api.ipify.org) --port 6161

[Install]
WantedBy=multi-user.target
EOF

システムディレクトリへ配置

sudo cp $HOME/mithril/dmq/dmq-node.service /etc/systemd/system/dmq-node.service
sudo chmod 644 /etc/systemd/system/dmq-node.service

サービス設定反映

sudo systemctl daemon-reload

自動起動登録して起動

sudo systemctl enable dmq-node --now

状態確認

sudo systemctl status dmq-node --no-pager
期待される表示例:
● dmq-node.service - DMQ xxx service
~
     Active: active (running)

ログの確認

journalctl -u dmq-node -f

エイリアス設定

echo alias dmqnode='"journalctl -u dmq-node -f"' >> $HOME/.bashrc
source $HOME/.bashrc

5. DMQ Node の動作確認

DMQ Node のログを確認します。

sudo journalctl -u dmq-node -f

ソケットファイルの確認

ls -l ${DMQ_NODE_SOCKET_PATH}
期待される表示例:
srwxr-xr-x 1 cardano cardano 0 xxx xx xx:xx /home/cardano/mithril/dmq/socket

サービスポート確認

sudo ss -lntp | grep 6161
期待される表示例:
LISTEN 0      8       xxx.xxx.xxx.xxx:6161       0.0.0.0:*    users:(("dmq-node",pid=***,fd=***))   

6. Mithril Signer と連携

Mithril Signer が DMQ Node を利用するよう設定します。

grep -q '^DMQ_NODE_SOCKET_PATH=' $HOME/mithril/mithril-signer.env || echo "DMQ_NODE_SOCKET_PATH=${DMQ_NODE_SOCKET_PATH}" | sudo tee -a $HOME/mithril/mithril-signer.env > /dev/null
grep DMQ_NODE_SOCKET_PATH $HOME/mithril/mithril-signer.env
期待される表示例:
DMQ_NODE_SOCKET_PATH=/home/cardano/mithril/dmq/socket

Mithril Signer を再起動

sudo systemctl restart mithril-signer

状態確認

sudo systemctl status mithril-signer --no-pager
期待される表示例:
● mithril-signer.service - Mithril Signer service
~
     Active: active (running)

ログ確認

journalctl -u mithril-signer -f --output=cat

Last updated on

Cookieの使用について

当サイトでは、ドキュメントの効果測定と利用状況の把握のため、Google Analytics を使用しています。

同意すると、分析用 Cookie が有効になります。