之前使用过脚本的方式启动了fabric的测试网络,但是这个脚本封装的实在太好了,一行命令之后啥都看不出来,对于我这样的初学者来说感觉帮助不是特别大,所以我决定把这个脚本串行化的分析一遍,来真正看出整个网络的启动过程。
本文假设当前所在目录为test-network,使用fabric版本为2.3.0,并且和network.sh脚本默认情况下一样不使用预先定义的CA证书。
1.创建加密证书材料
创建org1、org2和org3所需的ca证书,这里会用到organizations/cryptogen下的yaml文件,以crypto-config-org1.yml为例:
# 定义组织管理的所有peer节点
PeerOrgs:
# 节点名称
- Name: Org1
# 节点域名
Domain: org1.example.com
# 是否使用NodeOUs(更细粒度的MSP,可以理解为一个公司的不同部门)
EnableNodeOUs: true
# 这里省略了一段Spec配置,这些配置用于明确的指明每个peer节点的主机名等信息,也可以使用Template模板配置去自动给主机命名
# 利用模板方式配置产生多少个peer节点,并按照某种规则进行命名
Template:
# 要产生的peer节点的数量
Count: 1
# 每个peer的地址
SANS:
- localhost
# 起始序号,默认是0,也就是说对于节点的程序化命名中,第一个节点会是peer{start}
# Start: 5
# 主机名的默认规则,前缀加序号,前缀应该是Org1了。
# Hostname: {
{.Prefix}}{
{.Index}} # default
# 除了管理员之外的用户数量
Users:
Count: 1
然后利用如下的三条命令创建组织所需要的证书等
cryptogen generate --config=./organizations/cryptogen/crypto-config-org1.yaml --output="organizations"
cryptogen generate --config=./organizations/cryptogen/crypto-config-org2.yaml --output="organizations"
cryptogen generate --config=./organizations/cryptogen/crypto-config-orderer.yaml --output="organizations"
执行完成之后在organizations下会生成peerOrganizations和ordererOrganizations两个文件夹,里面分别存储了peer和order生成所需要的材料。
2.CCP文件创建
接下来用ccp-template.yaml和ccp-template.json这两个模板文件来创建CCP文件,这两个文件会分别被保存在organizations/peerOrganizations/org1.example.com和organizations/peerOrganizations/org2.example.com下。
从内容上来看这些文件描述的应该是各peer连接时可能会用到的端口、SSL证书等信息。
执行时只需要调用organizations下的ccp-generate.sh即可完成该步骤。
./organizations/ccp-generate.sh
3.启动网络
这里使用docker-compose的方式来启动用到的四个容器,容器的描述文件为docker/docker-compose-test-net.yaml
。通过该文件可以看出网络包含四个服务,一个orderer,两个peer和一个cli,并让他们共同连接到名为test的网络。其中cli应该是用于和org1和org2的peer进行通讯的,它依赖于peer0.org1.example.com和peer0.org2.example.com镜像。使用如下命令启动网络:
export DOCKER_SOCK=/var/run/docker.sock # 不加这句可能会报错,我找不到在哪给这个环境变量赋值的,在docker-compose-test-net.yaml里面DOCKER_SOCK是作为一个环境变量使用的
docker-compose -f docker/docker-compose-test-net.yaml up -d
到这里组成网络的容器都会成功启动了。
4.创建与加入通道
4.1.创建创世块
首先设置FABRIC配置文件路径为configtx,其下有一个configtx.yaml文件,这个文件里定义了组织及其名称以及背书策略,应用调用权限,Order打包参数配置通道背书策略等,configtxgen命令可以通过该文件创建创世块。
export FABRIC_CFG_PATH=${PWD}/configtx # 设置配置文件路径
export CHANNEL_NAME="mychannel" # 设定通道名称
configtxgen \
-profile TwoOrgsApplicationGenesis \
-outputBlock ./channel-artifacts/${CHANNEL_NAME}.block \
-channelID $CHANNEL_NAME
# -profile configtx.yaml中的属性,用于生成创世块
# outputBlock 创世块输出位置
# -channelID 设定通道名称
执行之后,会在channel-artifacts出现一个mychannel.block,其中写入了对管道建立相关的背书、组织等,作为创世块。
4.2.创建通道
这里首先会将FABRIC配置文件路径设置为…/