Fabric(二)部署Fabric2.2.0

由于项目需要,将服务器上的Fabric1.4改为Fabric2.0
已经配置好go、docker、node等环境,详情见上一章 Fabric(一)部署Fabric 1.4
感谢博客:https://blog.csdn.net/hnclsl/article/details/105542864
官方文档参考 https://hyperledger-fabric.readthedocs.io/en/latest/install.html

目录

    • 一、更新go
      • 1、查看go版本
      • 2、官网下载相应安装包后上传服务器
      • 3、对go进行删除和重装
    • 二、前期准备
      • 1、码云拉取github仓库
      • 2、配置阿里云镜像加速器
    • 三、正式安装
      • 1、拉取仓库
      • 2、移动config文件夹(移动配置文件)
      • 3、生成bin文件夹(编译生成二进制文件)
      • 4、运行test-work网络进行测试
      • 5、建立通道
      • 6、在通道上启动链码
      • 7、与网络交互
      • 8、关闭网络
      • 9、与证书颁发机构建立网络

一、更新go

Fabric2.x需要go1.13+,所以重新安装go为1.14

1、查看go版本

go version

查看结果
在这里插入图片描述

2、官网下载相应安装包后上传服务器

https://studygolang.com/dl
Fabric(二)部署Fabric2.2.0_第1张图片

3、对go进行删除和重装

https://www.jianshu.com/p/662a8411c696

二、前期准备

1、码云拉取github仓库

由于github上下载速度实在感人,于是在拉取仓库到码云
https://gitee.com/jessyl/fabric
https://gitee.com/jessyl/fabric-samples

2、配置阿里云镜像加速器

因为在之后的镜像拉取中,有很多镜像是国外源,所以速度很慢,故配置阿里云镜像加速器
参考博客:
(1)aliyun官方教程
(2)Docker 配置国内源加速镜像下载
(3)利用阿里云镜像加速器对docker镜像源加速

三、正式安装

1、拉取仓库

(1)进入/root/go/src/github.com/hyperledger 文件夹拉取fabric源码

git clone https://gitee.com/jessyl/fabric.git

拉取之后默认为2.2(最新版本),所以如果需要其他版本的小伙伴可以

 git checkout fabric2.1

(2)进入fabric文件夹,拉取fabric-samples文件夹

git clone https://gitee.com/jessyl/fabric-samples.git

2、移动config文件夹(移动配置文件)

(1)进入fabric文件夹,会发现sampleconfig,其实就是fabric-samples的config文件夹
Fabric(二)部署Fabric2.2.0_第2张图片
(2)将sampleconfig文件夹移动到fabric-samples中,并且重命名为config

cp -r sampleconfig /root/go/src/github.com/hyperledger/fabric/fabric-samples
cd fabric-samples
mv sampleconfig config

3、生成bin文件夹(编译生成二进制文件)

(1)回到fabric目录下,进行源码编译,请耐心等待很长一段时间

make all

(2)在fabric文件夹下会生成build文件夹,里面含有bin和images
在这里插入图片描述

在bin目录中有如下二进制文件:
在这里插入图片描述
(3)将bin目录复制到fabric-sample 文件夹中

cp -r build/bin /root/go/src/github.com/hyperledger/fabric/fabric-samples

(4)设置环境变量
将bin目录和config目录都添加到环境变量中
可以看看 https://blog.csdn.net/weixin_37825371/article/details/90752386

vim /etc/profile

在末尾如下添加
在这里插入图片描述
生效

source /etc/profile

4、运行test-work网络进行测试

根据官网fabric-samples描述,各个文件夹功能如下表
Fabric(二)部署Fabric2.2.0_第3张图片
(1)进入test-work文件夹,启动测试网络
Fabric(二)部署Fabric2.2.0_第4张图片
(2)启动成功
Fabric(二)部署Fabric2.2.0_第5张图片
(3)查看docker

docker ps -a

查看结果
Fabric(二)部署Fabric2.2.0_第6张图片

5、建立通道

(1)使用network.sh脚本在Org1和Org2之间创建频道,并将其对等方加入该频道。
运行以下命令以使用默认名称创建频道mychannel:

./network.sh createChannel

Fabric(二)部署Fabric2.2.0_第7张图片
(2)创建成功
Fabric(二)部署Fabric2.2.0_第8张图片

6、在通道上启动链码

(1)命令

./network.sh deployCC

(2)结果(未报错)
Fabric(二)部署Fabric2.2.0_第9张图片

tips:
如果出现因为访问无法下载
Fabric(二)部署Fabric2.2.0_第10张图片
解决方法:设置go代理
https://www.cnblogs.com/zhangmingcheng/p/12294156.html

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

7、与网络交互

(1)启动测试网络
./network.sh up
./network.sh createChannel
./network.sh deployCC

(2)在test-network目录进行操作,将这些二进制文件添加到CLI路径

export PATH=${PWD}/../bin:${PWD}:$PATH

设置FABRIC_CFG_PATH指向存储库中的core.yaml文件fabric-samples:

export FABRIC_CFG_PATH=$PWD/../config/

(3)设置环境变量,以允许您以peer Org1的形式操作CLI:

# Environment variables for Org1
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:7051

(4)获取已添加到通道分类帐中的汽车的列表

peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'

出现报错
Fabric(二)部署Fabric2.2.0_第11张图片
链码fabcar没有在通道上被成功定义,说明要去fabcar启动
Fabric(二)部署Fabric2.2.0_第12张图片
① 运行启动文件

./startFabric.sh

没有找到fabric-ca-client 二进制文件
Fabric(二)部署Fabric2.2.0_第13张图片
② 去官网查询二进制文件,发现bin文件夹中缺失了client和sever文件
Fabric(二)部署Fabric2.2.0_第14张图片
在这里插入图片描述
解决方法:
1)法一:
参考博客:https://blog.csdn.net/ltt1st/article/details/81456484

  1. 进入/root/go/src/github.com/hyperledger文件夹
cd /root/go/src/github.com/hyperledger
  1. 下载fabric-ca源码
git clone https://gitee.com/jessyl/fabric-ca.git
  1. 编译报错 :go.mod有问题
    在这里插入图片描述
    未能解决 https://www.codercto.com/a/108257.html

2)法二:
直接加入现有的二进制文件
在这里插入图片描述
链接:https://pan.baidu.com/s/1Yk3U_bXhYVBTHUVkzx8qCg
提取码:75b0

③ 进入fabcar文件夹,运行startFabric.sh文件
在这里插入图片描述

./startFabric.sh

还有报错:)
Fabric(二)部署Fabric2.2.0_第15张图片
方法:
{

  1. 删除所有docker镜像,清理环境
docker rmi $(docker images | grep hyperledger)
  1. 修改bootstrap.sh,只重新下载docker镜像
    在这里插入图片描述

}

④ 重新运行startFabric.sh,成功界面:
Fabric(二)部署Fabric2.2.0_第16张图片
此时可以选择javascript,typescript,java,go语言

Next, use the FabCar applications to interact with the deployed FabCar contract.
The FabCar applications are available in multiple programming languages.
Follow the instructions for the programming language of your choice:
Fabric(二)部署Fabric2.2.0_第17张图片
Fabric(二)部署Fabric2.2.0_第18张图片
Fabric(二)部署Fabric2.2.0_第19张图片
Fabric(二)部署Fabric2.2.0_第20张图片
go run fabcar.go:
第一步会生成wallet钱包以及keystore,
第二步提交创建new car的事务
第三步查询并返回car信息
第四步提交更换车主的事务
第五步查询并返回car信息

在这里插入图片描述
⑥ 选择go语言

cd go
go run fabcar.go

运行结果,出现fabcar列表!!!,但是最后一句显示订购者为空,提交事务失败:)
这一部分等我解决:)
Fabric(二)部署Fabric2.2.0_第21张图片
查看docker

docker ps

Fabric(二)部署Fabric2.2.0_第22张图片
让我再康康
Fabric(二)部署Fabric2.2.0_第23张图片
(5)重新进入test-network,首先关闭网络(没有开也运行一下)

./network.sh down

Fabric(二)部署Fabric2.2.0_第24张图片
(6)开启网络

./network.sh up

(7)创建通道

./network.sh createChannel

(8)开启链码

./network.sh deployCC

(9)重新再设置一下环境变量

export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/

在/etc/profile中再设置一下环境变量

# Environment variables for Org1

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:7051

(10)运行以下命令以使用资产初始化分类帐:

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"InitLedger","Args":[]}'

出现-> INFO 001 Chaincode invoke successful. result: status:200则成功
Fabric(二)部署Fabric2.2.0_第25张图片
(11)现在可以从CLI查询分类帐。运行以下命令以获取添加到频道分类帐的资产列表:

peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'

查询结果:
Fabric(二)部署Fabric2.2.0_第26张图片
(12)当网络成员希望转移或更改分类帐上的资产时,会调用链码。通过调用资产转移(基本)链码,使用以下命令更改分类帐上资产的所有者:

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"TransferAsset","Args":["asset6","Christopher"]}'

出现-> INFO 001 Chaincode invoke successful. result: status:200 则成功
Fabric(二)部署Fabric2.2.0_第27张图片
(13)因为资产转移(基本)链码的背书策略要求事务由Org1和Org2签名,所以chaincode invoke命令需要同时针对peer0.org1.example.com和peer0.org2.example.com使用–peeradresses标志。由于为网络启用了TLS,因此该命令还需要使用–tlsRootCertFiles标志为每个对等方引用TLS证书。
调用链代码后,我们可以使用另一个查询来查看调用是如何更改区块链账本上的资产的。因为我们已经查询了Org1节点,所以我们可以借此机会查询在Org2节点上运行的链码。
将以下环境变量设置为Org2操作:
向/etc/profile末尾添加,最后记得source /etc/profile

# Environment variables for Org2

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:9051

如图所示
在这里插入图片描述
(14)此时可以对网络进行查询刚刚的转移信息

peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset6"]}'

查询结果:
在这里插入图片描述

8、关闭网络

./network.sh down

该命令将停止并删除节点和链码容器,删除组织加密材料,并从Docker注册表中删除链码图像。
该命令还从以前的运行中删除通道工件和docker卷,允许运行./network.sh

9、与证书颁发机构建立网络

./network.sh up -ca

发出命令后,可以看到脚本启动了三个CA,网络中的每个组织都有一个CA。
Fabric(二)部署Fabric2.2.0_第28张图片
花时间检查由network.sh在部署CA之后编写脚本生成的日志是值得的。测试网络使用Fabric CA客户端向每个组织的CA注册节点和用户身份。然后,该脚本使用enroll命令为每个标识生成一个MSP文件夹。MSP文件夹包含每个标识的证书和私钥,并在运行CA的组织中建立标识的角色和成员资格。
可以使用以下命令检查Org1 admin用户的MSP文件夹:

tree organizations/peerOrganizations/org1.example.com/users/[email protected]/

Fabric(二)部署Fabric2.2.0_第29张图片
可以在signcerts文件夹中找到admin用户的证书,在keystore文件夹中找到私钥。要了解有关MSP的更多信息,请参阅Membership Service Provider concept topic。
cryptogen和Fabric CA都为organizations文件夹中的每个组织生成加密材料。可以在organizations/fabric-ca目录中找到用于设置网络的命令registerEnroll.sh脚本。要了解有关如何使用Fabric CA部署结构网络的更多信息,请访问Fabric CA operations guide。通过dentity and membership concept topics,您可以了解有关Fabric如何使用PKI的更多信息。

tips
要先安装tree工具

yum -y install tree

你可能感兴趣的:(Fabric)