После The Merge нода Ethereum состоит из двух программ, работающих вместе: клиента исполнения, который обрабатывает транзакции и состояние, и клиента консенсуса, который следует за цепочкой proof-of-stake. В этом руководстве на Linux VPS запускаются Geth (исполнение) и Lighthouse (консенсус). Та же схема работает и с другими парами клиентов.
Что нужно полной ноде
- Диск. Это главное ограничение. Сегодня полной ноде нужно примерно от 1 до 2 ТБ быстрого хранилища NVMe, и объём растёт. Архивной ноде нужно намного больше. Перед покупкой уточните актуальные размеры в документации клиентов.
- ОЗУ. 16 ГБ — комфортный минимум. 32 ГБ помогают при синхронизации и под нагрузкой 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
Два клиента аутентифицируют друг друга с помощью общего файла-секрета.
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
Checkpoint sync позволяет клиенту консенсуса стартовать с недавнего доверенного состояния, так что он готов через несколько минут, а не дней. Прежде чем полагаться на 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 в результате означает, что нода полностью синхронизирована. Первая синхронизация может занять от многих часов до нескольких дней в зависимости от скорости диска.
Файрвол и порты
Разрешите порты одноранговой сети (по умолчанию 30303 TCP/UDP для Geth и 9000 TCP/UDP для Lighthouse), чтобы у вас было хорошее число пиров. Держите 8545, 8551 и 5052 закрытыми для публичного интернета.