OffshoreVps
Tutoriais18 out. 20268 min de leituraPor a equipe da OffshoreVps

Como executar um nó Ethereum (Geth e Lighthouse) em um VPS

Execute um par de clientes Ethereum de execução e consenso no Linux: segredo JWT, unidades systemd, sincronização por checkpoint, portas e o hardware que um nó completo exige.

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.

Janela de terminal em um VPS mostrando os comandos usados para executar um nó Ethereum com Geth e Lighthouse, começando com “sudo adduser --system --group --no-create-home g”
O tipo de comandos que você executará no servidor neste guia.

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
Os passos deste guia em ordem: 1. O que um nó completo exige; 2. prepare o servidor; 3. crie um segredo JWT compartilhado; 4. instale e execute o Lighthouse; 5. inicie e acompanhe a sincronização; 6. Firewall e portas
Os passos deste guia, em ordem.

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.