- Hyperledger Fabric菜鳥進階攻略
- 黎躍春 韓小東 付金亮編著
- 7662字
- 2019-05-22 18:22:41
第1章 Hyperledger Fabric認知與環(huán)境搭建
1.1 全面認識超級賬本
目標(biāo)
1.了解超級賬本的由來及特點。
2.清楚超級賬本的分類。
3.了解Hyperledger Fabric的特點。
1.1.1 超級賬本由來
當(dāng)你拿起這本書開始閱讀時,說明你對區(qū)塊鏈技術(shù)已經(jīng)有了相關(guān)的了解,而且想通過自己的努力或團隊合作的方式開發(fā)出一款真正基于區(qū)塊鏈技術(shù)的落地應(yīng)用。那么恭喜你,你的選擇是正確且明智的。
超級賬本,即Hyperledger項目是區(qū)塊鏈技術(shù)中第一個面向企業(yè)應(yīng)用場景的開源分布式賬本平臺。
2015年12月由Linux基金會主導(dǎo)并牽頭,IBM、Intel、Cisco等制造和科技行業(yè)的巨頭共同宣布了Hyperledger聯(lián)合項目成立。
Hyperledger將區(qū)塊鏈技術(shù)引入聯(lián)盟鏈的應(yīng)用場景中,為未來基于區(qū)塊鏈技術(shù)打造高效率的商業(yè)網(wǎng)絡(luò)打下基礎(chǔ),為透明、公開、去中心化的企業(yè)級分布式賬本技術(shù)提供開源參考實現(xiàn),目前已加入的成員超過260家,國外的如IBM、Intel、Cisco、Oracle、RedHat、Samsung、Fujitsu、Airbus等;國內(nèi)的如百度、小米、騰訊、聯(lián)想、華為、浪潮、京東、迅雷、房掌柜、中國民生銀行、招商銀行、保全網(wǎng)等。
Hyperledger官網(wǎng)地址:https://www.hyperledger.org。
1.1.2 超級賬本分類
在Hyperledger這個大家庭中,項目可以分為兩大類別。
框架項目:區(qū)塊鏈應(yīng)用開發(fā)平臺,提供企業(yè)級應(yīng)用程序開發(fā)環(huán)境及相關(guān)的SDK。
實用工具:區(qū)塊鏈應(yīng)用測試、部署、管理等工作的相關(guān)工具。
1.框架項目
Fabric:用模塊化架構(gòu)作為開發(fā)區(qū)塊鏈程序或解決方案的基礎(chǔ),支持一些組件(如共識算法和成員服務(wù))的即插即用。
Iroha:由Soramitsu、Hitachi、NTT Data和Colu提供,使用C++編寫,采用拜占庭容錯一致性算法實現(xiàn)共識,是為了將分布式賬本技術(shù)更容易地與基礎(chǔ)架構(gòu)型項目集成而設(shè)計的一個區(qū)塊鏈框架項目。應(yīng)用程序可以使用Python、Java、JavaScript、C++在Android和iOS移動平臺編寫。
Sawtooth:一個創(chuàng)建、部署和運行分布式賬本的模塊化平臺。它包含一個新奇的共識算法——PoET(Proof of Elapsed Time,經(jīng)歷時間證明),面向大型分布式驗證器群,消耗最少的資源。
Burrow:由Monax提供,由Intel公司共同贊助,是一個支持許可的智能合約機,該系列的第一個版本發(fā)表于2014年12月。Burrow提供了一個模塊化的區(qū)塊鏈客戶端,內(nèi)置一個經(jīng)許可的智能合約解釋器,它部分是按照以太坊虛擬機(Ethereum Virtual Machine,EVM)規(guī)范而開發(fā)的。
Indy:一種特別為去中心化的身份而建立的分布式賬本。它提供了基于區(qū)塊鏈或者其他分布式賬本互操作以創(chuàng)建與使用獨立數(shù)字身份的工具、代碼庫和可重用組件。
2.實用工具
Explorer:由IBM、Intel及DTCC提供;可以查看、調(diào)用、部署或查詢區(qū)塊、交易、網(wǎng)絡(luò)信息、鏈碼和交易序列,以及賬本中的其他相關(guān)信息。
Composer:一個構(gòu)建區(qū)塊鏈商業(yè)網(wǎng)絡(luò)的協(xié)作工具,用來加速智能合約的開發(fā)及分布式賬本的部署;使用JavaScript構(gòu)建。
Cello:由IBM提供,贊助商來自Soramitsu、華為和Intel,旨在為區(qū)塊鏈生態(tài)系統(tǒng)帶來按需部署服務(wù)的模式,減少創(chuàng)建、管理、終止區(qū)塊鏈的難度。
Caliper:由華為、Hyperchain、Oracle、Bitwise、Soramitsu、IBM和布達佩斯技術(shù)與經(jīng)濟大學(xué)的開發(fā)人員提供,是一個區(qū)塊鏈基準(zhǔn)工具,內(nèi)置一套預(yù)定義的測試用例,讓使用者可以測試特定區(qū)塊鏈執(zhí)行的性能。
1.1.3 認識Hyperledger Fabric
Hyperledger Fabric是一個區(qū)塊鏈的實現(xiàn),由Digital Asset和IBM提供,是Linux基金會托管的Hyperledger項目之一。Hyperledger Fabric從誕生之初就立志要成為超級賬本中最優(yōu)秀的項目(現(xiàn)實也確實如此)。
作為開發(fā)具有模塊化架構(gòu)的應(yīng)用程序或解決方案的基礎(chǔ),Hyperledger Fabric實現(xiàn)了組件(如共識、成員服務(wù))的即插即用。Hyperledger Fabric利用容器技術(shù)來托管稱為“鏈碼”的智能合約,其中包含系統(tǒng)的應(yīng)用程序邏輯。
與其他區(qū)塊鏈技術(shù)類似,Hyperledger Fabric使用智能合約操作賬本,并且是一個通過所有參與者管理交易的系統(tǒng)。Hyperledger Fabric與其他公有區(qū)塊鏈系統(tǒng)最大的不同主要體現(xiàn)在以下兩個方面。
1)私有:Hyperledger Fabric提供了建立通道(Channel)的功能,允許參與者為交易新建一個單獨的賬本。參與者并不希望所有的交易信息(如提供給部分客戶的特定價格信息)都對網(wǎng)絡(luò)中所有參與者公開。只有在同一個通道中的參與者,才會擁有該通道中的賬本,而其他不在此通道中的參與者則無權(quán)查看這個賬本的相關(guān)信息。
2)許可:與開放無須許可的網(wǎng)絡(luò)系統(tǒng)允許未知身份的參與者加入網(wǎng)絡(luò)不同(需要通過工作量證明協(xié)議來保證交易有效并維護網(wǎng)絡(luò)的安全),Hyperledger Fabric通過MSP(Membership Service Provider)來登記所有的成員。
Hyperledger Fabric項目GitHub網(wǎng)址:https://github.com/hyperledger/fabric。
1.2 邁出第一步:搭建環(huán)境
目標(biāo)
1.檢查操作系統(tǒng)。
2.檢查并安裝所需工具。
3.可選安裝Node及NPM。
1.2.1 操作系統(tǒng)
推薦使用的操作系統(tǒng)為64位的Ubuntu 16.04 LTS,系統(tǒng)內(nèi)核為GNU/Linux 4.13.0-36-generic x86_64。
硬件資源要求:內(nèi)存最低為2GB,最好在3GB以上;磁盤空間為30GB或更高。
如果計算機默認為Windows操作系統(tǒng),可以在Windows系統(tǒng)中安裝一個VMware虛擬機應(yīng)用程序,然后在VMWare虛擬機中安裝Ubuntu 16.04系統(tǒng),最后在Windows操作系統(tǒng)中安裝一個遠程連接工具(如XShell或SecureCRT),以便連接并操作Ubuntu系統(tǒng)。
如果使用的是Mac電腦,同樣建議以安裝、使用虛擬機的方式來學(xué)習(xí)。
1.2.2 安裝所需工具
1.安裝git
git是一個非常優(yōu)秀的開源版本管理控制工具,使用git工具可以方便地下載官方(Golang、Hyperledger Fabric等)在GitHub網(wǎng)站上發(fā)布的相關(guān)源代碼或其他內(nèi)容。
安裝git工具使用如下命令:
$ sudo apt update $ sudo apt install git
Mac OS系統(tǒng)中默認已安裝該工具。如果未安裝該工具,則可以在git-scm官方網(wǎng)站(https://git-scm.com/downloads)下載相應(yīng)系統(tǒng)的安裝包并安裝。
2.安裝cURL
使用如下命令安裝cURL:
$ sudo apt install curl
其他系統(tǒng)的cURL安裝包可以在https://curl.haxx.se/download.html頁面中下載并安裝。
3.安裝Docker
查看系統(tǒng)中是否已經(jīng)安裝Docker:
$ docker --version
使用如下命令安裝Docker的最新版本:
$ sudo apt update $ sudo apt install docker.io
查看Docker版本信息:
$ docker --version
輸出類似如下的Docker版本信息:
Docker version 17.03.2-ce, build f5ec1e2
4.安裝docker-compose
確定系統(tǒng)中是否已安裝docker-compose工具:
$ docker-compose --version
如果系統(tǒng)提示未安裝,則使用如下命令安裝docker-compose工具:
$ sudo apt install docker-compose
安裝成功后,查看docker-compose版本信息:
$ docker-compose --version
輸出類似如下的docker-compose版本信息:
docker-compose version 1.8.0, build unknown
5.安裝Golang
Fabric 1.0.0版本要求Golang 1.7以上版本,F(xiàn)abric 1.1.0版本要求Golang 1.9以上版本,F(xiàn)abric 1.2.0版本要求Golang 1.10以上版本,我們使用Fabric 1.2.0版本,所以從官方下載最新版本的Golang。
(1)下載Golang
使用wget工具下載Golang的最新版本壓縮包文件go1.10.3.linux-amd64.tar.gz:
$ wget https:// dl.google.com/go/go1.10.3.linux-amd64.tar.gz
下載Golang壓縮包文件,需要操作系統(tǒng)能夠保證正常訪問Golang官方網(wǎng)站。下載過程可能耗時較長(取決于具體網(wǎng)絡(luò)情況),請耐心等待。
其他系統(tǒng)可以在Golang官方網(wǎng)站https://golang.org/dl/下載頁面中下載相應(yīng)的安裝包并安裝。
下載完成后,文件會保存在當(dāng)前目錄下。可以使用ll命令查看:

7.tif
(2)解壓文件
使用tar命令將下載后的壓縮包文件解壓到指定的/usr/local/路徑下:
$ sudo tar -zxvf go1.10.3.linux-amd64.tar.gz -C /usr/local/
注意,在解壓過程中可能出現(xiàn)如下錯誤:
gzip: stdin: unexpected end of f ile tar: Unexpected EOF in archive tar: Unexpected EOF in archive tar: Error is not recoverable: exiting now
或如下錯誤信息:
gzip: stdin: unexpected end of f ile tar: 歸檔文件中異常的 EOF tar: 歸檔文件中異常的 EOF tar: Error is not recoverable: exiting now
如果出現(xiàn)上述錯誤提示信息,則說明下載的壓縮包文件有問題,如果沒有下載完整或壓縮包數(shù)據(jù)損壞,可將其刪除后重新下載并解壓至指定的目錄中。
(3)配置環(huán)境變量
將壓縮包文件解壓至指定目錄后,Golang可以讓系統(tǒng)的所有用戶正常使用,這里使用vim文件編輯工具打開系統(tǒng)的profile文件進行編輯:
$ sudo vim /etc/prof ile
如果只想讓當(dāng)前登錄用戶使用Golang,而其他用戶不能使用Golang,則編輯當(dāng)前用戶$HOME目錄下的.bashrc或.profile文件,在該文件中添加相應(yīng)的環(huán)境變量即可。
在profile文件最后添加如下內(nèi)容:
export GOPATH=$HOME/go export GOROOT=/usr/local/go export PATH=$GOROOT/bin:$PATH
使用source命令,使剛剛添加的配置信息生效:
$ source /etc/prof ile
通過go version命令驗證是否成功:
$ go version
輸出如下的Golang版本信息:
go version go1.10.3 linux/amd64
如果系統(tǒng)中有舊版本的Golang,則使用如下命令卸載舊版本的Golang,然后重新安裝并配置:
$ su - # apt-get remove golang-go --purge && apt-get autoremove --purge && apt-get clean
6.安裝NVM與npm
(1)安裝NVM
NVM(Node Version Manager)是Node.js的版本管理軟件,可以根據(jù)不同的需求場景隨時在Node.js的各個版本之間進行切換。
由于Node.js版本更新較快,且各版本之間差異較大,直接從Node官網(wǎng)安裝可能需要很長時間,而且中間可能會因為網(wǎng)絡(luò)訪問及數(shù)據(jù)傳輸原因造成下載中斷或失敗等問題。為了方便安裝及后期管理Node.js的版本,需要先在系統(tǒng)中安裝NVM管理工具。使用如下命令安裝NVM:
$ sudo apt update $ curl -o- https:// raw.githubusercontent.com/creationix/nvm/v0.33.10/install.sh | bash $ export NVM_DIR="$HOME/.nvm" $ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
(2)安裝Node
NVM工具安裝并配置成功后,可以直接使用nvm命令安裝Node,且Node安裝成功后,NVM會自動對npm工具進行安裝。使用如下命令安裝Node:
$ nvm install v8.11.1
安裝Node時需要注意,安裝版本為8.9.x或以上的Node.js,F(xiàn)abric目前不支持9.x系列的Node.js版本。安裝成功輸出如下內(nèi)容:

9.tif
(3)檢查Node及npm版本
$ node -v && npm -v
輸出內(nèi)容如下:
v8.11.1 5.6.0
FAQ
1.Hyperledger Fabric只支持Ubuntu系統(tǒng)嗎?
Hyperledger Fabric支持常見的Linux相關(guān)系統(tǒng)(如Debian、Cent OS等)和Mac OS。
由于不同操作系統(tǒng)或各系統(tǒng)的不同版本可能會造成一些問題,所以在此推薦使用的操作系統(tǒng)為64位的Ubuntu 16.04 LTS。
2.cURL是什么?有什么作用?
cURL是一個可以在終端命令行下使用URL語法執(zhí)行的開源文件傳輸工具。它可以支持基于HTTP/Socket的代理;cURL還支持使用SSL證書,支持HTTP POST、HTTP PUT,支持FTP上傳,以及基于HTTP表單的上傳;支持Cookie,可以使用用戶名+密碼的方式實現(xiàn)認證(Basic、Plain、Digest、CRAM-MD5、NTLM、Negotiate和Kerberos)等。
3.為什么要安裝Docker及docker-compose?
Docker是一個開源的應(yīng)用容器引擎,可以為應(yīng)用創(chuàng)建一個輕量級的、可移植的容器。Hyperledger Fabric環(huán)境依賴于Docker提供的容器服務(wù),所以必須安裝Docker環(huán)境;推薦使用1.13或更高版本。
Compose是一個用于定義和運行多個容器的Docker應(yīng)用程序的工具,可以使用YAML文件配置相關(guān)的指定服務(wù),運行該服務(wù)時只需要一個簡單的命令即可。
4.能否不使用Golang而換作其他語言環(huán)境?
Hyperledger Fabric的很多組件使用Golang實現(xiàn),并且我們會使用Golang來編寫鏈?zhǔn)酱a的應(yīng)用程序,所以需要在系統(tǒng)中安裝并設(shè)置Golang環(huán)境。
5.一定要安裝Node與npm嗎?
Node與npm工具為可選安裝工具。如果后期使用Node.js的Hyperledger Fabric SDK開發(fā)Hyperledger Fabric應(yīng)用程序,則需要安裝;否則無須安裝。
1.3 安裝Hyperledger Fabric
目標(biāo)
1.順利下載Hyperledger Fabric。
2.明確bootstrap.sh腳本做了哪些工作。
1.3.1 下載fabric-samples與二進制文件
為了方便后期管理,在當(dāng)前登錄用戶的HOME目錄下創(chuàng)建一個空目錄并進入該目錄:
$ mkdir hyfa && cd hyfa
新建文件bootstrap.sh并添加內(nèi)容:
$ vim bootstrap.sh
將https://github.com/hyperledger/fabric/blob/master/scripts/bootstrap.sh中的內(nèi)容復(fù)制、保存后退出。
該bootstrap.sh可執(zhí)行腳本文件的作用如下。
1)如果當(dāng)前目錄中沒有hyperledger/fabric-samples,則從github.com克隆hyperledger/fabric-samples存儲庫。
2)使用checkout簽出對應(yīng)指定的版本標(biāo)簽。
3)將指定版本的Hyperledger Fabric平臺特定的二進制文件和配置文件安裝到fabric-samples存儲庫的根目錄中。
4)下載指定版本的Hyperledger Fabric Docker鏡像文件。
5)將下載的Docker鏡像文件標(biāo)記為“l(fā)atest”。
創(chuàng)建的bootstrap.sh腳本文件并不能立即執(zhí)行,必須對其賦予可執(zhí)行權(quán)限才能夠運行。執(zhí)行如下命令對bootstrap.sh腳本文件賦予可執(zhí)行權(quán)限:
$ chmod +x bootstrap.sh
執(zhí)行bootstrap.sh:
$ sudo ./bootstrap.sh 1.2.0
確定網(wǎng)絡(luò)穩(wěn)定,否則會導(dǎo)致各種問題,例如,下載到一半時網(wǎng)絡(luò)超時,下載失敗等;由于Docker的各種鏡像文件下載時間較長,所以請耐心等待。
下載完成后,查看相關(guān)輸出內(nèi)容。如果有下載失敗的鏡像,可再次執(zhí)行如下命令重新下載。
$ sudo ./bootstrap.sh 1.2.0
對于已下載的Docker鏡像文件,再次執(zhí)行腳本命令不會重新下載。
安裝完成后終端自動輸出:
===> List out hyperledger docker images hyperledger/fabric-ca 1.2.0 66cc132bd09c 4 weeks ago 252 MB hyperledger/fabric-ca latest 66cc132bd09c 4 weeks ago 252 MB hyperledger/fabric-tools 1.2.0 379602873003 4 weeks ago 1.51 GB hyperledger/fabric-tools latest 379602873003 4 weeks ago 1.51 GB hyperledger/fabric-ccenv 1.2.0 6acf31e2d9a4 4 weeks ago 1.43 GB hyperledger/fabric-ccenv latest 6acf31e2d9a4 4 weeks ago 1.43 GB hyperledger/fabric-orderer 1.2.0 4baf7789a8ec 4 weeks ago 152 MB hyperledger/fabric-orderer latest 4baf7789a8ec 4 weeks ago 152 MB hyperledger/fabric-peer 1.2.0 82c262e65984 4 weeks ago 159 MB hyperledger/fabric-peer latest 82c262e65984 4 weeks ago 159 MB hyperledger/fabric-zookeeper 0.4.10 2b51158f3898 5 weeks ago 1.44 GB hyperledger/fabric-zookeeper latest 2b51158f3898 5 weeks ago 1.44 GB hyperledger/fabric-kafka 0.4.10 936aef6db0e6 5 weeks ago 1.45 GB hyperledger/fabric-kafka latest 936aef6db0e6 5 weeks ago 1.45 GB hyperledger/fabric-couchdb 0.4.10 3092eca241fc 5 weeks ago 1.61 GB hyperledger/fabric-couchdb latest 3092eca241fc 5 weeks ago 1.61 GB
添加環(huán)境變量(可選執(zhí)行命令):
$ export PATH=<path to download location>/bin:$PATH
<path to download location>表示fabric-samples文件目錄所在路徑,例如:
$ export PATH=$HOME/hyfa/fabric-samples/bin:$PATH
1.3.2 Hyperledger Fabric源碼方式編譯
在1.3.1節(jié)中,我們以提供腳本的方式,可以下載并安裝fabric-samples和二進制文件到操作系統(tǒng)中,大大簡化了安裝過程。
Hyperledger Fabric還有另外一種安裝方式,就是以源碼的方式進行本地編譯安裝,此方式相較1.3.1節(jié)的方式略微復(fù)雜,需要手動編譯生成相應(yīng)的工具,在此逐一介紹。
(1)下載源碼
先使用mkdir命令創(chuàng)建相應(yīng)的目錄,然后使用git clone命令將Hyperledger Fabric源碼克隆至該目錄中:
$ mkdir -p $GOPATH/src/github.com/hyperledger/ $ cd $GOPATH/src/github.com/hyperledger/ $ git clone https:// github.com/hyperledger/fabric.git
注意,也可以使用go get命令下載源碼,需要手動創(chuàng)建相應(yīng)的目錄:
$ go get github.com/hyperledger/fabric
下載可能需要幾分鐘,也可能需要十幾分鐘,取決于當(dāng)前的網(wǎng)絡(luò)環(huán)境,請耐心等待。源碼下載完成后使用git checkout命令切換至指定的分支:
$ cd $GOPATH/src/github.com/hyperledger/fabric/ $ git checkout -b v1.2.0
源碼下載完成之后,并不能直接使用,我們需要對其進行編譯,生成所需要的各種節(jié)點及相應(yīng)的工具。我們直接使用源碼提供的Makefile來進行編譯。首先對Makefile文件進行編輯,指定相應(yīng)的版本:
$ vim Makef ile
修改文件中BASE_VERSION、PREV_VERSION、CHAINTOOL_RELEASE、BASEIMAGE_RELEASE的值,修改之后的內(nèi)容如下:
BASE_VERSION = 1.2.1 PREV_VERSION = 1.2.0 CHAINTOOL_RELEASE=1.1.1 BASEIMAGE_RELEASE=0.4.10
(2)編譯Orderer
執(zhí)行以下命令編譯Orderer:
$ cd $GOPATH/src/github.com/hyperledger/fabric/ $ make orderer
命令執(zhí)行后,終端輸出如下信息:

(3)編譯Peer
編譯Peer的命令如下:
$ make peer
命令執(zhí)行成功后,終端輸出如下信息:

使用系統(tǒng)命令ll查看.build/bin目錄內(nèi)容:
$ ll .build/bin/
命令執(zhí)行后,可以看到.build/bin目錄中已生成了如下兩個工具:

(4)編譯生成相關(guān)工具
Hyperledger Fabric中除了Orderer和Peer之外,還提供了在搭建網(wǎng)絡(luò)環(huán)境時所需要的一系列輔助工具。
·configtxgen:生成初始區(qū)塊及通道交易配置文件的工具。
·cryptogen:生成組織結(jié)構(gòu)及相應(yīng)的身份文件的工具。
·configtxlator:將指定的文件在二進制格式與JSON格式之間進行轉(zhuǎn)換。
編譯生成這些工具同樣可以使用make命令:
$ make conf igtxgen $ make cryptogen $ make conf igtxlator
編譯之后同樣使用ll命令查看.build/bin目錄中的內(nèi)容:

(5)編譯生成Docker鏡像
將當(dāng)前用戶添加到Docker組:
$ sudo usermod -aG docker kevin
注意
添加成功后必須注銷或重啟系統(tǒng)。
安裝依賴的libltdl-dev庫:
$ sudo apt-get install libltdl-dev
(6)獲取鏡像
編譯生成Docker鏡像需要用到Golang工具,所以我們需要通過git clone命令從github.com克隆至當(dāng)前系統(tǒng)中:
$ mkdir -p $GOPATH/src/golang.org/x $ cd $GOPATH/src/golang.org/x $ git clone https:// github.com/golang/tools.git
執(zhí)行編輯命令后將指定的環(huán)境變量設(shè)置到用戶的環(huán)境文件(.bashrc)中:
$ vim ~/.bashrc export PATH=$PATH:$GOPATH/bin
為了能夠使配置的環(huán)境生效,需要執(zhí)行source命令:
$ source ~/.bashrc
Hyperledger Fabric源碼由Golang構(gòu)建,所以需要安裝Golang相關(guān)的工具,以方便開發(fā)和調(diào)試:
$ mkdir -p $GOPATH/src/golang.org/x $ cd $GOPATH/src/golang.org/x $ git clone https:// github.com/golang/net.git $ git clone https:// github.com/golang/tools.git $ cd $GOPATH $ go get github.com/kardianos/govendor $ go get github.com/onsi/ginkgo/ginkgo $ go get github.com/golang/protobuf/protoc-gen-go $ go get -u github.com/axw/gocov/... $ go get -u github.com/AlekSi/gocov-xml $ go get -u github.com/client9/misspell/cmd/misspell $ go get -u golang.org/x/tools/cmd/goimports $ go get -u github.com/golang/lint/golint
將之前安裝的Golang工具復(fù)制到Fabric目錄:
$ cd $GOPATH/src/github.com/hyperledger/fabric/ $ mkdir -p .build/docker/gotools/bin $ cp ~/go/bin/* .build/docker/gotools/bin
使用make docker命令編譯生成相關(guān)的Docker鏡像:
$ cd $GOPATH/src/github.com/hyperledger/fabric/ $ make docker
(7)獲取鏡像方式二
可以直接從Docker Hub拉取鏡像,使用docker pull命令拉取指定的Docker鏡像。
$ export FABRIC_TAG=1.2.0 $ export CA_TAG=1.2.0 $ export THIRDPARTY_IMAGE_VERSION=0.4.10 $ docker pull hyperledger/fabric-peer:$FABRIC_TAG \ && docker pull hyperledger/fabric-orderer:$FABRIC_TAG \ && docker pull hyperledger/fabric-ca:$CA_TAG \ && docker pull hyperledger/fabric-tools:$FABRIC_TAG \ && docker pull hyperledger/fabric-ccenv:$FABRIC_TAG \ && docker pull hyperledger/fabric-baseimage:$THIRDPARTY_IMAGE_VERSION \ && docker pull hyperledger/fabric-baseos:$THIRDPARTY_IMAGE_VERSION \ && docker pull hyperledger/fabric-couchdb:$THIRDPARTY_IMAGE_VERSION \ && docker pull hyperledger/fabric-kafka:$THIRDPARTY_IMAGE_VERSION \ && docker pull hyperledger/fabric-zookeeper:$THIRDPARTY_IMAGE_VERSION
將已下載的鏡像標(biāo)記為最新:
$ docker tag hyperledger/fabric-peer:$FABRIC_TAG hyperledger/fabric-peer \ && docker tag hyperledger/fabric-orderer:$FABRIC_TAG hyperledger/fabric-orderer \ && docker tag hyperledger/fabric-ca:$CA_TAG hyperledger/fabric-ca \ && docker tag hyperledger/fabric-tools:$FABRIC_TAG hyperledger/fabric-tools \ && docker tag hyperledger/fabric-ccenv:$FABRIC_TAG hyperledger/fabric-ccenv \ && docker tag hyperledger/fabric-baseimage:$THIRDPARTY_IMAGE_VERSION hyperledger/fabric-baseimage \ && docker tag hyperledger/fabric-baseos:$THIRDPARTY_IMAGE_VERSION hyperledger/ fabric-baseos \ && docker tag hyperledger/fabric-couchdb:$THIRDPARTY_IMAGE_VERSION hyperledger/ fabric-couchdb \ && docker tag hyperledger/fabric-kafka:$THIRDPARTY_IMAGE_VERSION hyperledger/ fabric-kafka \ && docker tag hyperledger/fabric-zookeeper:$THIRDPARTY_IMAGE_VERSION hyperledger/ fabric-zookeeper
之后可以使用docker images命令查看相關(guān)的鏡像信息:
$ docker images
命令執(zhí)行后終端輸出如下信息:

Hyperledger Fabric中可以用兩種方式進行編譯安裝:第一種是以bootstrap.sh腳本方式進行環(huán)境的安裝,優(yōu)點是簡單、方便,能夠快速上手;第二種是以Fabric源碼方式進行編譯,適合動手能力較強的人員,優(yōu)點是可以對Hyperledger Fabric相關(guān)組件有深入的理解,但缺點是容易出現(xiàn)各種錯誤且修正比較麻煩。
注意
為方便起見,本書的Hyperledger Fabric環(huán)境采用第一種方式(bootstrap.sh腳本方式)安裝構(gòu)建。
FAQ
1.bootstrap.sh腳本中的內(nèi)容有什么作用?
腳本執(zhí)行后將下載并提取設(shè)置網(wǎng)絡(luò)所需的所有特定于平臺的二進制文件,并保存在本地倉庫中,然后將Docker Hub中的Hyperledger Fabric Docker鏡像下載到本地Docker注冊表中,并將其標(biāo)記為“最新”。
2.下載Docker鏡像文件速度特別慢,有什么好的解決方式?
可在https://www.daocloud.io/網(wǎng)站中注冊一個賬號,注冊成功后,可以單擊加速器圖標(biāo)(如下圖所示)以獲取Docker加速器。

1)配置Docker加速器。在命令提示符中輸入如下圖所示的daocloud.io分配的加速器腳本命令(將輸入框中的腳本命令復(fù)制到命令提示符窗口中執(zhí)行即可),執(zhí)行完腳本之后,需要重啟Docker服務(wù)。

2)重啟Docker服務(wù)。執(zhí)行完該命令后,必須重啟Docker服務(wù)以生效:
$ sudo systemctl restart docker.service
3.下載完成后,添加的環(huán)境變量有什么意義?
添加環(huán)境變量的意義為在系統(tǒng)中任何路徑下使用Fabric相關(guān)的命令都可以讓系統(tǒng)找到該命令并且順利執(zhí)行。后期我們會進入Fabric目錄中執(zhí)行相應(yīng)的命令,所以也可以不添加該環(huán)境變量。
1.4 測試Hyperledger Fabric網(wǎng)絡(luò)環(huán)境
目標(biāo)
1.熟悉byfn.sh腳本的相關(guān)命令。
2.能夠自動實現(xiàn)你的第一個Hyperledger Fabric網(wǎng)絡(luò)環(huán)境。
Hyperledger Fabric網(wǎng)絡(luò)環(huán)境的構(gòu)成較為復(fù)雜,由N個節(jié)點組成一個分布式網(wǎng)絡(luò),每個節(jié)點都有自己的實體身份標(biāo)識;而且Hyperledger Fabric可以通過通道將一個網(wǎng)絡(luò)分割成不同的私有子網(wǎng),從而實現(xiàn)不同賬本之間數(shù)據(jù)的隔離性。所以,我們在使用Hyperledger Fabric之前,必須先構(gòu)建所需的網(wǎng)絡(luò)環(huán)境。
構(gòu)建Hyperledger Fabric網(wǎng)絡(luò)環(huán)境可以通過兩種方式實現(xiàn)。
1.使用自動化腳本實現(xiàn)
使用一個名為byfn.sh的自動化腳本文件自動構(gòu)建一個簡易的Hyperledger Fabric網(wǎng)絡(luò)環(huán)境并引導(dǎo)啟動,且自動生成相應(yīng)的一些配置文件,一般用于測試環(huán)境,本節(jié)內(nèi)容主要講解這種方式。
2.手動實現(xiàn)
為了適應(yīng)不同的且較為復(fù)雜的場景,這時自動化腳本方式就有些力不從心,必須由開發(fā)、運維及相關(guān)管理人員根據(jù)不同的情況,手動輸入相關(guān)命令構(gòu)建一個相當(dāng)復(fù)雜的網(wǎng)絡(luò)環(huán)境。這種實現(xiàn)方式參見第3章相關(guān)內(nèi)容。
1.4.1 測試Hyperledger Fabric環(huán)境
之前我們介紹過,使用一個名為byfn.sh的腳本實現(xiàn)Hyperledger Fabric網(wǎng)絡(luò)的自動構(gòu)建并測試,那么我們來看一下byfn.sh腳本都有哪些命令可以使用。首先進入fabric-samples目錄中的first-networkd子目錄:
$ cd fabric-samples/f irst-network
在first-network目錄下有一個自動化腳本byfn.sh,可以使用--help參數(shù)查看相應(yīng)的可用命令,在命令提示符中輸入如下命令:
$ ./byfn.sh --help
命令執(zhí)行成功后,會在終端輸出如下類似內(nèi)容(為方便起見,筆者已將其說明翻譯成中文):
up:啟動; down:清除網(wǎng)絡(luò); restart:重新啟動; generate:生成證書及創(chuàng)世區(qū)塊; upgrade:將網(wǎng)絡(luò)從1.1.x升級到1.2.x; -c:用于指定channelName,默認值"mychannel"; -t:CLI timeout時間,默認值10; -d:延遲啟動,默認值3; -f:使用指定的網(wǎng)絡(luò)拓撲結(jié)構(gòu)文件,默認使用docker-compose-cli.yaml; -s:指定使用的數(shù)據(jù)庫,可選 goleveldb/couchdb; -l:指定chaincode使用的語言,可選golang/node; -i:指定鏡像tag,默認 "latest"。
1.4.2 構(gòu)建你的第一個Hyperledger Fabric網(wǎng)絡(luò)
1.生成證書和密鑰
byfn.sh自動化腳本文件為各種Hyperledger Fabric網(wǎng)絡(luò)實體生成所有證書和密鑰,并且可以實現(xiàn)引導(dǎo)服務(wù)啟動及配置通道所需的一系列配置文件:
$ sudo ./byfn.sh -m generate
命令成功執(zhí)行后會生成1個Orderer+4個Peer+1個CLI的網(wǎng)絡(luò)結(jié)構(gòu),4個Peer包含在2個Org中。
根據(jù)提示輸入y,之后終端輸出類似如下的日志內(nèi)容:
Generating certs and genesis block for channel 'mychannel' with CLI timeout of '10' seconds and CLI delay of '3' seconds Continue? [Y/n] y proceeding ... /home/kevin/hyfa/fabric-samples/f?irst-network/../bin/cryptogen # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Generate certif?icates using cryptogen tool # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + cryptogen generate --conf?ig=./crypto-conf?ig.yaml org1.example.com org2.example.com + res=0 + set +x /home/kevin/hyfa/fabric-samples/f?irst-network/../bin/conf?igtxgen # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Generating Orderer Genesis block # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + conf?igtxgen -prof?ile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/ genesis.block …… doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update + res=0 + set +x
2.啟動網(wǎng)絡(luò)
生成所需要的證書及密鑰之后,需要啟動網(wǎng)絡(luò)來確認Hyperledger Fabric網(wǎng)絡(luò)環(huán)境是否能夠正常工作,使用byfn.sh腳本來實現(xiàn)網(wǎng)絡(luò)的啟動,命令如下:
$ sudo ./byfn.sh -m up
命令執(zhí)行后,終端會輸出一個提示信息,根據(jù)提示輸入y,如果輸出如下類似內(nèi)容,則代表網(wǎng)絡(luò)啟動且測試成功:
Starting for channel 'mychannel' with CLI timeout of '10' seconds and CLI delay of '3' seconds Continue? [Y/n] y proceeding ... LOCAL_VERSION=1.2.0 DOCKER_IMAGE_VERSION=1.2.0 Creating network "net_byfn" with the default driver Creating volume "net_peer0.org2.example.com" with default driver Creating volume "net_peer1.org2.example.com" with default driver Creating volume "net_peer1.org1.example.com" with default driver Creating volume "net_peer0.org1.example.com" with default driver Creating volume "net_orderer.example.com" with default driver Creating peer0.org2.example.com Creating peer0.org1.example.com Creating peer1.org2.example.com Creating orderer.example.com Creating peer1.org1.example.com Creating cli ____ _____ _ ____ _____ / ___| |_ _| / \ | _ \ |_ _| \___ \ | | / _ \ | |_) | | | ___) | | | / ___ \ | _ < | | |____/ |_| /_/ \_\ |_| \_\ |_| Build your first network (BYFN) end-to-end test …… ========Query successful on peer1.org2 on channel 'mychannel'========== ========= All GOOD, BYFN execution completed =========== _____ _ _ ____ | ____| | \ | | | _ \ | _| | \| | | | | | | |___ | |\ | | |_| | |_____| |_| \_| |____/
3.關(guān)閉網(wǎng)絡(luò)
網(wǎng)絡(luò)測試成功后,為了方便后期的操作,最好將其關(guān)閉,以防止后期啟動網(wǎng)絡(luò)時造成的沖突錯誤,關(guān)閉網(wǎng)絡(luò)可執(zhí)行如下命令:
$ sudo ./byfn.sh -m down
根據(jù)提示輸入y,命令執(zhí)行后終端輸出類似如下的日志內(nèi)容:
Stopping for channel 'mychannel' with CLI timeout of '10' seconds and CLI delay of '3' seconds Continue? [Y/n] y proceeding ... Stopping cli ... done Stopping peer1.org1.example.com ... done …… Removing cli ... done Removing peer1.org1.example.com ... done …… 7fb4e7907b3c 708576aff44f 0a8805ff393d Untagged: dev-peer1.org2.example.com-mycc-1.0-26c2ef32838554aac4f7ad6f100aca86 5e87959c9a126e86d764c8d01f8346ab:latest Deleted: sha256:687d517a67c1b236724deb84c50e310fb87f39341de5c66857e3049222a99504 Deleted: sha256:be2477e444d06842e81fb691e4e94f7ed4a547aeb8ba4a963660356a915b61c7 ……
使用byfn.sh腳本關(guān)閉網(wǎng)絡(luò)之后,將關(guān)閉容器,且刪除加密文件,并從Docker Registry中刪除鏈碼圖像。
注意
在網(wǎng)絡(luò)不再使用時,請務(wù)必關(guān)閉網(wǎng)絡(luò),以防止后期啟動網(wǎng)絡(luò)時引起沖突的錯誤。
FAQ
如果啟動網(wǎng)絡(luò)失敗怎么辦?
如果啟動網(wǎng)絡(luò)時發(fā)生錯誤,則執(zhí)行關(guān)閉命令后重新生成組織結(jié)構(gòu)及證書,然后再次執(zhí)行啟動網(wǎng)絡(luò)的命令。
- 抖音賬號運營實踐
- 互聯(lián)網(wǎng)+營銷:移動互聯(lián)網(wǎng)時代的營銷新玩法
- 精通以太坊:開發(fā)智能合約和去中心化應(yīng)用
- 電子商務(wù)必學(xué)的16堂課:跨境開店+精準(zhǔn)營銷
- 公眾號運營實戰(zhàn)手冊:57招讓你實現(xiàn)從0到10萬+
- 微商創(chuàng)業(yè)者手冊2:快速搭建微商團隊教育體系
- 電子商務(wù)糾紛案例精解大全
- 互聯(lián)網(wǎng)+微商創(chuàng)業(yè)11條軍規(guī)
- 玩賺短視頻:內(nèi)容策劃+營銷推廣+流量變現(xiàn)
- 出位:如何用互聯(lián)網(wǎng)思維破除瓶頸
- Ansible自動化運維:技術(shù)與最佳實踐
- 視覺營銷與運營實戰(zhàn)從入門到精通
- 大眾創(chuàng)業(yè)做電商:淘寶與微店 開店 運營 推廣 一冊通
- 互聯(lián)網(wǎng)市場營銷實戰(zhàn)手記
- 電子商務(wù)實驗指導(dǎo)