一、 前期准备
项 | 版本 | 更新或下载URL |
Ubuntu | 16.04 64位 | 略 |
Hyperledger Fabric | 1.0.3 | 依据官方提供的网址: http://hyperledger-fabric.readthedocs.io/en/latest/samples.html |
依赖项(不分先后顺序) | ||
docker | 17.05.0-ce | yes|cp -f ./docker.repo /etc/yum.repos.d/docker.repo sudo apt-get install –y docker-engine systemctl start docker.service
docker.repo内容见下教程 |
docker-compose | 1.9.0 build 2585387 | pip install docker-compose |
go | 1.7.5 | sudo apt-get install –y golang |
python | 2.7.5 | sudo apt-get install –y python |
python-pip | 9.0.1 | sudo apt-get install -y python-pip pip install --upgrade pip backports.ssl_match_hostname |
git | 1.8.3.1 | sudo apt-get install –y git |
nodejs | 6.11.3 | sudo apt-get install –y nodejs |
npm | 3.10.10 | nodejs已集成 |
说明:
1. 相关工具的安装均为64位,版本不同可能将导致无法正常启动IDE或无法完成某些配置,请务必注意版本信息。
2. 后续安装过程中有部分工具,仅仅需要解压即可完成安装,建议将解压出的问题统一安装至相同目录便于管理。
二、 配置步骤
环境搭建详见我个人博客:https://blog.csdn.net/mimica/article/details/78412038
1. 网络拓扑
略
2. 准备自己手动生成相关配置文件
添加bootstrap-*.sh下载的签名、生成证书等工具——configtxgen、configtxlator、cryptogen、orderer、peer
方法一:添加路径至环境变量,永久生效。环境变量路径:
vim/etc/environment
方法二:直接拷贝工具至/usr/bin,类似方法一,需要root权限(使用切换至root)。命令:
sudo yes|cp –f [你的fabric例子代码存放路径]/fabric-samples/script/bin/configtxlator /usr/bin/
sudo yes|cp –f [你的fabric例子代码存放路径]/fabric-samples/script/bin/configtxgen /usr/bin/
sudo yes|cp –f [你的fabric例子代码存放路径]/fabric-samples/script/bin/cryptogen /usr/bin/
sudo yes|cp –f [你的fabric例子代码存放路径]/fabric-samples/script/bin/orderer /usr/bin/
sudo yes|cp –f [你的fabric例子代码存放路径]/fabric-samples/script/bin/peer /usr/bin/
添加文件的可执行权限
chmod –R a+x configtxlator configtxgen cryptogen orderer peer
方法三:使用官方提供的源码重新编译生成工具,命令:
文件所在:~/go/src/github.com/hyperledger/fabric
执行命令:
make cryptogen
make configtxgen
make configtxlator
2.1. 生成组织关系和身份证书
通过以下命令可以为Fabric网络生成指定拓扑结构的组织和身份文件,并存放到crypto-config目录
命令:
cryptogen generate --config=./crypto-config.yaml --output ./crypto-config
通过crypto-config.yaml配置文件生成组织关系和身份证书,执行成功结果如下:
通过以下命令可查看crypto-config目录结构,命令:
tree –L 4 crypto-config
2.2. 生成Ordering服务启动初始区块
本地使用简单solo模式,生产环境请使用kafka集群服务。
1) 生成Ordering服务系统通道的初始区块文件
FABRIC_CFG_PATH=. configtxgen -profile TwoOrgsOrdererGenesis –outputBlock ./orderer.genesis.block
成功生成Ordering服务初始区块,如下所示:
说明:
非solo模式下,所生成的orderer.genesis.block需要复制到Orderer节点上(与Orderer配置中ORDERER_GENERAL_GENESISFILE指定的文件路径一致,默认路径为:/etc/hyperledger/fabric路径下),在启动Ordering服务时进行使用。
2.3. 生成新建应用通道的配置交易文件
新建应用通道是,需要事先准备好配置交易文件,包括属于该通道的组织结构信息。这些信息会写入该应用通道的初始区块中。而且生成的配置交易信息文件会在后续步骤被客户端使用,因此可以放在客户端节点上。
1) 使用configtx.yaml配置文件中的TwoOrgsChannel模板指定Org1和Org2都属于随后新建的应用通道。
执行命令:
CHANNEL_NAME=businesschannel
FABRIC_CFG_PATH=. configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./businesschannel.tx -channelID ${CHANNEL_NAME}
成功新建应用通道的配置交易文件,如下所示:
2.4. 生成锚节点配置更新文件
锚节点配置更新文件可以用来对组织的锚节点进行配置,但需要分别指定对应的组织名称。
具体生成步骤:
1) 生成组织1:Org1MSP
FABRIC_CFG_PATH=. configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./Org1MSPanchors.tx -channelID ${CHANNEL_NAME} -asOrg Org1MSP
2) 生成组织2:Org2MSP
FABRIC_CFG_PATH=. configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./Org2MSPanchors.tx -channelID ${CHANNEL_NAME} -asOrg Org2MSP
成功生成锚节点配置更新文件,如下所示:
说明:
1) 所生成的锚节点配置更新文件仍会在后续步骤被客户端使用,因此也可以放在客户端节点上。
2) 所有用于启动的配置文件生成并部署到对应节点后,可以进行服务的启动操作。
a) 启动Order节点
b) 启动Peer节点
3. 启动Orderer节点
检查启动节点的所有配置是否就绪:
1) 在/etc/hyperledger/fabric下放置有编写好的orderer.yaml。
该文件可参考官方sampleconfig/orderer.yaml文件编写。(具体yaml文件语法请自行搜索了解)
2) 在/etc/hyperledger/fabric下放置生成的msp、tls文件目录。
3) 在/etc/hyperledger/fabric下放置初始区块文件orderer.genesis.block。
注:请自行拷贝相关文件至:/etc/hyperledger/fabric下,以便启动orderer节点。
Orderer节点的默认配置文件中指定简单Orderer节点功能。通常来说,在使用时需依据需求对一些关键配置进行指定。
环境变量配置入口:to be add
启动本地Orderer节点:
orderer start
4. 启动Peer节点
5. 操作网络
6. 基于容器方式
三、 FAQ
1. 使用cryptogen无法生成文件
症状:
可能原因:
1) 与操作版本不对应
2) 文件损坏
3) 无可执行权限
解决方法:
1) 重新下载对应版本
2) 赋予可执行权限
重新下载工具(configtxgen、configtxlator、cryptogen):
2. 生成Ordering服务系统通道的初始文件失败
症状:
原因:
未确认FABRIC_CFG_PATH该变量路径,可预先设置该路径为当前路径。
解决方法:
在控制台执行以下命令:
FABRIC_CFG_PATH=.
解决后:
额外说明:无
3. orderer start启动失败
症状:
原因:
解决方法:
相关命令:
解决后:
额外说明:
4. 注释compose-compose-cli.yaml的script.sh后通过命令行方式手动启动fabric网络失败
启动命令:
CHANNEL_NAME=businesschannel TIMEOUT=300 docker-compose –f docker-compose-cli.yaml up -d
原因:
docker守护进程启动时无法正确选择sock文件的URL位置。
解决方法:
将docker服务添加自系统自启动,重启Ubuntu即可。
相关命令:
1. 切换至root用户:su
2. 设置docker为开机自启动:systemctl enable docker
3. 未马上手动重启服务器的情况下,手动启动docker服务:
systemctl start docker
systemctl restart docker
4. 退出root后,查看docker容器启动情况:sudo docker ps
解决后:
额外说明:
5. 连接peer节点
原因:
依据上图提示得知连接orderer.example.com:7050错误,具体的错误描述为:认证握手失败,x509证书签名未被授权。
解决方法:
给证书签名
相关命令:
解决后:
额外说明:
6. 进入docker-compose-cli.yaml配置文件指定的cli容器无法生成通道的创世区块
原因:
存在同名的channel,因为同样的channel已经在之前被建立,命名冲突。
解决方法:
移除docker,重新启动。
相关命令:
1) 删除一个指定容器:sudo docker rm [container id]
2) 强制删除一个指定容器:sudo docker rm –f [container id]
3) 强制删除全部容器:sudo docker rm –f $(sudo docker ps -aq)
解决后:
生成通道的创世区块:mychannel.block
额外说明:
1) 检查是否已经创建同名channel;
2) 清理之前的搭建环境,如果是在虚拟机中搭建或创建快照,建议重新恢复至快照状态再重新下载容器,按步骤逐一测试。