以太坊作為全球領(lǐng)先的智能合約平臺(tái),其去中心化特性離不開眾多節(jié)點(diǎn)的支持,搭建自己的以太坊節(jié)點(diǎn),不僅可以參與網(wǎng)絡(luò)共識(shí)(如成為驗(yàn)證者,在PoS機(jī)制下),還能更安全、自主地與區(qū)塊鏈進(jìn)行交互,部署和測試智能合約等,本文將詳細(xì)介紹如何在 CentOS 7 操作系統(tǒng)上,使用 Geth(Go-Ethereum)客戶端搭建一個(gè)以太坊全節(jié)點(diǎn)。

準(zhǔn)備工作
-
硬件要求:
- CPU:至少 2 核,推薦 4 核或以上。
- 內(nèi)存:至少 4GB RAM,推薦 8GB 或以上,對(duì)于全節(jié)點(diǎn),16GB 更佳。
- 存儲(chǔ):至少 500GB 可用磁盤空間(SSD 強(qiáng)烈推薦,因?yàn)橥絽^(qū)塊數(shù)據(jù)需要大量隨機(jī)讀寫),建議 1TB 或更大,因?yàn)閿?shù)據(jù)會(huì)持續(xù)增長。
- 網(wǎng)絡(luò):穩(wěn)定的互聯(lián)網(wǎng)連接,建議帶寬 10Mbps 或以上,上行帶寬尤為重要,因?yàn)楣?jié)點(diǎn)需要為其他節(jié)點(diǎn)提供數(shù)據(jù)。
-
軟件環(huán)境:
- 操作系統(tǒng):CentOS 7 64-bit
- 用戶權(quán)限:具有 sudo 權(quán)限的非 root 用戶(推薦)
- 網(wǎng)絡(luò)連接:確保服務(wù)器可以訪問互聯(lián)網(wǎng),并且所需的端口(默認(rèn) 30303 TCP/UDP)是開放的。
-
更新系統(tǒng): 在開始之前,建議先更新系統(tǒng)軟件包到最新版本:
sudo yum update -y
安裝必要依賴
Geth 的編譯和運(yùn)行需要一些基礎(chǔ)的依賴庫,我們使用 yum 來安裝它們:
sudo yum groupinstall "Development Tools" -y sudo yum install wget git make gcc-c -y
安裝 Go 語言環(huán)境
Geth 是用 Go 語言編寫的,因此需要先安裝 Go 環(huán)境。
-
下載 Go: 訪問 Go 官方下載頁面 獲取最新版本的 Linux 64-bit 安裝包,我們假設(shè)下載的是 go1.21.0.linux-amd64.tar.gz:
wget https://golang.org/dl/go1.21.0.linux-amd64.tar.gz
-
解壓并安裝 Go: 將下載的 Go 壓縮包解壓到
/usr/local目錄下:sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
-
配置 Go 環(huán)境變量: 編輯
~/.bash_profile文件,添加 Go 的路徑:echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bash_profile echo 'export GOPATH=$HOME/go' >> ~/.bash_profile echo 'export GOBIN=$GOPATH/bin' >> ~/.bash_profile
然后使配置生效:

source ~/.bash_profile
-
驗(yàn)證 Go 安裝: 執(zhí)行以下命令,如果顯示 Go 版本號(hào),則表示安裝成功:
go version
編譯并安裝 Geth
-
克隆 Geth 源碼倉庫: 從 GitHub 上克隆 Geth 的最新源碼:
git clone https://github.com/ethereum/go-ethereum.git
-
進(jìn)入源碼目錄并編譯:
cd go-ethereum make geth
這個(gè)過程可能需要一些時(shí)間,具體取決于你的 CPU 性能。
-
驗(yàn)證 Geth 安裝: 編譯完成后,
geth可執(zhí)行文件會(huì)生成在build/bin/目錄下,你可以將其復(fù)制到系統(tǒng) PATH 中的某個(gè)目錄,/usr/local/bin:sudo cp build/bin/geth /usr/local/bin/
然后驗(yàn)證:
geth version
啟動(dòng)以太坊節(jié)點(diǎn)
Geth 提供了多種啟動(dòng)方式,這里我們介紹最常用的同步方式。
-
創(chuàng)建數(shù)據(jù)目錄(可選,但推薦):
mkdir -p ~/ethereum/data
-
啟動(dòng) Geth 節(jié)點(diǎn):
-
同步區(qū)塊數(shù)據(jù): 首次啟動(dòng)時(shí),Geth 需要從其他節(jié)點(diǎn)同步區(qū)塊鏈上的所有數(shù)據(jù),這個(gè)過程可能非常耗時(shí),從幾個(gè)小時(shí)到幾天甚至幾周不等,取決于你的網(wǎng)絡(luò)速度和硬件性能。

主網(wǎng)同步(默認(rèn)): 這是最慢的同步方式,會(huì)下載并驗(yàn)證所有歷史區(qū)塊數(shù)據(jù)。
geth --datadir ~/ethereum/data --syncmode full --http --http.addr "0.0.0.0" --http.port "8545" --http.api "eth,net,web3,personal"
--datadir: 指定數(shù)據(jù)存儲(chǔ)目錄。--syncmode full: 全同步模式,下載所有區(qū)塊和狀態(tài)數(shù)據(jù),也可以選擇--syncmode snap(快速同步,目前推薦,下載狀態(tài)根而不是全部狀態(tài)數(shù)據(jù),速度更快)。--http: 啟動(dòng) HTTP-RPC 服務(wù),方便通過 Web3.js 等庫與節(jié)點(diǎn)交互。--http.addr "0.0.0.0": 允許任何 IP 地址訪問 HTTP-RPC 服務(wù)(生產(chǎn)環(huán)境建議限制為特定 IP)。--http.port "8545": HTTP-RPC 服務(wù)端口。--http-api: 指定開放的 API 接口。
測試網(wǎng)同步(Ropsten 測試網(wǎng)): 如果你想在測試網(wǎng)上進(jìn)行測試,可以指定測試網(wǎng)名稱:
geth --datadir ~/ethereum/data --testnet --syncmode full --http --http.addr "0.0.0.0" --http.port "8545"
-
后臺(tái)運(yùn)行: 為了讓節(jié)點(diǎn)在后臺(tái)持續(xù)運(yùn)行,可以使用
nohup命令,并將輸出重定向到日志文件:nohup geth --datadir ~/ethereum/data --syncmode snap --http --http.addr "0.0.0.0" --http.port "8545" --http.api "eth,net,web3,personal" > ~/ethereum/geth.log 2>&1 &
nohup: 使得命令在用戶退出登錄后仍然運(yùn)行。> ~/ethereum/geth.log 2>&1: 將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤都重定向到日志文件。
-
查看同步狀態(tài): 在另一個(gè)終端窗口,你可以使用以下命令查看同步進(jìn)度:
geth attach ~/ethereum/data/geth.ipc
進(jìn)入控制臺(tái)后,輸入:
eth.syncing
如果返回
false,表示同步已完成,如果返回一個(gè)對(duì)象,則表示仍在同步,currentBlock是當(dāng)前同步到的區(qū)塊號(hào),highestBlock是網(wǎng)絡(luò)最高區(qū)塊號(hào)。
-
常用管理命令
-
停止節(jié)點(diǎn): 如果你使用了
nohup,可以通過查找進(jìn)程 ID (PID) 來停止它:ps aux | grep geth # 找到 geth 的 PID,然后執(zhí)行 kill <PID>
如果節(jié)點(diǎn)正在前臺(tái)運(yùn)行,直接按
Ctrl C即可。 -
查看日志:
tail -f ~/ethereum/geth.log
-
管理賬戶: 你可以通過 Geth 控制臺(tái)創(chuàng)建和管理賬戶:
geth attach ~/ethereum/data/geth.ipc
控制臺(tái)命令:
// 創(chuàng)建新賬戶 personal.newAccount("your_password") // 查看賬戶列表 eth.accounts // 查看賬戶余額 eth.getBalance(eth.accounts[0])
注意事項(xiàng)與最佳實(shí)踐
- 磁盤空間:密切關(guān)注磁盤空間使用情況,區(qū)塊鏈數(shù)據(jù)會(huì)持續(xù)增長,考慮定期清理舊數(shù)據(jù)或使用更大的存儲(chǔ)。
- 防火墻:確保服務(wù)器的防火墻規(guī)則允許 30303 端口(TCP 和 UDP)的入站和出站連接,以便與其他節(jié)點(diǎn)通信,如果啟用了 HTTP-RPC,確保 8545 端口(或其他你設(shè)置的端口)的訪問是安全的。
sudo firewall-cmd --permanent --add-port=30303/tcp sudo firewall-c
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。



