1:环境构建
用到虚拟机环境是Centos7 ,Linux 版本4.18.5-1.el7.x86_64。
1.1:Docker安装
如果在服务器上有旧版的docker,需要先执行卸载操作。
$ sudo yum remove docker \
docker-common \
docker-selinux \
docker-engine
随后开始安装Docker CE。
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum-config-manager --enable docker-ce-edge
$ sudo yum-config-manager --enable docker-ce-test
$ sudo yum-config-manager --disable docker-ce-edge
$ sudo yum makecache fast
$ sudo yum install docker-ce
执行查询docker版本号,看是否安装成功
docker --version
出现如下视图
docker启动:
service docker start
docker开机自启动:
chkconfig docker on
1.2:Docker-Compose安装
如服务器支持curl,首先需要安装curl依赖
yum install curl
根据官网,目前docker-compose最新版为1.23
而我这里下载的是1.15.0,执行如下操作下载docker-compose
curl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-compose
再次执行
docker-compose --version
查看版本信息
1.3:Go语言安装
执行以下操作下载Go语言包
curl -O https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
解压go1.8.3.linux-amd64.tar.gz,到/usr/local目录下,执行操作
tar -C /usr/local -xzf go1.8.3.linux-amd64.tar.gz
配置go环境变量
修改/etc/profile文件,在文件末尾加上如下两行代码
export PATH=$PATH:/usr/local/go/bin
export GOPATH=/opt/gopath
执行修改后,继续执行
source profile
查看go的版本
[root@localhost lf]# go version
go version go1.8.3 linux/amd64
fabric 环境搭建
新建目录
[root@localhost hyperledger]# pwd
/opt/gopath/src/github.com/hyperledger
切换到这个目录获取fabric源码
git clone https://github.com/hyperledger/fabric.git
切换到1.1版本
git checkout -b v1.1.0
查看是否切换成功
[root@localhost fabric]# git branch -a
* release-1.1
release-1.2
remotes/origin/HEAD -> origin/release-1.2
remotes/origin/feature/ca
remotes/origin/feature/convergence
remotes/origin/master
remotes/origin/release-1.0
remotes/origin/release-1.1
remotes/origin/release-1.2
remotes/origin/v0.6
remotes/origin/v1.0.0-preview
下载Fabric相关镜像文件
官方给出的下载方式如下:
docker pull hyperledger/fabric-peer
根据所使用的操作系统情况,选择x86_64-1.1.0版本,执行的docker下载故命令如下:
docker pull hyperledger/fabric-peer:x86_64-1.1.0
fabric环境主要需要的镜像有以下几种:
hyperledger/fabric-baseimage
hyperledger/fabric-zookeeper
hyperledger/fabric-kafka
hyperledger/fabric-couchdb
hyperledger/fabric-ca
hyperledger/fabric-tools
hyperledger/fabric-orderer
hyperledger/fabric-peer
hyperledger/fabric-javaenv
hyperledger/fabric-ccenv
hyperledger/fabric-baseos
hyperledger/fabric-membersrvc
在把所有的镜像tag都改为latest,执行如下格式的命令:
docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)
例如:
docker tag 390ac2e95bc7 hyperledger/fabric-baseimage:latest
查看所有镜像文件及版本号,执行如下命令:
docker images
视图如下:
[root@localhost fabric]# docker images
\REPOSITORY TAG IMAGE ID CREATED SIZE
hyperledger/fabric-baseimage latest 390ac2e95bc7 7 months ago 1.41GB
hyperledger/fabric-baseimage x86_64-0.4.7 390ac2e95bc7 7 months ago 1.41GB
hyperledger/fabric-zookeeper latest 1ce465be7112 7 months ago 1.39GB
hyperledger/fabric-zookeeper x86_64-0.4.7 1ce465be7112 7 months ago 1.39GB
hyperledger/fabric-kafka latest 4fed436fc0a0 7 months ago 1.4GB
hyperledger/fabric-kafka x86_64-0.4.7 4fed436fc0a0 7 months ago 1.4GB
hyperledger/fabric-couchdb latest 35228d48a25a 7 months ago 1.56GB
hyperledger/fabric-couchdb x86_64-0.4.7 35228d48a25a 7 months ago 1.56GB
hyperledger/fabric-ca latest 72617b4fa9b4 7 months ago 299MB
hyperledger/fabric-ca x86_64-1.1.0 72617b4fa9b4 7 months ago 299MB
hyperledger/fabric-tools latest b7bfddf508bc 7 months ago 1.46GB
hyperledger/fabric-tools x86_64-1.1.0 b7bfddf508bc 7 months ago 1.46GB
hyperledger/fabric-orderer latest ce0c810df36a 7 months ago 180MB
hyperledger/fabric-orderer x86_64-1.1.0 ce0c810df36a 7 months ago 180MB
hyperledger/fabric-peer latest b023f9be0771 7 months ago 187MB
hyperledger/fabric-peer x86_64-1.1.0 b023f9be0771 7 months ago 187MB
hyperledger/fabric-javaenv latest 82098abb1a17 7 months ago 1.52GB
hyperledger/fabric-javaenv x86_64-1.1.0 82098abb1a17 7 months ago 1.52GB
hyperledger/fabric-ccenv latest c8b4909d8d46 7 months ago 1.39GB
hyperledger/fabric-ccenv x86_64-1.1.0 c8b4909d8d46 7 months ago 1.39GB
hyperledger/fabric-baseos x86_64-0.4.6 220e5cf3fb7f 8 months ago 151MB
hyperledger/fabric-baseos x86_64-0.3.1 4b0cab202084 17 months ago 157MB
hyperledger/fabric-membersrvc latest b3654d32e4f9 2 years ago 1.42GB
3:运行测试e2e
进入到/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli目录下,启动Fabric网络
./network_setup.sh up
做了以下操作:
编译生成Fabric公私钥、证书的程序,程序在目录:fabric/release/linux-amd64/bin
基于configtx.yaml生成创世区块和通道相关信息,并保存在channel-artifacts文件夹。
基于crypto-config.yaml生成公私钥和证书信息,并保存在crypto-config文件夹中。
基于docker-compose-cli.yaml启动1Orderer+4Peer+1CLI的Fabric容器。
在CLI启动的时候,会运行scripts/script.sh文件,这个脚本文件包含了创建Channel,加入Channel,安装Example02,运行Example02等功能。
最后运行,我们可以看到这样的界面:
2018-10-23 07:08:02.676 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP
2018-10-23 07:08:02.676 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity
2018-10-23 07:08:02.676 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc
2018-10-23 07:08:02.676 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc
2018-10-23 07:08:02.676 UTC [msp/identity] Sign -> DEBU 005 Sign: plaintext: 0A95070A6708031A0C08D291BBDE0510...6D7963631A0A0A0571756572790A0161
2018-10-23 07:08:02.676 UTC [msp/identity] Sign -> DEBU 006 Sign: digest: FCBD442CECA1A41C53423DFAD0DCC426AB669E131A210DA7235FEA79B9EDB3AE
Query Result: 90
2018-10-23 07:08:23.063 UTC [main] main -> INFO 007 Exiting.....
===================== Query on PEER3 on channel 'mychannel' is successful =====================
===================== All GOOD, End-2-End execution completed =====================
_____ _ _ ____ _____ ____ _____
| ____| | \ | | | _ \ | ____| |___ \ | ____|
| _| | \| | | | | | _____ | _| __) | | _|
| |___ | |\ | | |_| | |_____| | |___ / __/ | |___
|_____| |_| \_| |____/ |_____| |_____| |_____|
进入CLI容器,该容器提供了跟chaincode交互的命令环境,命令如下:
docker exec -it cli bash
查看a账户余额:
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
如下:余额是90。
root@90720398789c:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
2018-10-23 07:10:41.504 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP
2018-10-23 07:10:41.504 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity
2018-10-23 07:10:41.504 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc
2018-10-23 07:10:41.504 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc
2018-10-23 07:10:41.505 UTC [msp/identity] Sign -> DEBU 005 Sign: plaintext: 0A95070A6708031A0C08F192BBDE0510...6D7963631A0A0A0571756572790A0161
2018-10-23 07:10:41.505 UTC [msp/identity] Sign -> DEBU 006 Sign: digest: C0B3FDB1A70B69835C8FC24D81822967DBF4FDE8435009782ACDBE08EBC56810
Query Result: 90
2018-10-23 07:10:41.573 UTC [main] main -> INFO 007 Exiting.....
把a账户的余额再转20元给b账户:
root@90720398789c:/opt/gopath/src/github.com/hyperledger/fabric/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","a","b","20"]}'
2018-10-23 07:17:12.449 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP
2018-10-23 07:17:12.449 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity
2018-10-23 07:17:12.475 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc
2018-10-23 07:17:12.475 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc
2018-10-23 07:17:12.476 UTC [msp/identity] Sign -> DEBU 005 Sign: plaintext: 0A95070A6708031A0C08F895BBDE0510...696E766F6B650A01610A01620A023230
2018-10-23 07:17:12.476 UTC [msp/identity] Sign -> DEBU 006 Sign: digest: 61AAB196B5F5F1A215702EAB61D273E1451C998B5BF8DBF8341D815AC4220528
2018-10-23 07:17:12.507 UTC [msp/identity] Sign -> DEBU 007 Sign: plaintext: 0A95070A6708031A0C08F895BBDE0510...2D3AC2C142CEF7EE1B57D74CE551D149
2018-10-23 07:17:12.507 UTC [msp/identity] Sign -> DEBU 008 Sign: digest: EB35F552FDCAC62FB8D73B0B30C839EFAB8C68CD53294E02D5D1F22E55717F9C
2018-10-23 07:17:12.520 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> DEBU 009 ESCC invoke result: version:1 response:<status:200 message:"OK" > payload:"\n L\036\222\027\004\347|\255\030d^7\023\362\253Ye\351\212W\347\3314g\212\004\321S\205\315\371\237\022Y\nE\022\024\n\004lscc\022\014\n\n\n\004mycc\022\002\010\003\022-\n\004mycc\022%\n\007\n\001a\022\002\010\004\n\007\n\001b\022\002\010\004\032\007\n\001a\032\00270\032\010\n\001b\032\003230\032\003\010\310\001\"\013\022\004mycc\032\0031.0" endorsement:<endorser:"\n\007Org1MSP\022\200\006-----BEGIN -----\nMIICGjCCAcCgAwIBAgIRAJtuYzeWfgyPqGQoE+bzptMwCgYIKoZIzj0EAwIwczEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMTgxMDIzMDcwMTM2WhcNMjgxMDIwMDcwMTM2\nWjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN\nU2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMS5leGFtcGxlLmNvbTBZ\nMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFzRqpPwb5HsQUaPPeighCfZ2ug7EaKa\npDSZTOXafarBGOZcNekuAJcx4jYdt9Hpwzb1s1plLJq1NR4kRiB9yjKjTTBLMA4G\nA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIO/aGzoVF5m+\nm4hbJ0KmYILUzL1Q+O29zAH87DGZ1QL9MAoGCCqGSM49BAMCA0gAMEUCIQC9AkLl\n9LEmqZySWwiIoBKo/Fdfpb9BEZl+4tbgqYGXFAIgHOyZ9UZQFUlS3fNQSeHn/ZAl\nXmxUJ/XFGNuvrZQjPw0=\n-----END -----\n" signature:"0E\002!\000\363\302_\2277\372\313\251W7)*T\nmi\230\201\271I?I\300:;\024\352Z\307D4\256\002 O+\000!-E^\362\273p#\223\014\253\231\327-:\302\301B\316\367\356\033W\327L\345Q\321I" >
2018-10-23 07:17:12.520 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 00a Chaincode invoke successful. result: status:200
2018-10-23 07:17:12.520 UTC [main] main -> INFO 00b Exiting.....
再查询一下a账户的余额
root@90720398789c:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'2018-10-23 07:20:02.370 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP
2018-10-23 07:20:02.370 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity
2018-10-23 07:20:02.370 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc
2018-10-23 07:20:02.370 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc
2018-10-23 07:20:02.371 UTC [msp/identity] Sign -> DEBU 005 Sign: plaintext: 0A95070A6708031A0C08A297BBDE0510...6D7963631A0A0A0571756572790A0161
2018-10-23 07:20:02.371 UTC [msp/identity] Sign -> DEBU 006 Sign: digest: E016E2C52A7325DAB9BB047E266E7A2C42D8AEA22FE3EC79779953DA55B2EE04
Query Result: 70
2018-10-23 07:20:02.386 UTC [main] main -> INFO 007 Exiting.....
关闭fabric
./network_setup.sh down