OffshoreVps
Tutorial18 ott 20268 min di letturaDi il team di OffshoreVps

Come eseguire un nodo Ethereum (Geth e Lighthouse) su un VPS

Esegui una coppia di client Ethereum di esecuzione e consenso su Linux: segreto JWT, unit systemd, sincronizzazione da checkpoint, porte e quale hardware serve a un nodo completo.

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.

Finestra del terminale su un VPS che mostra i comandi usati per eseguire un nodo Ethereum con Geth e Lighthouse, a partire da “sudo adduser --system --group --no-create-home g”
Il tipo di comandi che eseguirai sul tuo server in questa guida.

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
I passaggi di questa guida in ordine: 1. Di cosa ha bisogno un nodo completo; 2. prepara il server; 3. crea un segreto JWT condiviso; 4. installa ed esegui Lighthouse; 5. avvia e osserva la sincronizzazione; 6. Firewall e porte
I passaggi di questa guida, in ordine.

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.