Dopo The Merge, un nodo Ethereum è composto da due programmi che lavorano insieme: un client di esecuzione che gestisce transazioni e stato, e un client di consenso che segue la catena proof-of-stake. Questa guida esegue Geth (esecuzione) e Lighthouse (consenso) su un VPS Linux. Lo stesso schema funziona con altre coppie di client.
Cosa serve a un nodo completo
- Disco. È il limite principale. Oggi un nodo completo richiede circa 1-2 TB di storage NVMe veloce, e cresce. Un nodo archive richiede molto di più. Consulta la documentazione aggiornata dei client per le dimensioni correnti prima di acquistare.
- RAM. 16 GB sono un minimo confortevole. 32 GB aiutano durante la sincronizzazione e con il carico RPC.
- CPU. 4 o più core. La velocità dello storage conta più della frequenza di clock.
- Rete. Traffico illimitato su una porta veloce. I nodi spostano molti dati.
A causa delle dimensioni del disco, la maggior parte delle persone usa un server dedicato per Ethereum. Vedi hosting di nodi Ethereum per i piani dimensionati.
Passo 1: prepara il server
Usa un'installazione pulita di Ubuntu LTS e applica i passaggi di come proteggere un nuovo VPS. Crea un utente per ogni client in modo che nulla giri come root.
sudo adduser --system --group --no-create-home geth
sudo adduser --system --group --no-create-home lighthouse
sudo mkdir -p /var/lib/geth /var/lib/lighthouse /etc/ethereum
sudo chown geth:geth /var/lib/geth
sudo chown lighthouse:lighthouse /var/lib/lighthouse
Passo 2: crea un segreto JWT condiviso
I due client si autenticano a vicenda con un file segreto condiviso.
openssl rand -hex 32 | sudo tee /etc/ethereum/jwt.hex
sudo chmod 640 /etc/ethereum/jwt.hex
sudo chgrp geth /etc/ethereum/jwt.hex
sudo usermod -aG geth lighthouse
Passo 3: installa ed esegui Geth
Scarica la release stabile dalla pagina di download ufficiale di Geth oppure usa il repository dei pacchetti del progetto, e verificala. Poi crea /etc/systemd/system/geth.service:
[Unit]
Description=Geth
After=network-online.target
[Service]
User=geth
ExecStart=/usr/local/bin/geth \
--mainnet \
--datadir /var/lib/geth \
--authrpc.jwtsecret /etc/ethereum/jwt.hex \
--http --http.addr 127.0.0.1 --http.api eth,net,web3
Restart=on-failure
TimeoutStopSec=180
[Install]
WantedBy=multi-user.target
Associare HTTP a 127.0.0.1 mantiene privato l'RPC. Non esporlo mai direttamente a internet.
Passo 4: installa ed esegui Lighthouse
[Unit]
Description=Lighthouse beacon node
After=geth.service
[Service]
User=lighthouse
ExecStart=/usr/local/bin/lighthouse bn \
--network mainnet \
--datadir /var/lib/lighthouse \
--execution-endpoint http://127.0.0.1:8551 \
--execution-jwt /etc/ethereum/jwt.hex \
--checkpoint-sync-url https://mainnet.checkpoint.sigp.io
Restart=on-failure
[Install]
WantedBy=multi-user.target
La checkpoint sync permette al client di consenso di partire da uno stato recente e attendibile, così è pronto in pochi minuti invece che in giorni. Verifica l'URL del checkpoint con la documentazione del client prima di farci affidamento.
Passo 5: avvia e controlla la sincronizzazione
sudo systemctl enable --now geth lighthouse
journalctl -u geth -f
curl -s -X POST -H 'Content-Type: application/json' \
--data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' http://127.0.0.1:8545
false nel risultato significa che il nodo è completamente sincronizzato. La prima sincronizzazione può richiedere da molte ore a qualche giorno, a seconda della velocità del disco.
Firewall e porte
Consenti le porte peer-to-peer (30303 TCP/UDP per Geth, 9000 TCP/UDP per Lighthouse per impostazione predefinita) per ottenere un buon numero di peer. Tieni chiuse 8545, 8551 e 5052 verso la rete pubblica.