Desde The Merge, un nodo de Ethereum consta de dos programas que trabajan juntos: un cliente de ejecución que gestiona las transacciones y el estado, y un cliente de consenso que sigue la cadena de prueba de participación. Esta guía ejecuta Geth (ejecución) y Lighthouse (consenso) en un VPS Linux. La misma estructura funciona con otras parejas de clientes.
Qué necesita un nodo completo
- Disco. Este es el límite principal. Hoy un nodo completo necesita aproximadamente de 1 a 2 TB de almacenamiento NVMe rápido, y sigue creciendo. Un nodo de archivo necesita mucho más. Consulta la documentación actual de los clientes para conocer los tamaños actualizados antes de comprar.
- RAM. 16 GB es un mínimo cómodo. 32 GB ayudan durante la sincronización y con carga de RPC.
- CPU. 4 o más núcleos. La velocidad del almacenamiento importa más que la velocidad del reloj.
- Red. Tráfico ilimitado en un puerto rápido. Los nodos mueven muchos datos.
Por el tamaño del disco, la mayoría de las personas usan un servidor dedicado para Ethereum. Consulta hosting de nodos Ethereum para ver planes dimensionados.
Paso 1: prepara el servidor
Usa una instalación nueva de Ubuntu LTS y aplica los pasos de cómo proteger un VPS nuevo. Crea usuarios para cada cliente para que nada se ejecute 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
Paso 2: crear un secreto JWT compartido
Los dos clientes se autentican entre sí con un archivo de secreto compartido.
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
Paso 3: instalar y ejecutar Geth
Descarga la versión estable desde la página oficial de descargas de Geth o usa el repositorio de paquetes del proyecto, y verifícala. Luego 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
Enlazar HTTP a 127.0.0.1 mantiene el RPC privado. Nunca lo expongas directamente a internet.
Paso 4: instalar y ejecutar 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 sincronización por checkpoint permite que el cliente de consenso arranque desde un estado reciente de confianza, de modo que está listo en minutos en lugar de días. Verifica la URL del checkpoint con la documentación del cliente antes de depender de ella.
Paso 5: iniciar y vigilar la sincronización
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 en el resultado significa que el nodo está totalmente sincronizado. La primera sincronización puede tardar desde muchas horas hasta unos días, según la velocidad del disco.
Cortafuegos y puertos
Permite los puertos peer-to-peer (30303 TCP/UDP para Geth, 9000 TCP/UDP para Lighthouse por defecto) para obtener buen número de pares. Mantén 8545, 8551 y 5052 cerrados a la internet pública.