Depuis The Merge, un nœud Ethereum se compose de deux programmes qui travaillent ensemble : un client d'exécution qui gère les transactions et l'état, et un client de consensus qui suit la chaîne en proof-of-stake. Ce guide exécute Geth (exécution) et Lighthouse (consensus) sur un VPS Linux. La même architecture fonctionne avec d'autres paires de clients.
Ce dont a besoin un nœud complet
- Disque. C'est la principale limite. Un nœud complet nécessite aujourd'hui environ 1 à 2 To de stockage NVMe rapide, et cela augmente. Un nœud d'archive en demande bien davantage. Consultez la documentation actuelle des clients pour connaître les tailles à jour avant d'acheter.
- RAM. 16 Go est un minimum confortable. 32 Go aident pendant la synchronisation et sous charge RPC.
- CPU. 4 cœurs ou plus. La vitesse du stockage compte davantage que la fréquence d'horloge.
- Réseau. Trafic illimité sur un port rapide. Les nœuds déplacent beaucoup de données.
En raison de la taille du disque, la plupart des gens utilisent un serveur dédié pour Ethereum. Consultez l'hébergement de nœud Ethereum pour des offres dimensionnées.
Étape 1 : préparer le serveur
Utilisez une installation Ubuntu LTS vierge et appliquez les étapes de comment sécuriser un nouveau VPS. Créez un utilisateur pour chaque client afin que rien ne s'exécute en 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
Étape 2 : créer un secret JWT partagé
Les deux clients s'authentifient mutuellement avec un fichier de secret partagé.
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
Étape 3 : installer et exécuter Geth
Téléchargez la version stable depuis la page officielle de téléchargement de Geth ou utilisez le dépôt de paquets du projet, et vérifiez-la. Créez ensuite /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
Lier HTTP à 127.0.0.1 garde le RPC privé. Ne l'exposez jamais directement à Internet.
Étape 4 : installer et exécuter 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 synchronisation par checkpoint permet au client de consensus de démarrer à partir d'un état récent de confiance, de sorte qu'il est prêt en quelques minutes au lieu de plusieurs jours. Vérifiez l'URL du checkpoint dans la documentation du client avant de vous y fier.
Étape 5 : démarrer et suivre la synchronisation
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 dans le résultat signifie que le nœud est entièrement synchronisé. La première synchronisation peut prendre de nombreuses heures à quelques jours selon la vitesse du disque.
Pare-feu et ports
Autorisez les ports pair-à-pair (30303 TCP/UDP pour Geth, 9000 TCP/UDP pour Lighthouse par défaut) afin d'obtenir un bon nombre de pairs. Gardez 8545, 8551 et 5052 fermés à l'Internet public.