Desde o The Merge, um nó Ethereum são dois programas trabalhando juntos: um cliente de execução, que cuida das transações e do estado, e um cliente de consenso, que acompanha a cadeia de proof-of-stake. Este guia roda Geth (execução) e Lighthouse (consenso) em uma VPS Linux. A mesma estrutura funciona com outros pares de clientes.
O que um nó completo precisa
- Disco. Este é o principal limite. Um nó completo precisa hoje de cerca de 1 a 2 TB de armazenamento NVMe rápido, e isso cresce. Um nó de arquivo (archive) precisa de muito mais. Consulte a documentação atual dos clientes para saber os tamanhos atualizados antes de comprar.
- RAM. 16 GB é um mínimo confortável. 32 GB ajudam durante a sincronização e sob carga de RPC.
- CPU. 4 ou mais núcleos. A velocidade do armazenamento importa mais que o clock.
- Rede. Tráfego ilimitado em uma porta rápida. Os nós movimentam muitos dados.
Por causa do tamanho do disco, a maioria das pessoas usa um servidor dedicado para o Ethereum. Veja hospedagem de nó Ethereum para planos dimensionados.
Passo 1: prepare o servidor
Use uma instalação nova do Ubuntu LTS e aplique os passos de como proteger uma VPS nova. Crie usuários para cada cliente, para que nada rode como 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: crie um segredo JWT compartilhado
Os dois clientes se autenticam um no outro com um arquivo de segredo compartilhado.
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: instale e rode o Geth
Baixe a versão estável na página oficial de downloads do Geth ou use o repositório de pacotes do projeto, e verifique-a. Depois crie /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
Vincular o HTTP a 127.0.0.1 mantém o RPC privado. Nunca o exponha diretamente à internet.
Passo 4: instale e rode o 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
A checkpoint sync permite que o cliente de consenso comece a partir de um estado recente confiável, ficando pronto em minutos em vez de dias. Verifique a URL do checkpoint na documentação do cliente antes de confiar nela.
Passo 5: inicie e acompanhe a sincronização
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 no resultado significa que o nó está totalmente sincronizado. A primeira sincronização pode levar de muitas horas a alguns dias, dependendo da velocidade do disco.
Firewall e portas
Libere as portas peer-to-peer (30303 TCP/UDP para o Geth, 9000 TCP/UDP para o Lighthouse por padrão) para obter uma boa quantidade de peers. Mantenha 8545, 8551 e 5052 fechadas para a internet pública.