Salta ai contenuti

CLI

nx è l’interfaccia a riga di comando di Numax. Ha due comandi:

  • nx run - carica ed esegue un modulo WASM
  • nx config - gestisce i file di configurazione

nx run

nx run <MODULE> [OPTIONS]

Carica <MODULE>, avvia il runtime, chiama run() una volta, poi termina. Se --listen è passato, la sync è abilitata e il runtime resta attivo finché --settle-for non scade, oppure fino a SIGINT/SIGTERM se non è impostata una finestra di settle.

Obbligatorio

ArgomentoDescrizione
<MODULE>Percorso al file .wasm da eseguire

Storage

FlagEnvDescrizione
--datastore-path <PATH>NX_DATASTORE_PATHDirectory per il datastore sled locale. Default: ./nx-data
--config <PATH>-Percorso a un file di configurazione TOML Numax

Networking

La sync è disabilitata per default. Passa --listen per abilitarla.

FlagEnvDescrizione
--listen <ADDR>NX_LISTENIndirizzo su cui ascoltare (es. 0.0.0.0:9000). Obbligatorio per la sync
--peer <ADDR>NX_PEER / NX_PEERSIndirizzo di un peer a cui connettersi. Ripetibile. Richiede --listen

NX_PEERS accetta una lista separata da virgole: NX_PEERS=127.0.0.1:9001,127.0.0.1:9002

Timing

FlagDescrizione
--wait-before-run <DURATION>Attendi dopo aver avviato la sync e prima di chiamare run(). Dà tempo ai peer di connettersi. Richiede --listen
--settle-for <DURATION>Tieni la sync attiva per questa durata dopo il ritorno di run(), poi spegni. Richiede --listen
--shutdown-timeout <DURATION>Tempo massimo per lo shutdown graceful prima di restituire un errore

Formato delle durate: 500ms, 5s, 2m, o un numero semplice (interpretato come secondi).

Ispezione dello stato CRDT

Questi flag stampano il valore finale lato host di una chiave CRDT dopo che la finestra di settle è completata. Tutti richiedono --listen.

FlagTipo CRDTFormato output
--print-gcounter <KEY>GCounterkey = 42
--print-pncounter <KEY>PNCounterkey = -3
--print-lww-register <KEY>LWW-Registerkey = value oppure key = <unset>
--print-lww-map <KEY>LWW-Mapkey = {field1=val1, field2=val2}
--print-orset <KEY>ORSetkey = [tag1, tag2]
--print-rga <KEY>RGAkey = [item1, item2]

Logging

FlagEnvValoriDescrizione
-v / --verbose--Imposta il log level a debug
--log-level <LEVEL>NX_LOG_LEVELtrace debug info warn errorLog level esplicito. Ha la precedenza su --verbose
--log-format <FORMAT>NX_LOG_FORMATtext jsonFormato di output per i log del runtime. Default: text

Osservabilità

FlagEnvDescrizione
--observability-listen <ADDR>NX_OBSERVABILITY_LISTENEspone un endpoint HTTP locale per le metriche (es. 127.0.0.1:9100)

TLS / mTLS

TLS è opzionale. Per abilitarlo, fornisci --tls-cert e --tls-key insieme. Per mTLS (autenticazione reciproca), fornisci anche --tls-ca.

FlagEnvDescrizione
--tls-cert <PATH>NX_TLS_CERTPercorso al certificato TLS di questo nodo (PEM)
--tls-key <PATH>NX_TLS_KEYPercorso alla chiave privata TLS di questo nodo (PEM)
--tls-ca <PATH>NX_TLS_CAPercorso al certificato CA per verificare i peer (PEM). Abilita mTLS
--allowed-peers <ID1,ID2,...>NX_ALLOWED_PEERSAllowlist di NodeId dei peer (hex), separati da virgola. Richiede --tls-ca
--tls-insecureNX_TLS_INSECURESalta la verifica del certificato TLS. Solo sviluppo. Non usare in produzione.

Regole:

  • --tls-cert e --tls-key devono sempre essere forniti insieme.
  • --tls-insecure è mutualmente esclusivo con --tls-ca e --allowed-peers.
  • --allowed-peers richiede --tls-ca.

Debug

FlagDescrizione
--debug-protocolUsa JSON invece di bincode per il protocollo wire della sync. Utile per ispezionare il traffico con un packet capture. Richiede --listen

Precedenza della configurazione

Quando un flag ha una variabile d’ambiente corrispondente e una voce nel file TOML, l’ordine di risoluzione è:

CLI flags > variabili d'ambiente NX_* > file di configurazione TOML > default del runtime

nx config

nx config init

nx config init [--output <PATH>] [--force]

Genera un file di configurazione TOML Numax commentato con tutti i campi disponibili e i loro default.

FlagDefaultDescrizione
--output <PATH>numax.tomlDove scrivere il file
--force-Sovrascrive il file se esiste già

Esempio:

Terminal window
nx config init --output node-a.toml

Il file generato ha questo aspetto:

# Numax configuration file.
# Precedence: CLI flags > NX_* environment variables > this file > defaults.
[storage]
datastore_path = "./nx-data"
[network]
listen = "0.0.0.0:9000"
peers = []
serialization_format = "bincode"
[tls]
# cert = "./certs/node.pem"
# key = "./certs/node-key.pem"
# ca = "./certs/ca.pem"
allowed_peers = []
insecure = false
[observability]
# listen = "127.0.0.1:9100"
log_level = "info"
log_format = "text"
request_timeout_secs = 5
[limits]
max_peers = 64
queued_ops_limit = 10000
op_log_limit = 10000
seen_ops_limit = 100000
max_message_size = "16MiB"
socket_timeout_secs = 30
reconnect_initial_delay = "500ms"
reconnect_max_delay = "30s"
peer_dead_after_failures = 3
anti_entropy_interval = "30s"
[discovery]
mode = "static"

nx config validate

nx config validate [--config <PATH>]

Analizza e valida un file di configurazione TOML senza eseguire un modulo. Esce con un codice non-zero e un messaggio di errore se il file non è valido.

FlagDefaultDescrizione
--config <PATH>numax.tomlPercorso al file di configurazione da validare

Esempio:

Terminal window
nx config validate --config node-a.toml
# configuration is valid: node-a.toml

nx config show

nx config show --config <PATH> --effective

Risolve e stampa la configurazione effettiva dopo aver applicato CLI flags, variabili d’ambiente, file di configurazione e default del runtime - in quest’ordine.

FlagDefaultDescrizione
--config <PATH>numax.tomlPercorso al file di configurazione
--effective-Obbligatorio. Stampa la configurazione completamente risolta

Esempio:

Terminal window
nx config show --config node-a.toml --effective

Riferimento file di configurazione TOML

Un file di configurazione può fornire qualsiasi sottoinsieme delle sezioni seguenti. Tutti i campi sono opzionali. I campi sconosciuti vengono rifiutati.

[storage]

[storage]
datastore_path = "./nx-data"
CampoTipoDescrizione
datastore_pathpercorsoDirectory per il datastore sled locale

[network]

[network]
listen = "0.0.0.0:9000"
peers = ["127.0.0.1:9001"]
serialization_format = "bincode"
CampoTipoValoriDescrizione
listenstringahost:portaIndirizzo su cui ascoltare. Obbligatorio per la sync
peersstringa[]host:portaIndirizzi dei peer a cui connettersi
serialization_formatstringabincode jsonFormato wire. Default: bincode

[tls]

[tls]
cert = "./certs/node.pem"
key = "./certs/node-key.pem"
ca = "./certs/ca.pem"
allowed_peers = ["node-a", "node-b"]
insecure = false
CampoTipoDescrizione
certpercorsoCertificato del nodo (PEM)
keypercorsoChiave privata del nodo (PEM)
capercorsoCertificato CA per la verifica dei peer (PEM). Abilita mTLS
allowed_peersstringa[]Allowlist di NodeId dei peer
insecureboolSalta la verifica. Solo sviluppo

[observability]

[observability]
listen = "127.0.0.1:9100"
log_level = "info"
log_format = "text"
request_timeout_secs = 5
CampoTipoValoriDescrizione
listenstringahost:portaIndirizzo endpoint HTTP per le metriche
log_levelstringatrace debug info warn errorVerbosità dei log
log_formatstringatext jsonFormato di output dei log
request_timeout_secsintero> 0Timeout delle richieste di osservabilità in secondi

[limits]

[limits]
max_peers = 64
queued_ops_limit = 10000
op_log_limit = 10000
seen_ops_limit = 100000
max_message_size = "16MiB"
socket_timeout_secs = 30
reconnect_initial_delay = "500ms"
reconnect_max_delay = "30s"
peer_dead_after_failures = 3
anti_entropy_interval = "30s"
CampoTipoDescrizione
max_peersinteroNumero massimo di peer connessi
queued_ops_limitinteroMassimo di operazioni in coda per il broadcast
op_log_limitinteroMassimo di operazioni nel log locale
seen_ops_limitinteroMassimo di ID operazione tracciati per la deduplicazione
max_message_sizestringaDimensione massima del messaggio di sync (es. 16MiB, 4KiB)
socket_timeout_secsinteroTimeout lettura/scrittura socket in secondi
reconnect_initial_delaydurataBackoff iniziale prima di riconnettersi a un peer
reconnect_max_delaydurataBackoff massimo per i tentativi di riconnessione
peer_dead_after_failuresinteroFallimenti consecutivi prima che un peer venga marcato come morto
anti_entropy_intervaldurataIntervallo tra i cicli di riparazione anti-entropy

reconnect_initial_delay e reconnect_max_delay devono essere forniti insieme. reconnect_initial_delay deve essere minore o uguale a reconnect_max_delay.

[discovery]

[discovery]
mode = "static"
CampoTipoValoriDescrizione
modestringastaticModalità di scoperta dei peer. Solo static è supportato oggi. La scoperta dinamica è nel roadmap

Esempio completo a due nodi

Terminal window
# Genera i file di configurazione
nx config init --output node-a.toml --force
nx config init --output node-b.toml --force
# Modifica node-a.toml: imposta listen = "0.0.0.0:9000", peers = ["127.0.0.1:9001"]
# Modifica node-b.toml: imposta listen = "0.0.0.0:9001", peers = ["127.0.0.1:9000"]
# Valida
nx config validate --config node-a.toml
nx config validate --config node-b.toml
# Ispeziona la configurazione risolta
nx config show --config node-a.toml --effective
# Esegui
nx run my_module.wasm --config node-a.toml --settle-for 5s --print-gcounter counter:visits
nx run my_module.wasm --config node-b.toml --settle-for 5s --print-gcounter counter:visits