Kể từ The Merge, một node Ethereum gồm hai chương trình phối hợp với nhau: client thực thi xử lý giao dịch và trạng thái, và client đồng thuận theo dõi chuỗi proof-of-stake. Hướng dẫn này chạy Geth (thực thi) và Lighthouse (đồng thuận) trên VPS Linux. Cách bố trí tương tự cũng áp dụng cho các cặp client khác.
Node đầy đủ cần gì
- Ổ đĩa. Đây là giới hạn chính. Hiện nay một node đầy đủ cần khoảng 1 đến 2 TB ổ NVMe nhanh, và con số này tăng dần. Node archive cần nhiều hơn rất nhiều. Hãy xem tài liệu client hiện hành để biết dung lượng mới nhất trước khi mua.
- RAM. 16 GB là mức tối thiểu thoải mái. 32 GB giúp ích khi đồng bộ và khi tải RPC cao.
- CPU. 4 nhân trở lên. Tốc độ lưu trữ quan trọng hơn xung nhịp.
- Mạng. Lưu lượng không giới hạn trên cổng nhanh. Các node di chuyển rất nhiều dữ liệu.
Vì dung lượng ổ đĩa lớn, hầu hết mọi người dùng máy chủ riêng cho Ethereum. Xem Ethereum node hosting để biết các gói đã được định cỡ.
Bước 1: chuẩn bị máy chủ
Dùng bản cài Ubuntu LTS mới và áp dụng các bước trong cách bảo mật VPS mới. Tạo người dùng riêng cho từng client để không có gì chạy bằng 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
Bước 2: tạo JWT secret dùng chung
Hai client xác thực lẫn nhau bằng một tệp bí mật dùng chung.
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
Bước 3: cài đặt và chạy Geth
Tải bản ổn định từ trang tải xuống Geth chính thức hoặc dùng kho gói của dự án, và xác minh nó. Sau đó tạo /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
Gắn HTTP vào 127.0.0.1 giúp RPC ở chế độ riêng tư. Không bao giờ mở nó trực tiếp ra internet.
Bước 4: cài đặt và chạy 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 cho phép client đồng thuận bắt đầu từ một trạng thái tin cậy gần đây, nên sẵn sàng sau vài phút thay vì vài ngày. Hãy đối chiếu URL checkpoint với tài liệu client trước khi dựa vào nó.
Bước 5: khởi động và theo dõi đồng bộ
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 trong kết quả nghĩa là node đã đồng bộ hoàn toàn. Lần đồng bộ đầu tiên có thể mất từ nhiều giờ đến vài ngày tùy tốc độ ổ đĩa.
Tường lửa và cổng
Hãy cho phép các cổng ngang hàng (mặc định là 30303 TCP/UDP cho Geth, 9000 TCP/UDP cho Lighthouse) để có số lượng peer tốt. Giữ các cổng 8545, 8551 và 5052 đóng với internet công cộng.