The Merge 이후 Ethereum 노드는 두 프로그램이 함께 동작합니다. 트랜잭션과 상태를 처리하는 실행 클라이언트와 지분 증명 체인을 따라가는 합의 클라이언트입니다. 이 가이드에서는 Linux VPS에서 Geth(실행)와 Lighthouse(합의)를 실행합니다. 다른 클라이언트 조합에서도 같은 구성이 통용됩니다.
풀 노드에 필요한 것
- 디스크. 이것이 가장 큰 제약입니다. 풀 노드는 현재 대략 1~2 TB의 빠른 NVMe 스토리지가 필요하며 계속 늘어납니다. 아카이브 노드는 훨씬 더 많이 필요합니다. 구매 전에 클라이언트 문서에서 최신 크기를 확인하세요.
- RAM. 16 GB가 무난한 최소 사양입니다. 동기화 중이나 RPC 부하가 있을 때는 32 GB가 도움이 됩니다.
- 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
체크포인트 동기화를 사용하면 합의 클라이언트가 최근의 신뢰할 수 있는 상태에서 시작하므로 며칠이 아니라 몇 분 만에 준비됩니다. 의존하기 전에 체크포인트 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이면 노드가 완전히 동기화된 것입니다. 첫 동기화에는 디스크 속도에 따라 몇 시간에서 며칠이 걸릴 수 있습니다.
방화벽과 포트
피어 수를 충분히 확보하려면 피어 투 피어 포트(기본값은 Geth 30303 TCP/UDP, Lighthouse 9000 TCP/UDP)를 허용하세요. 8545, 8551, 5052는 공용 인터넷에 닫아 두세요.