Crear Servicio de Inicio
Un nodo de datos de la blockchain Cardano escrito en Go que participa activamente en las comunicaciones de red en la blockchain Cardano utilizando la familia de mini-protocolos Node-to-Node de la Red Ouroboros.
⚠️ Este es un trabajo en progreso y actualmente está en desarrollo activo
En esta guía te guiaremos a través de la configuración de un servicio systemd. Usar un servicio systemd para ejecutar un nodo Dingo maximiza el tiempo de actividad reiniciando automáticamente el nodo Dingo cuando la computadora se reinicia. Para comenzar, sigue los pasos a continuación.
✅ Esta guía asume una configuración típica de Linux. Por favor ajusta los comandos y rutas según sea necesario.
✅ Para esta guía asumimos que ya has completado la guía de inicio rápido.
Paso 1 - Mover binario de Dingo y configuración
Sección titulada «Paso 1 - Mover binario de Dingo y configuración»Moveremos el binario de Dingo a /usr/local/bin/ y la configuración a /etc/dingo/ para que sean accesibles a nivel de sistema.
Copia el binario:
sudo cp ~/dingo/dingo /usr/local/bin/✅ Puedes verificar que el binario fue copiado ejecutando
which dingo
Crea el directorio de configuración y copia la configuración:
sudo mkdir -p /etc/dingosudo cp ~/dingo/dingo.yaml /etc/dingo/Paso 2 - Actualizar Rutas en dingo.yaml
Sección titulada «Paso 2 - Actualizar Rutas en dingo.yaml»Como el servicio se ejecutará como tu usuario pero la configuración ahora está en /etc/dingo/, debemos asegurarnos de que las rutas de la base de datos y el socket usen rutas absolutas. Ejecuta lo siguiente para regenerar la configuración con tu $HOME expandido:
sudo bash -c "cat <<EOF > /etc/dingo/dingo.yamldatabasePath: \"$HOME/dingo/.dingo\"
plugins: storage: blob: provider: \"badger\" config: # Directorio de datos opcional de Badger. Si no lo defines, `databasePath` aporta la ruta. # dataDir: \"$HOME/dingo/.dingo\" metadata: provider: \"sqlite\" config: # Directorio de datos opcional de SQLite. Si no lo defines, `databasePath` aporta la ruta. # dataDir: \"$HOME/dingo/.dingo\" mempool: provider: \"default\" config: # Capacidad del mempool en bytes. Mantén la línea comentada para usar el valor predeterminado del modo. # capacity: 1048576 # `revalidationDeltaCap` es opcional. # Su valor predeterminado es 64 y debe ser mayor que 0. # 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
# Lifecycle de base de datosdatabaseLifecycle: # Captura snapshots automáticos al cierre de cada epoch. # Default: false # CLI: --db-snapshot-enabled snapshotEnabled: false # Directorio local donde Dingo escribe cada snapshot. # Requerido cuando `snapshotEnabled` vale true. # CLI: --db-snapshot-dir snapshotDir: \"$HOME/dingo/.dingo/snapshots\" # Destino opcional en la nube para reflejar cada snapshot. # Usa `s3://bucket/prefix` o `gcs://bucket/prefix`. # Requiere el build tag `dingo_extra_plugins`. # CLI: --db-snapshot-cloud-destination snapshotCloudDestination: \"\" # Segmento adicional que Dingo agrega antes de cada ID de snapshot. # CLI: --db-snapshot-cloud-destination-prefix snapshotCloudDestinationPrefix: \"\" # Número de snapshots automáticos recientes que Dingo conserva. # 0 conserva todos. # CLI: --db-snapshot-retention snapshotRetention: 0 # Captura un snapshot automático cada N cierres de epoch. # CLI: --db-snapshot-every-n-epochs snapshotEveryNEpochs: 1
# NetworkbindAddr: \"0.0.0.0\"metricsPort: 12798debugPort: 0network: \"preview\"privateBindAddr: \"127.0.0.1\"privatePort: 3002relayPort: 3001socketPath: \"$HOME/dingo/dingo.socket\"
# StoragebarkBaseUrl: \"\"barkPort: 0storageMode: \"core\"EOF"📝 Deja
debugPorten0salvo que se necesite perfilado.debugPortcontrola un listenerpprofopcional e independiente y normalmente debe permanecer deshabilitado.
📝
databaseLifecycle.snapshotRetentionconserva los snapshots automáticos más recientes.databaseLifecycle.snapshotCloudDestinationrefleja cada snapshot en S3 o GCS cuando Dingo se compila condingo_extra_plugins.
📝
dingo database snapshot,dingo database restore <snapshot-dir>ydingo database truncate --slot <slot>,dingo database truncate --hash <hash>odingo database truncate --block-number <n>trabajan sobre un directorio de datos offline.restoretambién acepta la misma URI en la nube que usasnapshotCloudDestinationy la descarga en un directorio temporal antes de restaurarla.
📝 Cuando
barkPortestá activo junto condatabaseLifecycle.snapshotDir, Bark también exponeRestoreyTruncateen vivo. Dingo exigebarkClientCaFilePathy tambiéntlsCertFilePathytlsKeyFilePathpara montar esas RPC destructivas con autenticación.
📝 Los puertos de API solo funcionan en el modo de almacenamiento
api. Establecer un puerto en0deshabilita esa API.
storageMode: "api"plugins: api: blockfrost: provider: "builtin" config: port: 3000 mesh: provider: "builtin" config: port: 8080 utxorpc: provider: "builtin" config: port: 9090midnight: authTokenPolicyId: ""Estos puertos coinciden con el ejemplo actualizado del explorador local de Blockfrost, y los operadores pueden dejarlos deshabilitados salvo que necesiten esos servicios.
📝
midnight.authTokenPolicyIdsolo se aplica en el modo de almacenamiento API con indexación de Midnight. Dejarlo vacío mantiene el comportamiento predeterminado más amplio para la coincidencia de tokens de autenticación.
Paso 3 - Iniciar desde Mithril (solo primera ejecución)
Sección titulada «Paso 3 - Iniciar desde Mithril (solo primera ejecución)»Antes de iniciar el servicio por primera vez, inicia la base de datos desde una instantánea de Mithril:
dingo mithril sync --config /etc/dingo/dingo.yaml📝
mithril.downloadMaxTransientRetriescontrola los reintentos ante fallos transitorios en la descarga de arranque, como tiempos de espera de TLS, respuestas HTTP 429 y respuestas HTTP 5xx. El ejemplo usa el valor predeterminado de10.
Esto descarga y carga una instantánea, ahorrando horas de tiempo de sincronización. Consulta el Paso 4 de la guía de inicio rápido para más detalles.
📝 Solo necesitas hacer esto una vez. Después del inicio inicial, el servicio systemd mantendrá el nodo sincronizado.
Paso 4 - Crear Archivo de Unidad dingo.service
Sección titulada «Paso 4 - Crear Archivo de Unidad dingo.service»Crea el archivo de servicio systemd. Reemplaza YOUR_USER con tu nombre de usuario (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.targetENDFILEPaso 5 - Habilitar e Iniciar el Servicio
Sección titulada «Paso 5 - Habilitar e Iniciar el Servicio»Habilita el servicio para que se inicie en el arranque e inícialo ahora:
sudo systemctl daemon-reloadsudo systemctl enable dingo.servicesudo systemctl start dingo.servicePaso 6 - Verificar Estado
Sección titulada «Paso 6 - Verificar Estado»Verifica que el servicio está ejecutándose:
sudo systemctl status dingo.servicePara seguir los registros en tiempo real:
sudo journalctl -u dingo -fPara ver los registros recientes si hay un error:
sudo journalctl -u dingo -n 50 --no-pager