以太坊作為全球領(lǐng)先的智能合約平臺(tái)和去中心化應(yīng)用(DApp)生態(tài)系統(tǒng)的基石,吸引了無(wú)數(shù)開(kāi)發(fā)者和研究者的關(guān)注,在自己的服務(wù)器上搭建以太坊節(jié)點(diǎn),不僅可以參與網(wǎng)絡(luò)驗(yàn)證、獲取交易收益(對(duì)于驗(yàn)證者節(jié)點(diǎn)),還能更深入地了解區(qū)塊鏈的運(yùn)行機(jī)制,并為DApp開(kāi)發(fā)和測(cè)試提供穩(wěn)定的環(huán)境,本文將詳細(xì)介紹如何在阿里云服務(wù)器上,從零開(kāi)始搭建一個(gè)以太坊全節(jié)點(diǎn)(以Geth客戶(hù)端為例)。
準(zhǔn)備工作:選擇合適的阿里云服務(wù)器
在開(kāi)始之前,選擇一款合適的云服務(wù)器至關(guān)重要,以太坊節(jié)點(diǎn)對(duì)硬件資源有一定要求:
- CPU:建議選擇至少2核vCPU,多核CPU有助于同步和同步后的交易處理。
- 內(nèi)存:建議至少4GB RAM,8GB或以上更佳,特別是在同步區(qū)塊和運(yùn)行復(fù)雜智能合約時(shí)。
- 存儲(chǔ):這是最關(guān)鍵的部分,以太坊區(qū)塊鏈數(shù)據(jù)量巨大且持續(xù)增長(zhǎng)(截至2024年初,已超過(guò)1TB,并仍在增加)。
- 類(lèi)型:必須選擇高性能云盤(pán),如ESSD(彈性塊存儲(chǔ)),以保證I/O性能,避免同步和運(yùn)行時(shí)因磁盤(pán)性能不足而卡頓。
- 大小:建議至少選擇500GB起步,但考慮到未來(lái)增長(zhǎng),1TB或更大更為穩(wěn)妥,可以在初始配置時(shí)選擇較小容量,后續(xù)通過(guò)擴(kuò)容功能增加。
- 操作系統(tǒng):推薦使用Ubuntu Server 20.04 LTS或22.04 LTS,64位版本,因?yàn)镚eth對(duì)Linux的支持最好,社區(qū)文檔也最豐富。
- 網(wǎng)絡(luò):確保服務(wù)器帶寬足夠,建議至少5Mbps以上,且最好是按量后付費(fèi)或固定帶寬,以保證同步速度的穩(wěn)定性。
連接服務(wù)器與基礎(chǔ)環(huán)境配置
- 遠(yuǎn)程連接:使用SSH工具(如PuTTY、Xshell或Terminal)連接到你的阿里云服務(wù)器,公網(wǎng)IP地址和登錄憑證在阿里云ECS控制臺(tái)可以獲取。
ssh root@你的服務(wù)器公網(wǎng)IP
- 更新系統(tǒng):
sudo apt update sudo apt upgrade -y
- 創(chuàng)建非root用戶(hù)(推薦):
sudo adduser ethereum # 創(chuàng)建一個(gè)名為ethereum的用戶(hù) sudo usermod -aG sudo ethereum # 將該用戶(hù)加入sudo組
然后退出root登錄,用新創(chuàng)建的ethereum用戶(hù)登錄:
exit ssh ethereum@你的服務(wù)器公網(wǎng)IP
- 安裝必要工具:
sudo apt install -y git wget curl build-essential
安裝Geth以太坊客戶(hù)端
Geth是以太坊官方Go語(yǔ)言實(shí)現(xiàn)的客戶(hù)端,是最常用、最穩(wěn)定的以太坊節(jié)點(diǎn)軟件之一。
-
下載Geth:訪問(wèn)Geth的官方GitHub Releases頁(yè)面(https://github.com/ethereum/go-ethereum/releases)獲取最新穩(wěn)定版的下載鏈接,或者使用以下命令下載(以最新版本為例,請(qǐng)?zhí)鎿Q為實(shí)際版本號(hào)):
# 下載最新穩(wěn)定版的geth(請(qǐng)?zhí)鎿Q為實(shí)際版本號(hào)) wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.13.12-4cd6ba6d.tar.gz
(注意:版本號(hào)會(huì)更新,請(qǐng)務(wù)必確認(rèn)最新穩(wěn)定版號(hào))
-
解壓并安裝:
tar -xvf geth-linux-amd64-*.tar.gz sudo cp geth-linux-amd64/geth /usr/local/bin/ # 驗(yàn)證安裝 geth version
如果看到版本信息,說(shuō)明安裝成功。
初始化以太坊節(jié)點(diǎn)
在啟動(dòng)節(jié)點(diǎn)之前,可以選擇初始化一個(gè)數(shù)據(jù)目錄,這一步不是必須的,但可以提前配置一些參數(shù)。
- 創(chuàng)建數(shù)據(jù)目錄:
mkdir -p ~/ethereum/data
- 初始化(可選):
如果你想創(chuàng)建一個(gè)自定義的genesis.json文件(通常用于私有鏈或測(cè)試鏈),可以初始化,對(duì)于公共主網(wǎng),這一步可以跳過(guò),Geth在首次啟動(dòng)時(shí)會(huì)自動(dòng)使用主網(wǎng)的genesis block。
# geth init --datadir ~/ethereum/data /path/to/your/genesis.json
啟動(dòng)并同步以太坊節(jié)點(diǎn)
這是核心步驟,我們將啟動(dòng)Geth節(jié)點(diǎn)并開(kāi)始同步以太坊區(qū)塊鏈數(shù)據(jù)。
-
基本啟動(dòng)命令:
geth --datadir ~/ethereum/data sync
--datadir:指定數(shù)據(jù)存儲(chǔ)目錄。sync:?jiǎn)?dòng)同步模式。
-
常用啟動(dòng)參數(shù)(推薦): 為了更好的體驗(yàn)和性能,通常會(huì)添加更多參數(shù):
geth \ --datadir ~/ethereum/data \ --http \ --http.addr "0.0.0.0" \ --http.port "8545" \ --http.api "eth,net,web3,personal" \ --ws \ --ws.addr "0.0.0.0" \ --ws.port "8546" \ --ws.api "eth,net,web3" \ --syncmode "snap" \ --gcmode "full" \ --cache 8192 \ --maxpeers 50 \ console
--http:?jiǎn)⒂肏TTP-RPC服務(wù),方便DApp或其他工具連接。--http.addr "0.0.0.0":允許任何IP訪問(wèn)HTTP-RPC服務(wù)(生產(chǎn)環(huán)境請(qǐng)謹(jǐn)慎設(shè)置,或限制特定IP)。--http.port "8545":HTTP-RPC服務(wù)端口,默認(rèn)8545。--http.api:允許通過(guò)HTTP-RPC訪問(wèn)的API列表。--ws:?jiǎn)⒂肳ebSocket-RPC服務(wù),適用于實(shí)時(shí)性要求高的應(yīng)用。--ws.addr和--ws.port:WebSocket服務(wù)地址和端口。--syncmode "snap":使用快速同步模式(snap sync),是目前最快的同步方式,它會(huì)先下載狀態(tài)數(shù)據(jù),再逐步同步歷史區(qū)塊。--gcmode "full":運(yùn)行全節(jié)點(diǎn)模式,保存所有區(qū)塊數(shù)據(jù),可以設(shè)置為light運(yùn)行輕節(jié)點(diǎn),但全節(jié)點(diǎn)功能更完整。--cache 8192:設(shè)置緩存大小(單位MB),適當(dāng)?shù)木彺婵梢蕴嵘阅埽ㄗh根據(jù)服務(wù)器內(nèi)存調(diào)整。--maxpeers 50:最大連接節(jié)點(diǎn)數(shù),默認(rèn)25,可根據(jù)網(wǎng)絡(luò)狀況調(diào)整。console:?jiǎn)?dòng)后進(jìn)入交互式控制臺(tái),方便管理和查詢(xún)節(jié)點(diǎn)狀態(tài)。
-
后臺(tái)運(yùn)行: 如果你想讓節(jié)點(diǎn)在后臺(tái)持續(xù)運(yùn)行,可以使用
nohup結(jié)合&:nohup geth --datadir ~/ethereum/data --syncmode snap --gcmode full --http --http.addr "0.0.0.0" --http.port "8545" --http.api "eth,net,web3,personal" --cache 8192 --maxpeers 50 > ~/ethereum/geth.log 2>&1 &
這樣,Geth將在后臺(tái)運(yùn)行,日志會(huì)輸出到
~/ethereum/geth.log文件中。
驗(yàn)證節(jié)點(diǎn)狀態(tài)與遠(yuǎn)程訪問(wèn)
-
查看同步狀態(tài): 如果啟動(dòng)時(shí)進(jìn)入了控制臺(tái)(
console),可以輸入:eth.syncing
如果返回
false,表示已同步完成;如果返回一個(gè)對(duì)象,則表示仍在同步中,可以查看currentBlock、highestBlock等進(jìn)度。 如果是后臺(tái)運(yùn)行,可以查看日志:tail -f ~/ethereum/geth.log
日志中會(huì)顯示同步進(jìn)度。
-
遠(yuǎn)程連接到Geth控制臺(tái): 在本地電腦上,可以通過(guò)以下命令連接到服務(wù)器上的Geth控制臺(tái):
ssh -L 8545:localhost:8545 ethereum@你的服務(wù)器公網(wǎng)IP
然后在SSH連接會(huì)話(huà)中運(yùn)行:
geth attach http://localhost:8545
或者直接使用geth attach命令(如果geth在PATH中):
geth attach ~/ethereum/data/geth.ipc
(注意:IPC文件只在本地有效,所以通常需要先SSH隧道連接)
-
通過(guò)HTTP-RPC遠(yuǎn)程訪問(wèn): 確保阿里云ECS服務(wù)器的安全組規(guī)則已放行你設(shè)置的HTTP和WebSocket端口(如8545和8546)。
登錄阿里云