The Merge以降、Ethereumノードは2つのプログラムが連携して動きます。トランザクションとステートを扱う実行クライアントと、プルーフ・オブ・ステークのチェーンを追うコンセンサスクライアントです。このガイドでは、LinuxのVPS上でGeth(実行)とLighthouse(コンセンサス)を動かします。他のクライアントの組み合わせでも同じ構成が使えます。
フルノードに必要なもの
- ディスク。これが主な制約です。現在、フルノードには高速なNVMeストレージがおよそ1〜2 TB必要で、今後も増えていきます。アーカイブノードにははるかに多くの容量が必要です。購入前に、最新のクライアントドキュメントでサイズを確認してください。
- RAM。16 GBが無理のない最低ラインです。32 GBあると、同期中やRPC負荷時に助けになります。
- CPU。4コア以上。クロック速度よりもストレージ速度のほうが重要です。
- ネットワーク。高速ポートでの無制限トラフィック。ノードは大量のデータをやり取りします。
ディスクサイズの都合上、Ethereumには専用サーバーを使う人がほとんどです。サイズ別のプランはEthereumノードホスティングをご覧ください。
ステップ 1:サーバーを準備する
新しいUbuntu LTSをインストールし、新しいVPSを守る方法の手順を適用してください。各クライアントごとにユーザーを作成し、何も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
ステップ2:共有JWTシークレットを作成する
2つのクライアントは、共有シークレットファイルを使って互いに認証します。
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
ステップ3:Gethをインストールして実行する
公式のGethダウンロードページから安定版リリースをダウンロードするか、プロジェクトのパッケージリポジトリを利用し、検証してください。その後、/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
HTTPを127.0.0.1にバインドすると、RPCは非公開のままになります。インターネットに直接公開しないでください。
ステップ4: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
チェックポイント同期を使うと、コンセンサスクライアントは最近の信頼できる状態から開始できるため、数日ではなく数分で準備が整います。頼りにする前に、チェックポイントのURLをクライアントのドキュメントで確認してください。
ステップ5:起動して同期を見守る
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であれば、ノードは完全に同期されています。初回同期には、ディスク速度によって数時間から数日かかることがあります。
ファイアウォールとポート
ピア数を十分に確保するため、ピアツーピア用ポート(デフォルトではGethが30303 TCP/UDP、Lighthouseが9000 TCP/UDP)を許可してください。8545、8551、5052は公開インターネットに対して閉じたままにします。