CentOS   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在CentOS 7.2下安装Hyperledger fabric 1.0.0 preview版本的solo模式大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

在CentOS 7.2下安装Hyperledger fabric 1.0.0 preview版本的solo模式 一. 安装centos和docker 等组件 A. 安装centos x86-64 Minimal(IP:192.168.2.10) 内核版本需要3.10 以上。centos 7 完全支持. 查看内核信息 $ uname -a Linux localhost.localdomain 3.

在CentOS 7.2下安装Hyperledger fabric 1.0.0 preview版本的solo模式

一. 安装centos和docker 等组件

A. 安装centos x86-64 Minimal(IP:192.168.2.10)

内核版本需要3.10 以上。centos 7 完全支持.

@H_618_23@查看内核信息 $ 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

B. 安装docker, 版本1.12.5(略过)

@H_618_23@$ @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@

C. 安装python-pip(可选)

  • 安装epel扩展
@H_618_23@$ yum -y@H_502_11@ install epel-release@H_502_11@
  • 然后安装python-pip
@H_618_23@$ @H_502_11@yum -y install python-pip # 更新到最新版本@H_502_11@ $ @H_502_11@pip install --upgrade pip
  • 确认安装成功和确定版本
@H_618_23@$ @H_502_11@pip -V@H_502_11@

d. 安装docker-compose

docker-compose是docker集群管理工具,可自定义一键启动多个docker container。
官网二进制发布:
https://github.com/docker/compose/releases
安装手册见网站 :
https://docs.docker.com/compose/install/
安装命令如下:

@H_618_23@$ @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 安装

@H_618_23@$ pip install -U@H_502_11@ docker-compose@H_502_11@

二. 搭建Fabric 1.0.0 演示环境( solo共识方式,带自定义chAnnel)

杨宝华的项目主页
https://github.com/yeasy/blockchain_guide/blob/master/hyperledger/1.0.md

A.下载所需组件

1. 安装操作系统和docker (略)

2. 安装python pip(略)

3. 安装 docker-compose 最新发布版本

@H_618_23@pip install@H_502_11@ docker-compose

4.获取docker的 image,并更新镜像别名。

注意:这里一定要用tag来更新别名,要和docker-compose.yml 中的匹配
2017年02月16日,杨宝华mail确定:

@H_618_23@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命令如下:

@H_618_23@以root用户运行以下命令 ARCH=@H_502_11@x86_64 BASE_VERSION=@H_502_11@1.0@H_502_11@.0@H_502_11@-preview@H_502_11@ PROjeCT_VERSION=@H_502_11@1.0@H_502_11@.0@H_502_11@-preview@H_502_11@ IMG_VERSION=@H_502_11@0.8@H_502_11@.4@H_502_11@ docker pull yeasy/hyperledger-fabric@H_502_11@-base@H_502_11@:$IMG_VERSION@H_502_11@ \@H_502_11@ &&@H_502_11@ docker pull yeasy/hyperledger-fabric@H_502_11@-peer@H_502_11@:$IMG_VERSION@H_502_11@ \@H_502_11@ &&@H_502_11@ docker pull yeasy/hyperledger-fabric@H_502_11@-orderer@H_502_11@:$IMG_VERSION@H_502_11@ \@H_502_11@ &&@H_502_11@ docker pull yeasy/hyperledger-fabric@H_502_11@-ca@H_502_11@:$IMG_VERSION@H_502_11@ \@H_502_11@ &&@H_502_11@ docker pull yeasy/blockchain-explorer@H_502_11@:latest \@H_502_11@ &&@H_502_11@ docker tag@H_502_11@ yeasy/hyperledger-fabric@H_502_11@-peer@H_502_11@:$IMG_VERSION@H_502_11@ hyperledger/fabric-peer@H_502_11@ \@H_502_11@ &&@H_502_11@ docker tag@H_502_11@ yeasy/hyperledger-fabric@H_502_11@-orderer@H_502_11@:$IMG_VERSION@H_502_11@ hyperledger/fabric-orderer@H_502_11@ \@H_502_11@ &&@H_502_11@ docker tag@H_502_11@ yeasy/hyperledger-fabric@H_502_11@-ca@H_502_11@:$IMG_VERSION@H_502_11@ hyperledger/fabric-ca@H_502_11@ \@H_502_11@ &&@H_502_11@ docker tag@H_502_11@ yeasy/hyperledger-fabric@H_502_11@-base@H_502_11@:$IMG_VERSION@H_502_11@ hyperledger/fabric-baseimage@H_502_11@ \@H_502_11@ &&@H_502_11@ docker tag@H_502_11@ yeasy/hyperledger-fabric@H_502_11@-base@H_502_11@:$IMG_VERSION@H_502_11@ hyperledger/fabric-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-fabric@H_502_11@-base@H_502_11@:$IMG_VERSION@H_502_11@ hyperledger/fabric-baSEOs@H_502_11@:$ARCH@H_502_11@-@H_502_11@$BASE_VERSION@H_502_11@

5.设置网络

@H_618_23@$ @H_502_11@docker network create fabric_noops $ @H_502_11@docker network create fabric_pbft

6.启动 Fabric 1.0

a. 下载 Compose 模板文件
@H_618_23@$ @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@
b. 进入hyperledger 1.0 模板目录
@H_618_23@$ cd /root/docker-compose@H_502_11@-files@H_502_11@/hyperledger/1.0@H_502_11@
c. 查看包括若干模板文件功能如下。

peers.yml: 包含 peer 节点的服务模板。
docker-compose.yml: 启动 1 个 最小化的环境,包括 1 个 peer 节点、1 个 Orderer 节点、1 个 CA 节点。

d. 修改成3个peer的方式。

docker-compose.yml 里面增加如下代码

@H_618_23@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@
e. 部署和启动 Fabric 1.0
@H_618_23@$ docker-compose@H_502_11@ -f@H_502_11@ docker-compose@H_502_11@.@H_502_11@yml up -d@H_502_11@

7. 查看容器信息

应该有5个启动的容器,分别是
    1. fabric-peer0
    2. fabric-peer1
    3. fabric-peer2
    4. fabric-orderer
    5. fabric-ca
@H_618_23@$ @H_502_11@docker ps # 或者@H_502_11@ $ @H_502_11@docker-compose ps

8. 建立一个chAnnel 名字是myc1

进入任何一个peer容器内均可

@H_618_23@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

9. 把相应的peer(0,1,2)节点加入myc1

在建立chAnnel 的容器里面,进行下面操作。

@H_618_23@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@

10. 部署和实例化chaincode

  • 有几个peer需要运行这个chaincode,那就需要在这几个peer上都peer chaincode install。
  • 但是只需要在任意一个peer上peer chaincode instantiate 一次。
  • 如果在其他peer上再做 instantiate ,就会出现错误
  • 修改CORE_PEER_ADDRESS参数值即可指定在哪个peer上 install 和 instantiate。
@H_618_23@$ 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 ,版本号为名字的容器。

@H_618_23@docker ps dev-peer0@H_502_11@-mycc@H_502_11@-@H_502_11@1.1@H_502_11@.0@H_502_11@

7. 查询chaincode

部署完成后,等待几秒,或者查看log。确定部署完成,然后进行查询

@H_618_23@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@
  1. 调用chaincode
    模拟转账业务
@H_618_23@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@

正确的返回内容:

@H_618_23@[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@ >

过几秒后再调用查询业务,确认转账成功

@H_618_23@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账号里面多了转账的金额。

  1. 查看日志
    在docker server上执行如下命令:
@H_618_23@$ cd ~/docker-compose@H_502_11@-files@H_502_11@/hyperledger/1.0@H_502_11@ $ docker-compose@H_502_11@ logs -f@H_502_11@

三. 搭建Fabric 0.6 演示环境(noops 模式)

A.下载组件

  1. hyperledger Fabric使用的 docker-compose.yml
    Docker Compose 配置文件 yaml 参数简单介绍
    http://debugo.com/docker-compose/
    使用HyperLedger github上的样例

    @H_618_23@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
  2. 下载membersrvc和peer 的Docker image

    @H_618_23@$ @H_502_11@docker pull hyperledger/fabric-@H_533_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

B. build客户端镜像

1. 下载Fabric样例Dockerfile

@H_618_23@$ @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@

2. build image

@H_618_23@docker build -t@H_502_11@ hyperledger/fabric-starter@H_502_11@-kit@H_502_11@:latest .@H_502_11@

3. 检查images是否正确构建

@H_618_23@docker images

C. 运行Fabric开发环境

1. 启动Cluster

@H_618_23@docker-compose@H_502_11@ -f@H_502_11@ docker-compose@H_502_11@.@H_502_11@yml up -d@H_502_11@

2. 进入Docker

部署为开发模式,直接进入peer

@H_618_23@docker exec@H_502_11@ -it peer bash

3. 登陆

官方Image认打开权限,需要先登陆用户,使用内置用户登陆。

  • CLI
@H_618_23@peer network login jim # 缺省密码 6avZQLwcUe9b@H_502_11@
  • REST API
    也可以使用REST API方式:
@H_618_23@POST http://127.0.0.1:7050/@H_502_11@ registrar @H_618_23@{ "enrollId@H_502_11@": "jim"@H_502_11@@H_502_11@,"enrollSecret@H_502_11@": "6avZQLwcUe9b"@H_502_11@ @H_502_11@}

Note: 为了使用REST,你需要在docker-compose.yml文件的peer部分中加入端口映射:

@H_618_23@$ @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

4. 部署Chaincode

  • CLI
@H_618_23@# 进入 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_450_11845@er"@H_502_11@,"she"@H_502_11@,"5000"@H_502_11@]}' -u jim

注意: 在这里 只能用 @H_960_938@mycc 作为 chiancode的名字。在0.6.1 preview版本中如果使用 hyperledger-demo-1 这类的名字,会抛出 sending init Failed(handler not found for chaincode roaR_450_11845@er-test) 错误

Note: 部署返回成功仅仅意味着提交的指令已被接收,不代表指令执行完成。如果要查看是否部署成功,需要新开一个终端,在docker 服务器上(不是当前容器),运行查看日志命令,确保没有错误信息。

@H_618_23@$ docker logs -f@H_502_11@ peer #或者@H_502_11@ $ docker-compse logs -f@H_502_11@ peer
  • REST API
@H_618_23@POST http://192.168.2.10:7050/chaincode@H_502_11@

request 参数

@H_618_23@{ "jsonrpc@H_502_11@": "2.0"@H_502_11@@H_502_11@,"@H_430_64@method@H_502_11@": "deploy"@H_502_11@@H_502_11@,"params@H_502_11@": { "type@H_502_11@": 1@H_502_11@@H_502_11@,"chaincodEID@H_502_11@": { "name@H_502_11@": "mycc"@H_502_11@ @H_502_11@}@H_502_11@,"ctorMsg@H_502_11@": { "function@H_502_11@": "init"@H_502_11@@H_502_11@,"args@H_502_11@": ["roaR_450_11845@er"@H_502_11@,"5000"@H_502_11@] @H_502_11@}@H_502_11@,"secureContext@H_502_11@": "jim"@H_502_11@ @H_502_11@}@H_502_11@,"id@H_502_11@": 1@H_502_11@ @H_502_11@} @H_944_1027@5. 查询
  • CLI
@H_618_23@peer chaincode query@H_502_11@ -u jim -n mycc -c '{"Function"@H_502_11@: "query"@H_502_11@,"Args"@H_502_11@: ["roaR_450_11845@er"@H_502_11@]}@H_502_11@'

返回结果应该是

@H_618_23@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_88_1050@main@H_502_11@ -@H_502_11@> INFO@H_502_11@ 004 ExiTing@H_502_11@.....
  • REST API
@H_618_23@http://192.168.2.10:7050/chaincode@H_502_11@

request参数

@H_618_23@{ "jsonrpc@H_502_11@": "2.0"@H_502_11@@H_502_11@,"@H_430_64@method@H_502_11@": "query"@H_502_11@@H_502_11@,"ctorMsg@H_502_11@": { "function@H_502_11@": "query"@H_502_11@@H_502_11@,"args@H_502_11@": ["roaR_450_11845@er"@H_502_11@] @H_502_11@}@H_502_11@,"id@H_502_11@": 5@H_502_11@ @H_502_11@}

返回结果是:

@H_618_23@{ "jsonrpc@H_502_11@": "2.0"@H_502_11@@H_502_11@,"result@H_502_11@": { "status@H_502_11@": "OK"@H_502_11@@H_502_11@,"message@H_502_11@": "100"@H_502_11@ @H_502_11@}@H_502_11@,"id@H_502_11@": 5@H_502_11@ @H_502_11@}

6. 转账

  • CLI
@H_618_23@peer chaincode invoke -n mycc -u jim -c '{"@H_502_11@Function": "@H_502_11@invoke","@H_502_11@Args": ["@H_502_11@roaR_450_11845@er","@H_502_11@she","@H_502_11@10@H_502_11@"]}'@H_502_11@
  • REST API
@H_618_23@POST http://192.168.2.10:7050/chaincode@H_502_11@ @H_618_23@{ "jsonrpc@H_502_11@": "2.0"@H_502_11@@H_502_11@,"@H_430_64@method@H_502_11@": "invoke"@H_502_11@@H_502_11@,"ctorMsg@H_502_11@": { "function@H_502_11@": "invoke"@H_502_11@@H_502_11@,"5"@H_502_11@] @H_502_11@}@H_502_11@,"id@H_502_11@": 3@H_502_11@ @H_502_11@}

7. 获取某个区块的信息

  • REST API
@H_618_23@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,请注明来意。