关于Hyperledger Fabric的部署适合在Ubuntu或其它Linux上进行,本例在Ubuntu16.04LTS上操作。如果是Windows、MacOS系统,建议安装Virtual Box,在虚拟机上部署区块链环境。
准备:
1、源需要换成国内源,这样速度能快很多。
参考:http://www.linuxidc.com/Linux/2016-06/132518.htm
2、安装好git,ssh服务,配置go语言环境(我的version是1.9.2,官网下载最新版本,注意项目路径名与src包一致!!),安装docker容器(我的version是1.12.6,建议1.12以上!!)并启动容器服务(配置过程比较简单,自行百度),分别输入需要的环境名字来检查是否正确安装,确认安装正确继续。
参考:http://www.linuxidc.com/Linux/2017-01/139985.htm
3、修改你的权限
sudo usermod -aG docker USER_NAME
4、注销并重新登录,然后添加阿里云的Docker Hub镜像(一定要注销后再重启docker服务!!)
参考:https://cr.console.aliyun.com/#/accelerator/
5、然后重新加载守护进程,输入以下两行命令
sudo systemctl daemon-reload
sudo systemctl restart docker
6、安装python-pip
sudo apt-get install python-pip
7、安装docker-compose
直接运行脚本:
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
部署:
1、建立fabric目录,用Git拉取源码
mkdir -p ~/go/src/github.com/hyperledger
cd ~/go/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git
2、切换v1.0.0版本的源码
cd ~/go/src/github.com/hyperledger/fabric
git checkout v1.0.0
3、下载Fabric docker镜像
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
若下载成功,输入docker images会看到如下内容
启动:
1、在e2e_cli文件夹内,启动Fabric网络的自动化脚本。
./network_setup.sh up
2、启动成功,则出现如下:
测试:
1、测试官方example,打开另一个终端:
docker exec -it cli bash
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
余额(Query Result)显示为90。
2、再把a账户的余额全部转给b账户,运行命令:
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","90"]}'
运行结果为:
3、再次查询a的余额,结果为:
4、退出cli容器:exit
5、关闭Fabric网络:./network_setup.sh down
PS: 链码调试方法(在fabric-sample下)
# 启动网络
1$ cd fabric-samples/chaincode-docker-devmode
1$ docker-compose -f docker-compose-simple.yaml up -d
# 进入链码容器
2$ docker exec -it chaincode bash
# 编译链码
2$ cd [链码目录]
2$ go build -o [可执行文件]
# 部署链码
2$ CORE_PEER_ADDRESS=peer:[端口号] CORE_CHAINCODE_ID_NAME=[实例]:0 ./[可执行文件]
# 启动测试容器
3$ docker exec -it cli bash
# 安装链码
3$ cd ..
3$ peer chaincode install -p [可执行文件的所在目录路径] -n [实例] -v [版本号]
# 实例化链码
3$ peer chaincode instantiate -n [实例] -v [版本号] -c '{"Args":["函数","参数","参数"]}' -C [通道]
# 调用链码
3$ peer chaincode invoke -n [实例] -c '{"Args":["函数", "参数", "参数"]}' -C [通道]
docker常用命令:
1)删除一个容器
docker rm
2)强制删除一个容器
docker rm -f
3)强制删除全部容器
docker rm -f $(docker ps -aq)
4)删除一个镜像:
docker rmi
5)强制删除一个镜像:
docker rmi -f
6)强制删除全部镜像
docker rmi -f $(docker images -q)