标签:策略 配置 rpe user 管理 cacerts col 初始化 返回结果
现在所有的文件都已经准备完毕,我们可以启动fabric网络了。
在orderer服务器上运行:
cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
docker-compose -f docker-compose-orderer.yaml up -d
运行完毕后我们可以使用docker ps看到运行了一个名字为orderer.example.com的容器。
我们要为每一个peer安装一个couchdb,先切换到peer0.org1服务器上。之前在获取hyperledger fabric镜像的时候已经获得了couchdb的镜像,执行docker images命令可以看到hyperledger/fabric-couchdb这个镜像。
couchDB在启动的时候需要指定一个本地文件夹映射成CouchDB的数据存储文件夹,所以我们可以在当前用户的目录下创建一个文件夹用于存放数据。
mkdir couchdb
下载完成后,我们只需要执行以下命令即可启用一个CouchDB的实例:
docker run -p 5984:5984 -d --name my-couchdb -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=password -v ~/couchdb:/opt/couchdb/data hyperledger/fabric-couchdb
启动后我们打开浏览器,访问peer0.org1的IP的5984端口的URL,peer0.org1的IP是10.0.2.11,那么URL是:
http://10.0.2.11:5984/_utils
这个时候我们就可以看到CouchDB的Web管理界面了。输入用户名admin密码password即可进入。
命令为:
cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
docker-compose -f docker-compose-peer0org1.yaml up –d
运行完毕后我们使用docker ps应该可以看到3个正在运行的容器。
接下来切回到peer0.org2.example.com服务器。运行相同的命令:
mkdir couchdb
docker run -p 5984:5984 -d --name my-couchdb -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=password -v ~/couchdb:/opt/couchdb/data hyperledger/fabric-couchdb
cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
docker-compose -f docker-compose-peer0org2.yaml up –d
现在我们整个Fabric网络已经成型,接下来是创建channel和运行ChainCode。
我们切换到peer0.org1.example.com服务器上,使用该服务器上的cli来运行创建Channel和运行ChainCode的操作。先用以下命令进入CLI内部Bash:
docker exec -it cli bash
创建Channel的命令是peer channel create,我们前面创建Channel的配置区块时,指定了Channel的名字是mychannel,那么这里我们必须创建同样名字的Channel。
ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tls true --cafile $ORDERER_CA
执行该命令后,系统会提示:
2017-10-30 18:30:35.210 UTC [channelCmd] readBlock -> DEBU 020 Received block:0
系统会在cli内部的当前目录创建一个mychannel.block文件,这个文件非常重要,接下来其他节点要加入这个Channel就必须使用这个文件。
还是在peer0.org1的CLI上,我们要将这个Peer加入mychannel就很简单,只需要运行如下命令:
peer channel join -b mychannel.block
系统返回消息:
2017-10-30 18:40:21.405 UTC [channelCmd] executeJoin -> INFO 006 Peer joined the channel!
接下来切换到peer0.org2服务器,进入cli以后执行同样的命令
docker exec -it cli bash
peer channel join -b mychannel.block
这样peer0.org1和peer0.org2就都已经加入channel了。
关于AnchorPeer,其实我的每个组织只有一个peer节点,所以更新不更新锚节点也不重要。
对于Org1来说,peer0.org1是锚节点,我们需要切换到peer0.org1服务器上并更新锚节点:
另外对于Org2,peer0.org2是锚节点,切换到peer0.org2服务器上然后执行如下命令:
peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org2MSPanchors.tx --tls true --cafile $ORDERER_CA
以上,整个Fabric网络和Channel都准备完毕,接下来我们来安装和运行ChainCode。社区联盟的chaincode代码已经在上一章贴上了。
链上代码的安装需要在各个相关的Peer上进行,回到peer.org1服务器,仍然是保持在CLI的命令行下:
使用peer chaincode install命令可以安装指定的ChainCode并对其命名:
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/community
安装的过程其实就是对CLI中指定的代码进行编译打包,并把打包好的文件发送到Peer,等待接下来的实例化。
切换到peer0.org2服务器,给peer0.org2安装链上代码:
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/community
实例化链上代码主要是在Peer所在的机器上对前面安装好的链上代码进行包装,生成对应Channel的Docker镜像和Docker容器。并且在实例化时我们可以指定背书策略。我们在peer0.org1服务器的cli内运行以下命令完成实例化:
peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA -C mychannel -n mycc -v 1.0 -c ‘{"Args":["init"]}‘ -P "OR (‘Org1MSP.member‘,‘Org2MSP.member‘)"
使用docker ps可以看到有新的容器 dev-peer0.org1.example.com-mycc-1.0正在运行。
我们可以调用initLedger功能,该功能会初始化两个帖子。对应的代码:
peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA -C mychannel -n mycc -c ‘{"Args":["initLedger"]}‘
前面的操作都是在org1下面做的,那么处于同一个区块链(同一个Channel下)的org2,是否会看org1的更改呢?切换到peer0.org2服务器,由于mycc已经在前面org1的时候实例化了,也就是说对应的区块已经生成了,所以在org2不能再次初始化。我们直接运行查询命令:
peer chaincode query -C mychannel -n mycc -c ‘{"Args":["queryPost","POST1"]}‘
因为peer0.org2也需要生成Docker镜像,创建对应的容器,才能通过容器返回结果,所以等的时间会稍长一点。我们回到Ubuntu终端,执行docker ps,可以看到peer0.org2也多了一个容器:dev-peer0.org2.example.com-mycc-1.0
这样整个区块链网络算是正式跑通了!
搭建基于hyperledger fabric的联盟社区(五) --启动Fabric网络
标签:策略 配置 rpe user 管理 cacerts col 初始化 返回结果
原文地址:http://www.cnblogs.com/preminem/p/7755411.html