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. # Dingo no admite capturas automáticas cuando el proveedor principal de blobs es `badger`, `s3` o `gcs`. # Desactiva las capturas automáticas o usa un proveedor principal compatible. # 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. No habilitesdatabaseLifecycle.snapshotEnabledpara capturas automáticas cuandobadger,s3ogcssea el proveedor principal de blobs. Las operaciones manualesdingo database snapshotyCreateSnapshotde Bark siguen disponibles.
📝
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 exponeCreateSnapshot,RestoreyTruncateen 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: # Habilita el servidor gRPC de Midnight. Predeterminado: false. serverEnabled: false # Expone el descubrimiento del servicio gRPC. Requiere `serverEnabled`. Predeterminado: false. reflectionEnabled: false # Permite conexiones sin cifrar en una dirección remota. Predeterminado: false. allowInsecureRemote: false # Puerto de escucha gRPC. Debe ser distinto de `0` cuando `serverEnabled` es `true`. port: 50051 # Dirección de escucha gRPC. Por defecto, las conexiones sin cifrar solo usan loopback. host: "127.0.0.1" 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.
📝 La indexación de Midnight requiere
enabled: truey el modo de almacenamientoapi; el servidor gRPC es un control independiente y requiereserverEnabled: truey unportdistinto de0. ConserverEnabled: false, Dingo mantiene desactivada la escucha.reflectionEnabledrequiere el servidor. Dingo usa127.0.0.1por defecto y convierte un valor vacío dehosten loopback. Una conexión sin cifrar a un host no local requiereallowInsecureRemote: true, salvo que TLS proteja la escucha.
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¡Felicidades, has configurado un servicio de inicio para Dingo!
Sección titulada «¡Felicidades, has configurado un servicio de inicio para Dingo!»Docs authored by Doc Holiday