BlockChain联盟链中的Hyperledger项目中的Fabrica项目是商业联盟应用区块链的基石之作,现在来搭建一个运行环境,进行技术验证。
安装组件如下:
1.Docker-compose:Docker 容器管理;
2.Go lang SDK:Go 语言开发、编译环境;
3.Git:git 镜像克隆与提交;
4.Rest Client: rest API 测试;
容器主要运行有:MemberSrv 和Peer;
一、HyperLedger Fabric环境资源准备
1、docker的安装
a)检查版本
$ uname –r
3.10.0-229.el7.x86_64
b)更新Centos
$ sudo yum update
c)安装需要软件
yum install –y docker
d)把服务设备成开机启动并启动服务
systemctl enable docker.service
systemctl start docker
e)验证 docker
正确安装(通过运行一个测试镜像,当容器运行时,它打印一个信息性消息并退出。)
docker run hello-world
2、Docker Compose安装
Compose 定位是 “定义和运行多个 Docker 容器的应用”,可以很方便的从官方拉下来一些镜像,在此基础上再进行改造。它允许用户通过一个单独的 dockercompose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
a).安装容器Compose(使用官方提供的方法,安装1.10.1版本):
curl -L https://github.com/docker/compose/releases/download/1.10.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose version
b).从 DockerHub上拉取镜像
mkdir /opt/fabric
cd /opt/fabric/
docker pull hyperledger/fabric-peer:latest #拉取peer的镜像
docker pull hyperledger/fabric-membersrvc:latest #拉取memberserver的镜像
docker images #确认镜像拉取成功
c).在新建的/opt/fabric目录下建立Docker-compose.yml文件
vim docker-compose.yml
内容如下:
#定义第一台虚拟机名称为membersrvc
membersrvc:
#指定镜像
image: hyperledger/fabric-membersrvc
#暴露端口信息, 使用宿主:容器 格式,
ports:
- "7054:7054"
##覆盖容器启动后默认执行的命令
command: membersrvc
#定义第二台虚拟机名称为vp0
vp0:
image: hyperledger/fabric-peer
ports:
- "7050:7050"
- "7051:7051"
- "7053:7053"
#设置环境变量
environment:
- CORE_PEER_ADDRESSAUTODETECT=true
- CORE_VM_ENDPOINT=unix:///var/run/docker.sock
- CORE_LOGGING_LEVEL=DEBUG
- CORE_PEER_ID=vp0
- CORE_PEER_PKI_ECA_PADDR=membersrvc:7054
- CORE_PEER_PKI_TCA_PADDR=membersrvc:7054
- CORE_PEER_PKI_TLSCA_PADDR=membersrvc:7054
- CORE_SECURITY_ENABLED=true
- CORE_SECURITY_ENROLLID=test_vp0
- CORE_SECURITY_ENROLLSECRET=MwYpmSRjupbT
#数据卷所挂载路径设置。可以设置宿主机路径( HOST:CONTAINER ),该指令中路径支持相对路径
volumes:
- /var/run/:/var/run/
#链接到其它服务中的容器
links:
- membersrvc
#覆盖容器启动后默认执行的命令
command:
sh -c "sleep 5; peer node start --peer-chaincodedev"
d)运行docker-compose up 命令启动2个容器(MemberServer和Peer.到此,我们可以具备启动和运行chaincode,并进行权限管理的Fabric(虽然只有一个Peer)):
docker-compose up –d #在后台运行容器
直到启动日志显示如下内容,说明启动成功:
使用Ctrl+z停止当前日志的显示后,运行docker-compose ps 可以看到服务和对应的端口映射:
可以做些常用操作:
docker-compose logs -f vp0 #查看vp0的日志
docker-compose exec vp0 bash #进入到vp0执行它的bash,exit命令可以退出,Ctrl+z退出而不停止容器。
docker-compose exec membersrvc bash #进入到membersrvc执行它的bash,exit命令可以退出。
3、运行与发布Chaincode
a)进入vp0的bash,运行如下命令
docker-compose exec vp0 bash
cd $GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go
cp chaincode_example02/chaincode_example02.go $GOPATH/src/ #复制目录里面的例2到$GOPATH/src/ 进行编译
cd $GOPATH/src/
go build ./chaincode_example02.go #编译成功会在GOPATH/src目录生成chaincode_example02文件
(chaincode_example02.go 源码链接https://raw.githubusercontent.com/hyperledger/fabric/master/examples/chaincode/go/chaincode_example02/chaincode_example02.go)
b)发布chaincode在GOPATH/src 下运行
CORE_CHAINCODE_ID_NAME=mycc CORE_PEER_ADDRESS=0.0.0.0:7051 ./chaincode_example02
直至出现“Received REGISTERED”字样,代表成功。
使用exit命令或Ctrl+z退出终端。
4、firefox中安装POST接口测试工具:
在firefox的附加组件中下载Restclient插件安装
重启firefox后,打开RESTClient,进行POST测试
5、系统环境测试:deploy(部署),invoke(调用),query(查询) chaincode(智能合约)(vp0中peer的用户名和密码在 membersrvc.yaml 文件里为jim: 6avZQLwcUe9b)
已经建成的环境架构,目前Farbric Peer只有一个vp0
a)进入vp0容器
docker-compose exec vp0 bash
b)login
CLI方式:
peer network login jim
输入密码:6avZQLwcUe9b
Rest方式(在Body中放入如下代码):
{
"enrollId": "jim",
"enrollSecret": "6avZQLwcUe9b"
}
返回用户已登录。
c)deploy(部署)
CLI方式:
CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode deploy -u jim -n mycc -c ‘{"Args": ["init", "a","100", "b", "200"]}‘
d)Invoke(调用)
CLI方式:
CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode invoke -u jim -l golang -n mycc -c ‘{"Args": ["invoke", "a", "b", "10"]}‘
e)query(查询)
CLI方式:
CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode query -u jim -l golang -n mycc -c ‘{"Function": "query", "Args": ["b"]}‘
后记:Fabric V0.6和V1.0的架构完全不一样,也就是说在V0.6环境下开发的应用,没法在V1.0上运行,V0.6注定是一个过渡版本,期待V1.0在2017-3月能正式发布。