教程|使用WeBASE-Docker部署區(qū)塊鏈節(jié)點(diǎn)
作為一個(gè)友好的、功能豐富的區(qū)塊鏈中間件平臺(tái), WeBASE致力于提高區(qū)塊鏈開發(fā)者的運(yùn)維與管理效率。其中一大優(yōu)化便是在區(qū)塊鏈節(jié)點(diǎn)的運(yùn)維部署上,逐步完善了對(duì)Docker容器化的支持。
Docker容器化是一種可以大大簡(jiǎn)化部署步驟的高適配性技術(shù),只需要一次性配置好容器的環(huán)境,就可以在其他機(jī)器中輕松復(fù)用。社區(qū)不少用戶傾向于使用快捷的一鍵部署進(jìn)行鏈的安裝,同時(shí)也有用戶反饋希望WeBASE支持容器化部署,以支持Docker的“一鍵部署”。
基于用戶需求,我們把FISCO BCOS節(jié)點(diǎn)和WeBASE-Front節(jié)點(diǎn)前置服務(wù)打包到一個(gè)Docker鏡像中(Image),用戶只需要拉取鏡像并掛載配置即可輕松運(yùn)行節(jié)點(diǎn)和節(jié)點(diǎn)前置服務(wù),省去了大量配置環(huán)境的時(shí)間。同時(shí),WeBASE在BaaS(Blockchain-as-a-Service)云平臺(tái)的場(chǎng)景中,結(jié)合Kubernetes對(duì)該節(jié)點(diǎn)鏡像進(jìn)行運(yùn)維部署管理,管理節(jié)點(diǎn)變得十分高效。
本文總結(jié)了使用Docker部署節(jié)點(diǎn)的經(jīng)驗(yàn),下面我們使用FISCO BCOS節(jié)點(diǎn)結(jié)合WeBASE-Front的Docker鏡像 fiscoorg/fisco-webase,開始今天的容器化搭鏈之旅。
部署鏈
使用節(jié)點(diǎn)二進(jìn)制:bash start.sh 啟動(dòng)節(jié)點(diǎn),讀取目錄中的節(jié)點(diǎn)配置與證書 WeBASE-Docker 部署使用 docker run 命令,通過(guò) -v 參數(shù)掛載配置文件與證書到容器內(nèi)后啟動(dòng)節(jié)點(diǎn)
通過(guò)build_chain生成鏈配置文件與鏈節(jié)點(diǎn)證書 通過(guò)gen_node_cert腳本與機(jī)構(gòu)證書生成新節(jié)點(diǎn)證書,拷貝并修改節(jié)點(diǎn)配置文件,完成擴(kuò)容新節(jié)點(diǎn)
生成配置
我們下載建鏈腳本后,以生成一個(gè) 127.0.0.1 的國(guó)密節(jié)點(diǎn)為例,輸出的節(jié)點(diǎn)目錄為nodes。以 -d docker模式生成,這樣腳本不會(huì)下載FISCO BCOS節(jié)點(diǎn)的二進(jìn)制文件,僅生成證書與配置文件。
curl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/raw/master/tools/build_chain.sh && chmod u+x build_chain.shbash build_chain.sh -l 127.0.0.1:1 -p 30300,20200,8545 -g -o nodes -d
當(dāng)構(gòu)建完成后,我們可以看到"All completed."的提示語(yǔ)。我們可以查看nodes/127.0.0.1目錄(以node0為例)。

節(jié)點(diǎn)的config.ini配置文件 conf目錄包含節(jié)點(diǎn)證書與群組創(chuàng)世塊與配置文件 start.sh/stop.sh 節(jié)點(diǎn)啟停腳本,在腳本中我們可以看到是使用Docker命令啟動(dòng)的,是因?yàn)槲覀兪褂昧?-d docker 模式生成了鏈
拉取鏡像
我們拉取最新的 v2.7.2 的 fisco-webase 鏡像,鏡像的tag版本號(hào)以FISCO BCOS節(jié)點(diǎn)版本為準(zhǔn),鏡像中的WeBASE-Front則保持為最新版,即當(dāng)前最新的v1.5.0版本,此步驟需要安裝Docker依賴,可參考Docker官方安裝文檔。
docker pull fiscoorg/fisco-webase:v2.7.2如果由于網(wǎng)絡(luò)問(wèn)題docker pull一直失敗,可以嘗試通過(guò)WeBASE cdn的鏡像安裝包安裝鏡像:
wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/v1.5.0/docker-fisco-webase.tardocker load -i docker-fisco-webase.tar
拉取成功后可以通過(guò) docker images | grep webase 命令查看鏡像 :

啟動(dòng)容器
完成以上的準(zhǔn)備步驟后,我們進(jìn)入nodes/127.0.0.1/node0的目錄,通過(guò)docker run命令啟動(dòng)該節(jié)點(diǎn)。
啟動(dòng)時(shí),我們需要同時(shí)通過(guò)-v命令將node0的配置文件掛載到fisco-webase的容器中,將sdk目錄掛載到容器中的/data/sdk中,同時(shí)將容器中產(chǎn)生的數(shù)據(jù)掛載到宿主機(jī)(容器外)的數(shù)據(jù)目錄中(-v需要使用絕對(duì)路徑地址)。
若生成節(jié)點(diǎn)時(shí)使用的是默認(rèn)端口(20200),則可以跳過(guò)該步驟。由于鏡像中包含WeBASE-Front服務(wù),因此還需要將前置的application.yml文件也掛載到容器中。首先我們拷貝一份節(jié)點(diǎn)前置的application.yml文件,若服務(wù)的默認(rèn)5002端口已被占用,則修改yml的server.port避免產(chǎn)生端口沖突;繼而需要修改yml中的sdk.channelPort改為節(jié)點(diǎn)對(duì)應(yīng)的channel端口;最后在啟動(dòng)的命令中加上"-v /nodes/127.0.0.1/node0/application.yml:/front/conf/application.yml"配置。
在WeBASE-Docker倉(cāng)庫(kù)中可以下載該yml文件:
https://gitee.com/WeBank/WeBASE-Docker/blob/dev-deploy/docker/application.yml

下面開始執(zhí)行docker run命令:
cd /nodes/127.0.0.1/node0docker run -d -v /nodes/127.0.0.1/node0:/data -v /nodes/127.0.0.1/sdk:/data/sdk -v /nodes/127.0.0.1/node0/front-log:/front/log --network=host -w=/data --name=node0 fiscoorg/fisco-webase:v2.7.2

啟動(dòng)后,通過(guò)docker ps即可看到正在運(yùn)行的fisco-webase docker容器:

啟動(dòng)節(jié)點(diǎn)與WeBASE-Front后,就可以直接訪問(wèn)WeBASE-Front(ip:5002/WeBASE-Front)既可以訪問(wèn)節(jié)點(diǎn)和前置的Web服務(wù)。

若需要運(yùn)行多個(gè)fisco-webase容器,則需要在各個(gè)節(jié)點(diǎn)目錄下分別執(zhí)行docker run命令。
擴(kuò)容節(jié)點(diǎn)
上文中我們通過(guò)建鏈腳本生成了一個(gè)單節(jié)點(diǎn)的鏈,下面我們通過(guò) gen_node_cert 腳本擴(kuò)容一個(gè)新的Docker節(jié)點(diǎn)。
生成證書
在生成配置文件時(shí),鏈相關(guān)的所有證書都保存在 nodes/cert 目錄中,國(guó)密時(shí)還會(huì)額外生成 nodes/gmcert 保存國(guó)密相關(guān)證書。其中機(jī)構(gòu)證書存放在 nodes/cert/agency 目錄中。
下面我們用 gen_node_cert 腳本生成新的節(jié)點(diǎn)證書,并基于已有的機(jī)構(gòu)證書生成新節(jié)點(diǎn)證書,保存到 newNodeGm 目錄中。上文生成的 nodes/cert 目錄中包含了鏈證書與機(jī)構(gòu)證書。

curl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/raw/master/tools/gen_node_cert.sh && chmod u+x gen_node_cert.shbash gen_node_cert.sh -c nodes/cert/agency -o newNodeGm -g nodes/gmcert/agency/
當(dāng)我們看到"All completed."的提示,即生成完成。生成證書后,還需要將節(jié)點(diǎn)的配置文件復(fù)制到新節(jié)點(diǎn)目錄中才能正常啟動(dòng)節(jié)點(diǎn)。下面我們拷貝已有的配置文件到新節(jié)點(diǎn)中。
拷貝配置
拷貝配置文件:需要拷貝node0的config.ini到newNodeGm目錄,同時(shí)需要拷貝node0/conf的group.x.ini和group.x.genesis拷貝到newNodeGm/conf中 拷貝sdk證書:需要將127.0.0.1目錄中的sdk目錄拷貝到newNodeGm/中
容器啟動(dòng)時(shí)會(huì)自動(dòng)掛載到/data/sdk目錄的sdk證書拷貝到/front/conf目錄中,供WeBASE-Front連接節(jié)點(diǎn)使用。
修改節(jié)點(diǎn)配置
修改`rpc`與`p2p`模塊監(jiān)聽(tīng)的IP和端口,我們將端口設(shè)為已有節(jié)點(diǎn)不同的值,rpc端口設(shè)為8546,p2p端口設(shè)為30301 將已有節(jié)點(diǎn)的IP端口添加到`p2p`的`node.0, node.1`列表中,保證新節(jié)點(diǎn)可連上已有節(jié)點(diǎn)。如:連接node0節(jié)點(diǎn)則可以將node.0中填入node0的IP與P2P端口
使用國(guó)密時(shí),需確保`network_security`的節(jié)點(diǎn)證書和節(jié)點(diǎn)私鑰要由`node開頭`改為`gmnode開頭`,同理`ca.crt`改為`gmca.crt`;同時(shí),確保`chain.sm_crypto`要與節(jié)點(diǎn)的國(guó)密類型匹配,國(guó)密時(shí)`sm_crypto=true`。


配置前置
本文中新增的節(jié)點(diǎn)是在同一主機(jī),因此需要修改WeBASE-Front的服務(wù)端口及其對(duì)應(yīng)節(jié)點(diǎn)的channelPort。我們要將前置的application.yml文件也掛載到容器中。我們拷貝一份節(jié)點(diǎn)前置的application.yml文件(在WeBASE-Docker倉(cāng)庫(kù)中可以下載該yml文件),以gitee為例:
前置服務(wù)的默認(rèn)5002端口已被占用,則修改yml的server.port為5012 擴(kuò)容節(jié)點(diǎn)時(shí)我們?cè)谇拔脑O(shè)置了節(jié)點(diǎn)的channelPort為20201,因此將yml中的sdk.channelPort改為對(duì)應(yīng)的20201 最后在啟動(dòng)的命令中加上"-v /nodes/127.0.0.1/node0/application.yml:/front/conf/application.yml"配置,將yml掛載到容器中

啟動(dòng)
因?yàn)樵谏衔拇铈湹臅r(shí)候,我們已經(jīng)拉取了 fisco-webase鏡像,同機(jī)再次啟動(dòng)節(jié)點(diǎn)則無(wú)需再次拉取。我們只需要進(jìn)入新節(jié)點(diǎn)的目錄,使用docker run命令啟動(dòng)容器即可(路徑以實(shí)際為準(zhǔn))。
cd 127.0.0.1/newNodeGm/docker run -d -v 127.0.0.1/newNodeGm:/data -v 127.0.0.1/sdk:/data/sdk -v 127.0.0.1/newNodeGm/front-log:/front/log -v /nodes/127.0.0.1/newNodeGm/application.yml:/front/conf/application.yml --network=host -w=/data --name=node1 fiscoorg/fisco-webase:v2.7.2
與上文一樣,啟動(dòng)成功后,我們可以通過(guò)docker ps查看正在運(yùn)行的容器,并在瀏覽器通過(guò) {ip}:5012/WeBASE-Front 訪問(wèn)前置頁(yè)面。
加入共識(shí)
擴(kuò)容的新節(jié)點(diǎn)需要通過(guò)控制臺(tái)或WeBASE管理臺(tái)將新節(jié)點(diǎn)從游離節(jié)點(diǎn)設(shè)為共識(shí)節(jié)點(diǎn)才能參與群組的共識(shí),詳情可以參考控制臺(tái)文檔或WeBASE使用手冊(cè)。
控制臺(tái)文檔:
https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/console/console_of_java_sdk.html
WeBASE使用手冊(cè):
https://webasedoc.readthedocs.io/zh_CN/latest/docs/WeBASE-Console-Suit/index.html#id27
即刻使用
節(jié)點(diǎn)部署結(jié)合Docker容器化技術(shù),讓復(fù)雜的節(jié)點(diǎn)部署操作變得更加簡(jiǎn)單。WeBASE-Docker總結(jié)了多種Docker與FISCO BCOS節(jié)點(diǎn)及WeBASE服務(wù)相結(jié)合的方法。用戶可以通過(guò)WeBASE-Docker構(gòu)建屬于自己的 FISCO BCOS + WeBASE-Front 鏡像,也可直接通過(guò)設(shè)置環(huán)境變量的方式改變?nèi)萜髦械呐渲茫嗫上?/span>BaaS(Blockchain-as-a-Service)云平臺(tái)一樣通過(guò)k8s進(jìn)行節(jié)點(diǎn)管理,或者像WeBASE可視化部署一樣使用Ansible+Docker快速部署節(jié)點(diǎn)等等。
借由此文拋磚引玉,我們期待社區(qū)用戶能迸發(fā)出更多更Smart的鏈管理方案,并積極在社區(qū)中的分享。也歡迎給我們提交Issue或Pull Request來(lái)分享你們的想法。
文檔地址
github倉(cāng)庫(kù):
gitee倉(cāng)庫(kù):
WeBASE-Docker鏡像使用文檔:
FISCO-BCOS開發(fā)部署工具文檔:
https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/manual/build_chain.html

