一、為什么要脫離 Docker 部署 Fabric 網(wǎng)絡(luò)其掂?
1油挥、使用 Docker 部署相對比較復(fù)雜,不適合入門學(xué)習(xí)
?在我開始學(xué)習(xí) Fabric
的時(shí)候款熬,由于之前沒有學(xué)習(xí)使用過 Docker
深寥,所以光是弄明白如何在我的系統(tǒng)上安裝 Docker
以及如何使用 Docker
就折騰了一段時(shí)間,在加上之后因?yàn)楦鞣N Docker
鏡像下載問題和 Docker
數(shù)據(jù)緩存贤牛、Docker
鏡像版本等問題惋鹅,又是一頓折騰。
雖然使用 Docker
有諸多優(yōu)勢和便利殉簸,但我認(rèn)為這樣添加了很多概念闰集,對入門學(xué)習(xí) Docker
的人來說實(shí)在是不友好,容易讓初學(xué)者迷失自己要學(xué)習(xí)的重點(diǎn)問題般卑。我認(rèn)為多就是沒有武鲁,能讓人一下子抓住重點(diǎn)問題的方法會是一個(gè)很有效的方法。
2蝠检、脫離 Docker 部署更容易調(diào)試 Fabric 的源碼
?很多時(shí)候當(dāng)我們遇到問題沐鼠,一通搜索詢問無法解決的時(shí)候,最直接的方法就是查看源碼蝇率。通過調(diào)試源碼可以更直接更準(zhǔn)確的定位到問題迟杂。
?另外刽沾,如果使用 Docker
部署 Fabric
測試網(wǎng)絡(luò)的調(diào)試代碼話,我們每次不得不重新 make docker
排拷。每次 make docker
我都要等幾分鐘侧漓,甚至十幾分鐘,這讓我很抓狂监氢,而 go build
去編譯一個(gè)節(jié)點(diǎn)程序僅僅需要幾秒鐘布蔗,便捷之處不言而喻。
?對代碼調(diào)試方面更無需多說浪腐,每次修改代碼纵揍、添加日志輸出之后,我只需重新啟動下節(jié)點(diǎn)即可议街。我甚至可以在 IDE 里面直接 debug 節(jié)點(diǎn)程序泽谨。這對于調(diào)試源碼來說太方便了。
3特漩、脫離 Docker 運(yùn)行 Fabric 網(wǎng)絡(luò)可以節(jié)省系統(tǒng)性能
?這一點(diǎn)其實(shí)也是我琢磨脫離 Docker
部署 Fabric
的初衷吧雹。最初是想主機(jī)上如果不運(yùn)行 Docker
,那意味著少了一些程序來和節(jié)點(diǎn)程序競爭計(jì)算機(jī)的資源涂身,理論上應(yīng)該會提升 Fabric
網(wǎng)絡(luò)的系統(tǒng)性能雄卷。我測試后的數(shù)據(jù)也驗(yàn)證了我的猜測。
4蛤售、Fabric 2.0 的新特性使得完全脫離 Docker 部署更容易
?Fabric 2.0 添加了 chaincode external builder
功能丁鹉,可以使 chaincode
以一個(gè)獨(dú)立的外部服務(wù)形式運(yùn)行。在 2.0 之前的版本中悴能,chaincode
必須被編譯成一個(gè) Docker
鏡像才可以運(yùn)行揣钦。有了這個(gè)新特性之后 Fabric
就可以完全脫離開 Docker
去運(yùn)行了。
二搜骡、使用腳本自動部署脫離 Docker 的 Fabric 網(wǎng)絡(luò)
?需要說明的是當(dāng)前腳本僅支持 Linux
和 MacOS
操作系統(tǒng)拂盯,對 Windows 操作系統(tǒng)的支持我會在以后添加,請持續(xù)關(guān)注我的項(xiàng)目记靡。
1谈竿、Clone 腳本代碼到本地
git clone https://github.com/yiwenlong/fabric-samples-nodocker
2、配置環(huán)境依賴
?對于依賴這些東西我是想了很多方法盡量減少依賴摸吠,除非非常必要空凸,我覺得沒必要讓新入門學(xué)習(xí) Fabric
的同學(xué)去花時(shí)間搞明白 Fabric
之外的其他東西,焦點(diǎn)聚焦在 Fabric
上面是最重要的寸痢。
在自己的主機(jī)上安裝 supervisor呀洲,并啟動 supervisor
考慮在不同系統(tǒng)上的可移植性,我在這里使用 supervisor
用于做進(jìn)程管理。
對于 MacOS
# 首先去定已經(jīng)安裝了 homebrew道逗,如果沒有兵罢,執(zhí)行以下腳本
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install supervisor
brew services start supervisor
對于 Ubuntu
apt install supervisor
systemctl start supervisor
對于 CentOS
yum install supervisor
systemctl start supervisor
配置 SUPERVISOR_CONFD_DIR 環(huán)境變量
我寫了腳本自動去配置 supervisor
,當(dāng)節(jié)點(diǎn)程序需要啟動的時(shí)候滓窍,boot.sh
啟動腳本會在 supervisor 的配置目錄下創(chuàng)建節(jié)點(diǎn)進(jìn)程的啟動配置文件卖词。因此需要使用 $SUPERVISOR_CONFD_DIR
環(huán)境變量指向 supervisor 的配置目錄。詳細(xì)實(shí)現(xiàn)可以查看代碼 scripts/config-scripts.sh
# MacOS
export SUPERVISOR_CONFD_DIR=/usr/local/etc/supervisor.d
# CentOS
export SUPERVISOR_CONFD_DIR=/etc/supervisord.d
# Ubuntu
export SUPERVISOR_CONFD_DIR=/etc/supervisor/conf.d
3吏夯、執(zhí)行 config.sh 腳本
cd $fabric-samples-nodocker
./config.sh
config.sh
主要是去下載 Fabric
和 一個(gè)Demo chaincode
的二進(jìn)制程序此蜈,執(zhí)行成功后會生成以下目錄:
./build/bin
./build/config
./build/chaincode
4、啟動測試網(wǎng)絡(luò)
網(wǎng)絡(luò)配置我都是設(shè)置成可配置的噪生,可以參照 samples/network-single-org
的配置自行配置網(wǎng)絡(luò)節(jié)點(diǎn)裆赵。后面我會詳細(xì)介紹如何配置以及如何使用。
使用測試網(wǎng)絡(luò)前請先配置 /etc/hosts
文件跺嗽,添加以下內(nèi)容:
127.0.0.1 peer0.org1.example.com
127.0.0.1 peer1.org1.example.com
127.0.0.1 orderer0.example.com
127.0.0.1 orderer1.example.com
127.0.0.1 orderer2.example.com
如果僅僅是使用測試網(wǎng)絡(luò)战授,可以直接執(zhí)行以下腳本:
cd samples/network-single-org
./network up
這個(gè)腳本會自動啟動節(jié)點(diǎn)程序、創(chuàng)建一個(gè) channel
并安裝一個(gè)名為 tps
的 chaincode
抛蚁。最后腳本會調(diào)用腳本的 init
invoke
query
函數(shù)測試 chancode
的運(yùn)行情況陈醒。如圖:
三惕橙、寫在后面
因?yàn)槟芰蜁r(shí)間問題瞧甩,文檔寫得很粗略,如果有疑問弥鹦,歡迎大家留言交流肚逸,我會盡我所能回答各位遇到的問題,腳本代碼可能會有一些問題彬坏,歡迎大家 pr
和 提issue
朦促。
https://github.com/yiwenlong/fabric-samples-nodocker