OffshoreVps
Tutoriales18 oct 20268 min de lecturaPor el equipo de OffshoreVps

Cómo ejecutar un nodo Ethereum (Geth y Lighthouse) en un VPS

Ejecuta un par de clientes Ethereum de ejecución y consenso en Linux: secreto JWT, unidades systemd, sincronización por checkpoint, puertos y qué hardware necesita un nodo completo.

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.

Ventana de terminal en un VPS que muestra los comandos usados para ejecutar un nodo Ethereum con Geth y Lighthouse, empezando por “sudo adduser --system --group --no-create-home g”
El tipo de comandos que ejecutarás en tu servidor en esta guía.

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
Los pasos de esta guía en orden: 1. Qué necesita un nodo completo; 2. prepara el servidor; 3. crea un secreto JWT compartido; 4. instala y ejecuta Lighthouse; 5. inicia y vigila la sincronización; 6. Cortafuegos y puertos
Los pasos de esta guía, en orden.

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.