大佬教程收集整理的这篇文章主要介绍了在CentOS 7.2下安装Hyperledger fabric 1.0.0 preview版本的solo模式,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
内核版本需要3.10 以上。centos 7 完全支持.
查看内核信息
$ uname -a
Linux localhost.localdomain@H_502_11@ 3.10@H_502_11@.0@H_502_11@-514.6@H_502_11@.1@H_502_11@.el@H_502_11@7.x@H_502_11@86_64
$ @H_502_11@docker -v
Docker@H_502_11@ version 1.12@H_502_11@.5@H_502_11@,build 047@H_502_11@e51b/1.12@H_502_11@.5@H_502_11@
$ yum @H_674_64@-y@H_502_11@ install epel@H_674_64@-release@H_502_11@
$ @H_502_11@yum -y install python-pip
# 更新到最新版本@H_502_11@
$ @H_502_11@pip install --upgrade pip
$ @H_502_11@pip -V@H_502_11@
docker-compose是docker集群管理工具,可自定义一键启动多个docker container。
官网二进制发布:
https://github.com/docker/compose/releases
安装手册见网站 :
https://docs.docker.com/compose/install/
安装命令如下:
$ @H_502_11@curl -L@H_502_11@ https:@H_502_11@//github.com/docker@H_502_11@/compose/releases@H_502_11@/download/@H_502_11@1.11@H_502_11@.1@H_502_11@/docker-compose-`uname -s`-`uname -m` > /usr/local@H_502_11@/bin/docker@H_502_11@-compose
chmod +x /usr/local/bin/docker-compose
$ @H_502_11@chmod +x /usr/local/bin/docker-compose
$ @H_502_11@docker-compose -v
或者通过 pip 安装
$ pip install @H_674_64@-U@H_502_11@ docker@H_674_64@-compose@H_502_11@
杨宝华的项目主页
https://github.com/yeasy/blockchain_guide/blob/master/hyperledger/1.0.md
pip install@H_502_11@ docker-compose
注意:这里一定要用tag来更新别名,要和docker-compose.yml 中的匹配
2017年02月16日,杨宝华mail确定:
The latest tag is@H_502_11@ auto@H_502_11@-building by@H_502_11@ triggered from@H_502_11@ code change.
While@H_502_11@ those number tag (e.g.,0.8@H_502_11@) is@H_502_11@ stable and@H_502_11@ manually set@H_502_11@.
所以, 我们使用:
最新的版本的pull命令如下:
以root用户运行以下命令
ARCH=@H_502_11@x86_64
BASE_VERSION=@H_502_11@1.0@H_502_11@.0@H_502_11@@H_674_64@-preview@H_502_11@
PROjeCT_VERSION=@H_502_11@1.0@H_502_11@.0@H_502_11@@H_674_64@-preview@H_502_11@
IMG_VERSION=@H_502_11@0.8@H_502_11@.4@H_502_11@
docker pull yeasy/hyperledger@H_674_64@-fabric@H_502_11@@H_674_64@-base@H_502_11@:$IMG_VERSION@H_502_11@ \@H_502_11@
&&@H_502_11@ docker pull yeasy/hyperledger@H_674_64@-fabric@H_502_11@@H_674_64@-peer@H_502_11@:$IMG_VERSION@H_502_11@ \@H_502_11@
&&@H_502_11@ docker pull yeasy/hyperledger@H_674_64@-fabric@H_502_11@@H_674_64@-orderer@H_502_11@:$IMG_VERSION@H_502_11@ \@H_502_11@
&&@H_502_11@ docker pull yeasy/hyperledger@H_674_64@-fabric@H_502_11@@H_674_64@-ca@H_502_11@:$IMG_VERSION@H_502_11@ \@H_502_11@
&&@H_502_11@ docker pull yeasy/blockchain@H_674_64@-explorer@H_502_11@:latest \@H_502_11@
&&@H_502_11@ docker tag@H_502_11@ yeasy/hyperledger@H_674_64@-fabric@H_502_11@@H_674_64@-peer@H_502_11@:$IMG_VERSION@H_502_11@ hyperledger/fabric@H_674_64@-peer@H_502_11@ \@H_502_11@
&&@H_502_11@ docker tag@H_502_11@ yeasy/hyperledger@H_674_64@-fabric@H_502_11@@H_674_64@-orderer@H_502_11@:$IMG_VERSION@H_502_11@ hyperledger/fabric@H_674_64@-orderer@H_502_11@ \@H_502_11@
&&@H_502_11@ docker tag@H_502_11@ yeasy/hyperledger@H_674_64@-fabric@H_502_11@@H_674_64@-ca@H_502_11@:$IMG_VERSION@H_502_11@ hyperledger/fabric@H_674_64@-ca@H_502_11@ \@H_502_11@
&&@H_502_11@ docker tag@H_502_11@ yeasy/hyperledger@H_674_64@-fabric@H_502_11@@H_674_64@-base@H_502_11@:$IMG_VERSION@H_502_11@ hyperledger/fabric@H_674_64@-baseimage@H_502_11@ \@H_502_11@
&&@H_502_11@ docker tag@H_502_11@ yeasy/hyperledger@H_674_64@-fabric@H_502_11@@H_674_64@-base@H_502_11@:$IMG_VERSION@H_502_11@ hyperledger/fabric@H_674_64@-ccenv@H_502_11@:$ARCH@H_502_11@-@H_502_11@$BASE_VERSION@H_502_11@ \@H_502_11@
&&@H_502_11@ docker tag@H_502_11@ yeasy/hyperledger@H_674_64@-fabric@H_502_11@@H_674_64@-base@H_502_11@:$IMG_VERSION@H_502_11@ hyperledger/fabric@H_674_64@-baSEOs@H_502_11@:$ARCH@H_502_11@-@H_502_11@$BASE_VERSION@H_502_11@
$ @H_502_11@docker network create fabric_noops
$ @H_502_11@docker network create fabric_pbft
$ @H_502_11@cd ~
$ @H_502_11@git clone https:@H_502_11@//github.com/yeasy@H_502_11@/docker-compose-files@H_502_11@
$ cd /root/docker@H_674_64@-compose@H_502_11@@H_674_64@-files@H_502_11@/hyperledger/1.0@H_502_11@
peers.yml: 包含 peer 节点的服务模板。
docker-compose.yml: 启动 1 个 最小化的环境,包括 1 个 peer 节点、1 个 Orderer 节点、1 个 CA 节点。
peer1:
extends:
file: peer.yml
service: peer
container_name: fabric-peer1
hostname: peer1
environment:
- CORE_PEER_ID@H_502_11@=peer1 @H_502_11@ - CORE_PEER_COMMITTER_LEDGER_ORDERER@H_502_11@=orderer:@H_502_11@7050@H_502_11@ @H_502_11@ links:
- ca @H_502_11@ - orderer @H_502_11@ ports:
- 8052@H_502_11@:@H_502_11@7051@H_502_11@ @H_502_11@ depends_on:
- ca @H_502_11@ - orderer @H_502_11@
peer2:
extends:
file: peer.yml
service: peer
container_name: fabric-peer2
hostname: peer2
environment:
- CORE_PEER_ID@H_502_11@=peer2 @H_502_11@ - CORE_PEER_COMMITTER_LEDGER_ORDERER@H_502_11@=orderer:@H_502_11@7050@H_502_11@ @H_502_11@ links:
- ca @H_502_11@ - orderer @H_502_11@ ports:
- 8053@H_502_11@:@H_502_11@7051@H_502_11@ @H_502_11@ depends_on:
- ca @H_502_11@ - orderer @H_502_11@
$ docker@H_674_64@-compose@H_502_11@ @H_674_64@-f@H_502_11@ docker@H_674_64@-compose@H_502_11@.@H_502_11@yml up @H_674_64@-d@H_502_11@
应该有5个启动的容器,分别是 1. fabric-peer0 2. fabric-peer1 3. fabric-peer2 4. fabric-orderer 5. fabric-ca
$ @H_502_11@docker ps
# 或者@H_502_11@
$ @H_502_11@docker-compose ps
进入任何一个peer容器内均可
docker exec -it@H_502_11@ fabric-peer2 bash
CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050@H_502_11@ peer chAnnel create@H_502_11@ -c myc1
# 确认myc1.block文件产生了。说明chAnnel的创世纪块建立成功@H_502_11@
ls *.block
在建立chAnnel 的容器里面,进行下面操作。
CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050@H_502_11@ CORE_PEER_ADDRESS=peer0:7051@H_502_11@ peer chAnnel join@H_502_11@ -b myc1.block@H_502_11@
CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050@H_502_11@ CORE_PEER_ADDRESS=peer1:7051@H_502_11@ peer chAnnel join@H_502_11@ -b myc1.block@H_502_11@
CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050@H_502_11@ CORE_PEER_ADDRESS=peer2:7051@H_502_11@ peer chAnnel join@H_502_11@ -b myc1.block@H_502_11@
$ docker exec -it fabric-peer0 bash
# 部署一个chaincode@H_502_11@
CORE_PEER_ADDRESS=peer2:7051@H_502_11@ CORE_PEER_COMMITTER_LEDGER_ORDERER=fabric-orderer:7050@H_502_11@ peer chaincode install@H_502_11@ -C myc1 -n mycc -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{}' -v 1.1@H_502_11@.0@H_502_11@
# 实例化一个chaincode@H_502_11@
CORE_PEER_ADDRESS=peer2:7051@H_502_11@ CORE_PEER_COMMITTER_LEDGER_ORDERER=fabric-orderer:7050@H_502_11@ peer chaincode instantiate -C myc1 -n mycc -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{"Args"@H_502_11@:["init"@H_502_11@,"a"@H_502_11@,"100"@H_502_11@,"b"@H_502_11@,"200"@H_502_11@]}' -v 1.1@H_502_11@.0@H_502_11@
注意:
* 在docker宿主机器上,使用docker ps 命令可以看到,在第一次指定一个peer(由CORE_PEER_ADDRESS指定),成功install 并且instantiate一个chaincode后,就会产生,并且up起来一个以这个peer和chaincode ,版本号为名字的容器。
* 接下来在其他peer上install这个相同的chaincode的时候,不会产生容器。(这个时候,由于已经有第一个peer进行了这个chaincode的instantiate,再在其他容器上instantiate 就会出错的,错误信息是chaincode已经存在)
* 当指定peer进行业务操作的时候,就会产生,并且up起来一个以这个指定的peer和chaincode ,版本号为名字的容器。
docker ps
dev@H_674_64@-peer0@H_502_11@@H_674_64@-mycc@H_502_11@-@H_502_11@1.1@H_502_11@.0@H_502_11@
部署完成后,等待几秒,或者查看log。确定部署完成,然后进行查询
CORE_PEER_ADDRESS=peer0:7051@H_502_11@ CORE_PEER_COMMITTER_LEDGER_ORDERER=fabric-orderer:7050@H_502_11@ peer chaincode query -C myc1 -n mycc -c '{"Args"@H_502_11@:["query"@H_502_11@,"a"@H_502_11@]}'
#返回结果是:@H_502_11@
Query Result: 100@H_502_11@
2017@H_502_11@-03@H_502_11@-15@H_502_11@ 08@H_502_11@:05@H_502_11@:17.429@H_502_11@ UTC [main] main -> INFO 002@H_502_11@ ExiTing.....
#或者 @H_502_11@
CORE_PEER_ADDRESS=peer0:7051@H_502_11@ CORE_PEER_COMMITTER_LEDGER_ORDERER=fabric-orderer:7050@H_502_11@ peer chaincode invoke -C myc1 -n mycc -c '{"Args"@H_502_11@:["invoke"@H_502_11@,"10"@H_502_11@]}' peer chaincode invoke -n mycc -c '{"Args"@H_502_11@:["query"@H_502_11@,"a"@H_502_11@]}'
返回结果是:
[chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001@H_502_11@ Invoke result@H_502_11@: version@H_502_11@:1@H_502_11@ response:<status:200@H_502_11@ message:"OK"@H_502_11@ payload:"100"@H_502_11@ > payload:"\n \... [main] main -> INFO 002 ExiTing..... @H_502_11@
CORE_PEER_ADDRESS=peer0:7051@H_502_11@ CORE_PEER_COMMITTER_LEDGER_ORDERER=fabric-orderer:7050@H_502_11@ peer chaincode invoke -C myc1 -n mycc -c '{"Args"@H_502_11@:["invoke"@H_502_11@,"10"@H_502_11@]}'@H_502_11@@H_502_11@
正确的返回内容:
[chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001@H_502_11@ Invoke result: version:1@H_502_11@ response:<status:200@H_502_11@ message:"OK"@H_502_11@ > payload:...@H_502_11@
[main] main -> INFO 002@H_502_11@ ExiTing.....
注意最终结果状态正常 response:<status:200@H_502_11@ message:"OK"@H_502_11@ >
CORE_PEER_ADDRESS@H_502_11@=peer0:7051@H_502_11@ peer chaincode query@H_502_11@ -C@H_502_11@ myc1 -n mycc -c '{"Args"@H_502_11@:["query"@H_502_11@,"a"@H_502_11@]}@H_502_11@'
返回的正确内容,b账号里面多了转账的金额。
$ cd ~/docker@H_674_64@-compose@H_502_11@@H_674_64@-files@H_502_11@/hyperledger/1.0@H_502_11@
$ docker@H_674_64@-compose@H_502_11@ logs @H_674_64@-f@H_502_11@
hyperledger Fabric使用的 docker-compose.yml
Docker Compose 配置文件 yaml 参数简单介绍
http://debugo.com/docker-compose/
使用HyperLedger github上的样例
curl -o docker-compose.yml https:@H_502_11@//raw.githubusercontent.com/hyperledger@H_502_11@/fabric/master@H_502_11@/examples/sdk@H_502_11@/node/docker@H_502_11@-compose.yml
下载membersrvc和peer 的Docker image
$ @H_502_11@docker pull hyperledger/fabric-@H_721_103@membersrvc:@H_502_11@latest
$ @H_502_11@docker pull hyperledger/fabric-peer:@H_502_11@latest
#查看images 信息@H_502_11@
$ @H_502_11@docker images
$ @H_502_11@cd ~
$ @H_502_11@curl -o Dockerfile@H_502_11@ https:@H_502_11@//raw.githubusercontent.com/hyperledger@H_502_11@/fabric/master@H_502_11@/examples/sdk@H_502_11@/node/@H_502_11@Dockerfile@H_502_11@
docker build @H_674_64@-t@H_502_11@ hyperledger/fabric@H_674_64@-starter@H_502_11@@H_674_64@-kit@H_502_11@:latest .@H_502_11@
docker images
docker@H_674_64@-compose@H_502_11@ @H_674_64@-f@H_502_11@ docker@H_674_64@-compose@H_502_11@.@H_502_11@yml up @H_674_64@-d@H_502_11@
部署为开发模式,直接进入peer
docker exec@H_502_11@ -it peer bash
官方Image默认打开权限,需要先登陆用户,使用内置用户登陆。
peer network login jim
# 缺省密码 6avZQLwcUe9b@H_502_11@
POST http://127.0.0.1:7050/@H_502_11@
registrar
{
"@H_674_64@enrollId@H_502_11@": "jim"@H_502_11@@H_502_11@,"@H_674_64@enrollSecret@H_502_11@": "6avZQLwcUe9b"@H_502_11@ @H_502_11@}
Note: 为了使用REST,你需要在docker-compose.yml文件的peer部分中加入端口映射:
$ @H_502_11@vim docker-compose.yml
#增加端口映射在peer部分@H_502_11@
ports:@H_502_11@
- "0.0.0.0:7050:7050"@H_502_11@
#退出 vim@H_502_11@
#建议删除原有的3个container@H_502_11@
$ @H_502_11@docker rm -f peer starter membersrvc
#然后重新生成容器@H_502_11@
$ @H_502_11@docker-compose -f docker-compose.yml up -d
# 查看进程@H_502_11@
$ @H_502_11@docker-compose ps
# 如果有错误 , 查看docker 日志@H_502_11@
$ @H_502_11@docker-compose logs
# 进入 peer容器@H_502_11@
$docker exec -it@H_502_11@ peer bash
#部署一个命名为 mycc的chaincode@H_502_11@
$CORE_PEER_ADDRESS=127.0@H_502_11@.0@H_502_11@.1@H_502_11@:7051@H_502_11@
$peer chaincode deploy -n mycc -c '{"Function"@H_502_11@: "init"@H_502_11@,"Args"@H_502_11@: ["roaR_312_11845@er"@H_502_11@,"she"@H_502_11@,"5000"@H_502_11@]}' -u jim
注意: 在这里 只能用 @H_229_938@mycc 作为 chiancode的名字。在0.6.1 preview版本中如果使用 hyperledger-demo-1 这类的名字,会抛出 sending init Failed(handler not found for chaincode roaR_312_11845@er-test) 错误!
Note: 部署返回成功仅仅意味着提交的指令已被接收,不代表指令执行完成。如果要查看是否部署成功,需要新开一个终端,在docker 服务器上(不是当前容器),运行查看日志命令,确保没有错误信息。
$ docker logs @H_489_946@-f@H_502_11@ peer
#或者@H_502_11@
$ docker-compse logs @H_489_946@-f@H_502_11@ peer
POST http://192.168.2.10:7050/chaincode@H_502_11@
request 参数
{
"@H_674_64@jsonrpc@H_502_11@": "2.0"@H_502_11@@H_502_11@,"@H_674_64@method@H_502_11@": "deploy"@H_502_11@@H_502_11@,"@H_674_64@params@H_502_11@": { "@H_674_64@type@H_502_11@": 1@H_502_11@@H_502_11@,"@H_674_64@chaincodEID@H_502_11@": { "@H_674_64@name@H_502_11@": "mycc"@H_502_11@ @H_502_11@}@H_502_11@,"@H_674_64@ctorMsg@H_502_11@": { "@H_674_64@function@H_502_11@": "init"@H_502_11@@H_502_11@,"@H_674_64@args@H_502_11@": ["roaR_312_11845@er"@H_502_11@,"5000"@H_502_11@] @H_502_11@}@H_502_11@,"@H_674_64@secureContext@H_502_11@": "jim"@H_502_11@ @H_502_11@}@H_502_11@,"@H_674_64@id@H_502_11@": 1@H_502_11@ @H_502_11@}
peer chaincode query@H_502_11@ -u jim -n mycc -c '{"Function"@H_502_11@: "query"@H_502_11@,"Args"@H_502_11@: ["roaR_312_11845@er"@H_502_11@]}@H_502_11@'
返回结果应该是
Query@H_502_11@ Result@H_502_11@: 100
06:41@H_502_11@:08@H_502_11@.619@H_502_11@ [main]@H_502_11@ @H_824_1050@main@H_502_11@ -@H_502_11@> INFO@H_502_11@ 004 ExiTing@H_502_11@.....
http://192.168.2.10:7050/chaincode@H_502_11@
request参数
{
"@H_674_64@jsonrpc@H_502_11@": "2.0"@H_502_11@@H_502_11@,"@H_674_64@method@H_502_11@": "query"@H_502_11@@H_502_11@,"@H_674_64@ctorMsg@H_502_11@": { "@H_674_64@function@H_502_11@": "query"@H_502_11@@H_502_11@,"@H_674_64@args@H_502_11@": ["roaR_312_11845@er"@H_502_11@] @H_502_11@}@H_502_11@,"@H_674_64@id@H_502_11@": 5@H_502_11@ @H_502_11@}
返回结果是:
{
"@H_674_64@jsonrpc@H_502_11@": "2.0"@H_502_11@@H_502_11@,"@H_674_64@result@H_502_11@": { "@H_674_64@status@H_502_11@": "OK"@H_502_11@@H_502_11@,"@H_674_64@message@H_502_11@": "100"@H_502_11@ @H_502_11@}@H_502_11@,"@H_674_64@id@H_502_11@": 5@H_502_11@ @H_502_11@}
peer chaincode invoke -n mycc -u jim -c '{"@H_502_11@Function": "@H_502_11@invoke","@H_502_11@Args": ["@H_502_11@roaR_312_11845@er","@H_502_11@she","@H_502_11@10@H_502_11@"]}'@H_502_11@
POST http://192.168.2.10:7050/chaincode@H_502_11@
{
"@H_674_64@jsonrpc@H_502_11@": "2.0"@H_502_11@@H_502_11@,"@H_674_64@method@H_502_11@": "invoke"@H_502_11@@H_502_11@,"@H_674_64@ctorMsg@H_502_11@": { "@H_674_64@function@H_502_11@": "invoke"@H_502_11@@H_502_11@,"5"@H_502_11@] @H_502_11@}@H_502_11@,"@H_674_64@id@H_502_11@": 3@H_502_11@ @H_502_11@}
GET@H_502_11@
http:@H_502_11@//192.168.2.10:7050/chain@H_502_11@/blocks/@H_502_11@1@H_502_11@
http:@H_502_11@//192.168.2.10:7050/chain@H_502_11@/blocks/@H_502_11@2@H_502_11@
......
以上是大佬教程为你收集整理的在CentOS 7.2下安装Hyperledger fabric 1.0.0 preview版本的solo模式全部内容,希望文章能够帮你解决在CentOS 7.2下安装Hyperledger fabric 1.0.0 preview版本的solo模式所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。