前言
本人參考連接搭建Fabric網(wǎng)絡(luò)越妈,遇到了一些坑檩赢,故此有了本篇文章闪盔。
準(zhǔn)備好機(jī)器環(huán)境
我的系統(tǒng)版本:Ubuntu 18.04.1 LTS
安裝GO語(yǔ)言環(huán)境
$ cd ~
$ mkdir go
對(duì)于新手來(lái)說(shuō),不推薦使用apt
的方式安裝GO障斋。
$ wget https://dl.google.com/go/go1.10.2.linux-amd64.tar.gz
$ sudo tar -C usr/local -xzf go1.10.2.linux-amd64.tar.gz
$ vim ~/.profile
添加如下內(nèi)容:
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin
用:wq
保存后使用如下命令將立即刷新
$ source ~/.profile
$ go version
go version go1.10 linux/amd64
安裝Docker
這里使用的Docker
的官方文檔來(lái)安裝docker
- 如果系統(tǒng)中有舊版本的
Docker
,需要先使用如下命令卸載 - 更新
apt
包索引 - 安裝軟件包以允許
apt
通過(guò)HTTPS使用遠(yuǎn)程庫(kù) - 添加
Docker
的官方GPG
密鑰 - 通過(guò)搜索指紋的最后8個(gè)字符薪捍,確認(rèn)您現(xiàn)在擁有指紋識(shí)別碼
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
- 置穩(wěn)定版本的遠(yuǎn)程庫(kù)
- 再次更新
apt
包索引 - 使用
apt
安裝docker-ce
$ sudo apt-get remove docker docker-engine docker.io
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL [https://download.docker.com/linux/ubuntu/gpg](https://download.docker.com/linux/ubuntu/gpg) | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce
- 查看docker版本,測(cè)試環(huán)境配置是否成功
$ docker version
Client:
Version: 18.06.1-ce
API version: 1.38
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:24:56 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.06.1-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:23:21 2018
OS/Arch: linux/amd64
Experimental: false
- 安裝完成之后,需要將當(dāng)前用戶添加到
docker
用戶組酪穿,然后為該用戶添加sudo
權(quán)限, - 若沒(méi)有創(chuàng)建
docker
用戶組晴裹,可以使用如下命令創(chuàng)建一個(gè)GID
為999
被济,組名為docker
的用戶組 - 將當(dāng)前用戶(ubuntu)添加到
docker
用戶組并分配sudo
權(quán)限
$ sudo groupadd –g 999 docker
$ sudo usermod -aG docker ubuntu
安裝Docker-Compose
-
Docker-Compose
是支持通過(guò)模板腳本批量創(chuàng)建的一個(gè)組件 - 在安裝
Docker-Compose
之前,需要安裝python-pip
- 下載
Docker-Compose
涧团,這里使用的是國(guó)內(nèi)的DaoClound加速器進(jìn)行下載 - 將
Docker-Compose
文件夾移動(dòng)到/usr/local/bin
目錄下 - 為
Docker-Compose
附上可執(zhí)行權(quán)限
$ sudo apt-get python-pip
$ curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
$ sudo mv ~/docker-compose /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
下載Fabric源碼
- 先在
GOPATH
下創(chuàng)建對(duì)應(yīng)的目錄 - 切換到對(duì)應(yīng)目錄
- 使用
Git
命令將fabric
的源碼從github上克隆下來(lái) - 由于Fabric一直在更新只磷,而我們并不需要使用最新的源碼,所有將版本切換到
v1.0.0
$ mkdir -p ~/go/src/github.com/hyperledger
$ cd ~/go/src/github.com/hyperledger
$ git clone [https://github.com/hyperledger/fabric.git](https://github.com/hyperledger/fabric.git)
$ cd ~/go/src/github.com/hyperledger/fabric
$ git checkout -b v1.0.0
下載Fabric Docker鏡像
由于剛才設(shè)置了Docker Hub鏡像的地址泌绣,并且官方文件中也提供了批量下載的腳本钮追,所有我們只需運(yùn)行下面命令即可
$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
$ source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0
由于剛才設(shè)置的是國(guó)內(nèi)的鏡像站,在本地網(wǎng)速還不錯(cuò)的情況下下載數(shù)度還是很快的阿迈。當(dāng)下載完成后元媚,使用如下命令檢查鏡像列表
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dev-peer0.org1.example.com-marbles-v4 latest 089d43e100c9 5 hours ago 173MB
dev-peer0.org1.example.com-fabcar-1.0 latest 6047921ee993 7 hours ago 173MB
hyperledger/fabric-tools latest 0403fd1c72c7 10 months ago 1.32GB
hyperledger/fabric-tools x86_64-1.0.0 0403fd1c72c7 10 months ago 1.32GB
hyperledger/fabric-couchdb latest 2fbdbf3ab945 10 months ago 1.48GB
hyperledger/fabric-couchdb x86_64-1.0.0 2fbdbf3ab945 10 months ago 1.48GB
hyperledger/fabric-kafka latest dbd3f94de4b5 10 months ago 1.3GB
hyperledger/fabric-kafka x86_64-1.0.0 dbd3f94de4b5 10 months ago 1.3GB
hyperledger/fabric-zookeeper latest e545dbf1c6af 10 months ago 1.31GB
hyperledger/fabric-zookeeper x86_64-1.0.0 e545dbf1c6af 10 months ago 1.31GB
hyperledger/fabric-orderer latest e317ca5638ba 10 months ago 179MB
hyperledger/fabric-orderer x86_64-1.0.0 e317ca5638ba 10 months ago 179MB
hyperledger/fabric-peer latest 6830dcd7b9b5 10 months ago 182MB
hyperledger/fabric-peer x86_64-1.0.0 6830dcd7b9b5 10 months ago 182MB
hyperledger/fabric-javaenv latest 8948126f0935 10 months ago 1.42GB
hyperledger/fabric-javaenv x86_64-1.0.0 8948126f0935 10 months ago 1.42GB
hyperledger/fabric-ccenv latest 7182c260a5ca 10 months ago 1.29GB
hyperledger/fabric-ccenv x86_64-1.0.0 7182c260a5ca 10 months ago 1.29GB
hyperledger/fabric-ca latest a15c59ecda5b 10 months ago 238MB
hyperledger/fabric-ca x86_64-1.0.0 a15c59ecda5b 10 months ago 238MB
hyperledger/fabric-baseos x86_64-0.3.1 4b0cab202084 12 months ago 157MB
出現(xiàn)以上結(jié)果說(shuō)明鏡像已經(jīng)下載成功
啟動(dòng)Fabric網(wǎng)絡(luò)并運(yùn)行e2e_cli項(xiàng)目
- 進(jìn)入
e2e_cli
目錄,并執(zhí)行啟動(dòng)命令
$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
$ ./network_setup.sh up
這個(gè)過(guò)程做了如下操作:
- 編譯生成Fabric公私鑰苗沧,證書(shū)的程序刊棕,程序在目錄:fabric/release/linux-amd64/bin下
- 基于configtx.yaml生成創(chuàng)世區(qū)塊和通道相關(guān)信息,并保存到channel-artifacts文件夾中
- 基于crypto-config.yaml生成公私鑰和證書(shū)信息待逞,并保存在crypto-config文件夾中
- 基于docker-compose-cli.yaml啟動(dòng)1 Orderer + 4 Peer + 1 CLI的Fabric容器
- 在CLI啟動(dòng)的時(shí)候甥角,會(huì)運(yùn)行srcipt/script.sh文件,這個(gè)腳本文件包含了創(chuàng)建Channel,加入Channel识樱,安裝Example02,運(yùn)行Example02等功能
HYPERLEDGER FABRIC網(wǎng)絡(luò)搭建之network e2ecli_default not found
原因是:e2e_cli目錄是固定的怜庸,啟動(dòng)后會(huì)創(chuàng)建一個(gè)docker network以此為名字当犯,這里是e2e_cli。如果修改該目錄休雌,要修改/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/base目錄下的peer-base.yaml將網(wǎng)絡(luò)名改成如下名稱即可- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2e_cli_default
手動(dòng)測(cè)試一下Fabric網(wǎng)絡(luò)
我們以安裝好的Example02
進(jìn)行測(cè)試,在官方例子中灶壶,channel
的名字是mychannel
,鏈碼的名字是mycc
,我們首先重新打開(kāi)一個(gè)命令行,然后進(jìn)入CLI
杈曲,
- 輸入以下命令即可
- 運(yùn)行命令查詢
a
賬戶的余額驰凛,可以看到a
賬戶的余額現(xiàn)在是90 - 運(yùn)行命令查詢
b
賬戶的余額,可以看到b
賬戶的余額現(xiàn)在是210 - 現(xiàn)在將
b
賬戶的余額轉(zhuǎn)100給a
賬戶 - 再次查詢
a
賬戶的余額担扑,可以看到a
賬戶的余額現(xiàn)在是190,比之前多了100 - 再次查詢
b
賬戶的余額恰响,可以看到b
賬戶的余額現(xiàn)在是110,比之前少了100
root@60dc5766fa4d:/opt/gopath/src/github.com/hyperledger/fabric/peer# 簡(jiǎn)寫(xiě)為 root***peer#
$ docker exec -it cli bash
root***peer# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
root***peer# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'
root***peer# peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -c '{"Args":["invoke","b","a","100"]}'
root***peer# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
root***peer# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'
查詢結(jié)果如下圖所示關(guān)閉區(qū)塊鏈網(wǎng)絡(luò)
- 退出
CLI
容器 - 關(guān)閉Fabric網(wǎng)絡(luò)
root@60dc5766fa4d:/opt/gopath/src/github.com/hyperledger/fabric/peer# exit
$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
$ ./network_setup.sh down
最后出現(xiàn)如下圖說(shuō)明關(guān)閉區(qū)塊鏈網(wǎng)絡(luò)成功