スタートアップサービスの作成
Dingoは、Go言語で書かれたCardanoブロックチェーンデータノードであり、Ouroboros Network Node-to-Nodeミニプロトコルファミリーを使用して、Cardanoブロックチェーン上のネットワーク通信に積極的に参加します。
⚠️ これは開発中のプロジェクトであり、現在活発に開発が進められています
このガイドでは、systemdサービスの設定方法について説明します。systemdサービスを使用してDingoノードを実行すると、コンピューターが再起動したときにDingoノードを自動的に再起動することで、稼働時間を最大化できます。以下の手順に従って始めましょう。
✅ このガイドは一般的なLinux環境を前提としています。必要に応じてコマンドとパスを調整してください。
✅ このガイドは、クイックスタートガイドをすでに完了していることを前提としています。
ステップ1 - Dingoバイナリと設定の移動
Section titled “ステップ1 - Dingoバイナリと設定の移動”Dingoバイナリを/usr/local/bin/に、設定を/etc/dingo/に移動して、システム全体からアクセスできるようにします。
バイナリをコピーします:
sudo cp ~/dingo/dingo /usr/local/bin/✅
which dingoを実行して、バイナリがコピーされたことを確認できます
設定ディレクトリを作成し、設定をコピーします:
sudo mkdir -p /etc/dingosudo cp ~/dingo/dingo.yaml /etc/dingo/ステップ2 - dingo.yamlのパスの更新
Section titled “ステップ2 - dingo.yamlのパスの更新”サービスはあなたのユーザーとして実行されますが、設定は/etc/dingo/にあるため、データベースとソケットのパスが絶対パスを使用していることを確認する必要があります。以下を実行して、$HOMEを展開した状態で設定を再生成します:
sudo bash -c "cat <<EOF > /etc/dingo/dingo.yaml# DatabasedatabasePath: \"$HOME/dingo/.dingo\"
# Pluginsplugins: storage: blob: provider: \"badger\" config: blockCacheSize: 0 compression: false dataDir: \"$HOME/dingo/.dingo/badger\" gc: true indexCacheSize: 0 metadata: provider: \"sqlite\" config: dataDir: \"$HOME/dingo/.dingo/metadata.db\" mempool: provider: \"default\" config: # `capacity` はモードの既定値を上書きする任意の設定です。既定値は Praos モードと通常の serve モードで 1 MiB、Musashi モードで 25 MiB です。 # 既定値を使うには、このキーをコメントアウトするか省略します。 # capacity: 1048576 # `revalidationDeltaCap` は FIFO 再検証中に追随する変更量の上限です。既定値は 64 で、正の値でなければなりません。 # revalidationDeltaCap: 64 api: blockfrost: provider: \"builtin\" config: port: 0 mesh: provider: \"builtin\" config: port: 0 utxorpc: provider: \"builtin\" config: port: 0
# Mithrilmithril: aggregatorUrl: \"\" cleanupAfterLoad: true enabled: true verifyCertificates: true
# NetworkbindAddr: \"0.0.0.0\"metricsPort: 12798debugPort: 0network: \"preview\"privateBindAddr: \"127.0.0.1\"privatePort: 3002relayPort: 3001socketPath: \"$HOME/dingo/dingo.socket\"
# StoragebarkBaseUrl: \"\"barkPort: 0# `barkPort` と `databaseLifecycle.snapshotDir` を併用する場合は、`barkClientCaFilePath` と `tlsCertFilePath` / `tlsKeyFilePath` の両方が必要です。databaseLifecycle: # `snapshotEnabled` を有効にすると、エポック境界で自動スナップショットを作成します。 snapshotEnabled: false # 自動スナップショットの保存先です。各スナップショットは個別のサブディレクトリに書き出されます。 snapshotDir: \"$HOME/dingo/snapshots\" # ローカル保存に加えて、スナップショットをクラウドにもミラーします。`s3://bucket/prefix` または `gcs://bucket/prefix` を指定します。 # `dingo_extra_plugins` ビルドタグが必要です。 snapshotCloudDestination: \"\" # 複数ノードで同じクラウド保存先を共有する場合の追加パスです。 snapshotCloudDestinationPrefix: \"\" # 古い自動スナップショットの保持数です。`0` はすべて保持します。 snapshotRetention: 0 # N epoch ごとに自動スナップショットを作成します。`1` は毎回です。 snapshotEveryNEpochs: 1storageMode: \"core\"EOF"📝 APIポートはAPIストレージモードでのみ有効です。
0を設定すると、そのAPIは無効になります。
📝
debugPortはプロファイリングが必要な場合を除き0のままにします。debugPortは独立した任意のpprofリスナーを制御し、通常は無効のままにします。
storageMode: "api"plugins: api: blockfrost: provider: "builtin" config: port: 3000 mesh: provider: "builtin" config: port: 8080 utxorpc: provider: "builtin" config: port: 9090midnight: authTokenPolicyId: ""これらのポートは、更新後のローカル Blockfrost エクスプローラーの例に合わせた値です。これらのサービスが必要な場合にのみ有効にできます。
📝
midnight.authTokenPolicyIdは、API ストレージモードで Midnight インデックスを使用する場合にのみ適用されます。空のままにすると、認証トークン照合のより広い既定の動作が維持されます。
📝 停止中のデータディレクトリには
dingo database snapshot|restore|truncateを使えます。barkPortとdatabaseLifecycle.snapshotDirを併用した実行中ノードでは、Bark のDatabaseServiceがRestoreとTruncateをライブで実行します。これらの機能を使う場合はbarkClientCaFilePathとtlsCertFilePath/tlsKeyFilePathの両方を設定してください。
ステップ3 - Mithrilからのブートストラップ(初回実行のみ)
Section titled “ステップ3 - Mithrilからのブートストラップ(初回実行のみ)”サービスを初めて起動する前に、Mithrilスナップショットからデータベースをブートストラップします:
dingo mithril sync --config /etc/dingo/dingo.yaml📝
mithril.downloadMaxTransientRetriesは、TLS タイムアウト、HTTP 429 応答、HTTP 5xx 応答などの一時的なブートストラップダウンロード障害に対する再試行回数を制御します。例では既定値の10を使用しています。
これによりスナップショットがダウンロードおよびロードされ、数時間の同期時間を節約できます。詳細はクイックスタートガイドのステップ4を参照してください。
📝 これは一度だけ行う必要があります。初回ブートストラップ後は、systemdサービスがノードの同期を維持します。
ステップ4 - dingo.serviceユニットファイルの作成
Section titled “ステップ4 - dingo.serviceユニットファイルの作成”systemdサービスファイルを作成します。YOUR_USERをあなたのユーザー名(echo $USER)に置き換えてください:
cat <<ENDFILE | sudo tee /etc/systemd/system/dingo.service > /dev/null[Unit]Description=Dingo NodeAfter=network-online.target
[Service]Type=simpleRestart=on-failureRestartSec=10User=YOUR_USERExecStart=/usr/local/bin/dingo serve --config /etc/dingo/dingo.yamlSyslogIdentifier=dingoTimeoutStopSec=5
[Install]WantedBy=multi-user.targetENDFILEステップ5 - サービスの有効化と開始
Section titled “ステップ5 - サービスの有効化と開始”起動時にサービスが実行されるように有効化し、すぐに開始します:
sudo systemctl daemon-reloadsudo systemctl enable dingo.servicesudo systemctl start dingo.serviceステップ6 - ステータスの確認
Section titled “ステップ6 - ステータスの確認”サービスが実行中であることを確認します:
sudo systemctl status dingo.serviceログをリアルタイムで追跡するには:
sudo journalctl -u dingo -fエラーが発生した場合に最近のログを確認するには:
sudo journalctl -u dingo -n 50 --no-pager