Hyperledger Fabric – 自定义network.sh脚本

引言:依据hyperledger fabric提供的测试网络脚本搭建自己的网络环境

该系列参考:https://blog.csdn.net/ling1998?type=blog

执行./network.sh up 将调用脚本中networkUp()函数,函数解析如下图所示

Hyperledger Fabric - 自定义network.sh脚本

创建自己的网络目录

进入fabric-samples目录

cd $GOPATH/src/github.com/hyperledger/fabric/scripts/fabric-samples 

创建文件夹test-network-myself

mkdir test-network-myself 

进入test-network-myself目录

cd test-network-myself 

创建并编辑crypto-config.yaml

因hyperledger fabri是许可网络,任何节点的网络参与者都需要有证书才可以访问网络,证书是证明能够访问网络的通行证

创建crypto-config.yaml文件

touch crypto-config.yaml 

编辑crypto-config.yaml文件

vim crypto-config.yaml 

文件中创建2个peer节点,一个order排序节点,两个organization组织

OrdererOrgs: # 排序节点配置   - Name: Orderer # 组织名称     Domain: example.com # 组织域名     EnableNodeOUs: true # 设置为true,将会在msp目录下生成config.yaml文件     Specs:       - Hostname: orderer # 主机名称         SANS:           - localhost # 除主机名称外的别名 PeerOrgs: # peer节点配置   - Name: Org1     Domain: org1.example.com     EnableNodeOUs: true     Template: # 使用模板,将自动生成hostname,以peer0到peerN-1的顺序生成       Count: 1 # peer节点个数       SANS:        - localhost     Users:       Count: 1 # peer节点中用户数量,除了管理员以外的用户数量   - Name: Org2     Domain: org2.example.com     EnableNodeOUs: true     Template:       Count: 1       SANS:        - localhost      Users:       Count: 1 

生成组织及证书

cryptogen generate --config=./crypto-config.yaml --output="organizations" 

解释:
cryptogen generate命令中的参数:

--output="organizations" 用来存放构建的输出目录
--config=./crypto-config.yaml 使用的配置文件,即第2步中创建的文件

查看organization目录
[root@localhost test-network-myself]# tree organizations organizations ├── ordererOrganizations #排序组织 │   └── example.com #配置文件中的域名作为目录 │       ├── ca      #证书文件目录 │       │   ├── ca.example.com-cert.pem  #公钥 │       │   └── priv_sk                  #私钥  │       ├── msp    #存放签名用的证书文件和加密用的私钥文件 │       │   ├── admincerts  #超级管理员,管理排序节点 │       │   ├── cacerts     #根CA证书,可颁发其它证书 │       │   │   └── ca.example.com-cert.pem  #加密证书 │       │   ├── config.yaml │       │   └── tlscacerts  #TLS根CA证书,网络安全协议 │       │       └── tlsca.example.com-cert.pem  #加密证书 │       ├── orderers #配置文件中的排序节点名称作为目录, │       │   └── orderer.example.com  #配置文件中的排序节点名称.域名作为目录 │       │       ├── msp │       │       │   ├── admincerts │       │       │   ├── cacerts │       │       │   │   └── ca.example.com-cert.pem │       │       │   ├── config.yaml │       │       │   ├── keystore │       │       │   │   └── priv_sk │       │       │   ├── signcerts │       │       │   │   └── orderer.example.com-cert.pem │       │       │   └── tlscacerts │       │       │       └── tlsca.example.com-cert.pem │       │       └── tls │       │           ├── ca.crt │       │           ├── server.crt │       │           └── server.key │       ├── tlsca │       │   ├── priv_sk │       │   └── tlsca.example.com-cert.pem │       └── users    #组织成员目录 │           └── Admin@example.com #至少有一个管理员 │               ├── msp │               │   ├── admincerts │               │   ├── cacerts │               │   │   └── ca.example.com-cert.pem │               │   ├── config.yaml │               │   ├── keystore  #账号的私钥 │               │   │   └── priv_sk  │               │   ├── signcerts #符合X.509的节点或者账户证书文件 │               │   │   └── Admin@example.com-cert.pem    │               │   └── tlscacerts │               │       └── tlsca.example.com-cert.pem │               └── tls │                   ├── ca.crt │                   ├── client.crt │                   └── client.key └── peerOrganizations #peer组织     ├── org1.example.com #配置文件中的域名作为目录     │   ├── ca     │   │   ├── ca.org1.example.com-cert.pem     │   │   └── priv_sk     │   ├── msp     │   │   ├── admincerts     │   │   ├── cacerts     │   │   │   └── ca.org1.example.com-cert.pem     │   │   ├── config.yaml     │   │   └── tlscacerts     │   │       └── tlsca.org1.example.com-cert.pem     │   ├── peers     │   │   └── peer0.org1.example.com     │   │       ├── msp     │   │       │   ├── admincerts     │   │       │   ├── cacerts     │   │       │   │   └── ca.org1.example.com-cert.pem     │   │       │   ├── config.yaml     │   │       │   ├── keystore     │   │       │   │   └── priv_sk     │   │       │   ├── signcerts     │   │       │   │   └── peer0.org1.example.com-cert.pem     │   │       │   └── tlscacerts     │   │       │       └── tlsca.org1.example.com-cert.pem     │   │       └── tls     │   │           ├── ca.crt     │   │           ├── server.crt     │   │           └── server.key     │   ├── tlsca     │   │   ├── priv_sk     │   │   └── tlsca.org1.example.com-cert.pem     │   └── users     │       ├── Admin@org1.example.com     │       │   ├── msp     │       │   │   ├── admincerts     │       │   │   ├── cacerts     │       │   │   │   └── ca.org1.example.com-cert.pem     │       │   │   ├── config.yaml     │       │   │   ├── keystore     │       │   │   │   └── priv_sk     │       │   │   ├── signcerts     │       │   │   │   └── Admin@org1.example.com-cert.pem     │       │   │   └── tlscacerts     │       │   │       └── tlsca.org1.example.com-cert.pem     │       │   └── tls     │       │       ├── ca.crt     │       │       ├── client.crt     │       │       └── client.key     │       └── User1@org1.example.com     │           ├── msp     │           │   ├── admincerts     │           │   ├── cacerts     │           │   │   └── ca.org1.example.com-cert.pem     │           │   ├── config.yaml     │           │   ├── keystore     │           │   │   └── priv_sk     │           │   ├── signcerts     │           │   │   └── User1@org1.example.com-cert.pem     │           │   └── tlscacerts     │           │       └── tlsca.org1.example.com-cert.pem     │           └── tls     │               ├── ca.crt     │               ├── client.crt     │               └── client.key     └── org2.example.com         ├── ca         │   ├── ca.org2.example.com-cert.pem         │   └── priv_sk         ├── msp         │   ├── admincerts         │   ├── cacerts         │   │   └── ca.org2.example.com-cert.pem         │   ├── config.yaml         │   └── tlscacerts         │       └── tlsca.org2.example.com-cert.pem         ├── peers         │   └── peer0.org2.example.com         │       ├── msp         │       │   ├── admincerts         │       │   ├── cacerts         │       │   │   └── ca.org2.example.com-cert.pem         │       │   ├── config.yaml         │       │   ├── keystore         │       │   │   └── priv_sk         │       │   ├── signcerts         │       │   │   └── peer0.org2.example.com-cert.pem         │       │   └── tlscacerts         │       │       └── tlsca.org2.example.com-cert.pem         │       └── tls         │           ├── ca.crt         │           ├── server.crt         │           └── server.key         ├── tlsca         │   ├── priv_sk         │   └── tlsca.org2.example.com-cert.pem         └── users             ├── Admin@org2.example.com             │   ├── msp             │   │   ├── admincerts             │   │   ├── cacerts             │   │   │   └── ca.org2.example.com-cert.pem             │   │   ├── config.yaml             │   │   ├── keystore             │   │   │   └── priv_sk             │   │   ├── signcerts             │   │   │   └── Admin@org2.example.com-cert.pem             │   │   └── tlscacerts             │   │       └── tlsca.org2.example.com-cert.pem             │   └── tls             │       ├── ca.crt             │       ├── client.crt             │       └── client.key             └── User1@org2.example.com                 ├── msp                 │   ├── admincerts                 │   ├── cacerts                 │   │   └── ca.org2.example.com-cert.pem                 │   ├── config.yaml                 │   ├── keystore                 │   │   └── priv_sk                 │   ├── signcerts                 │   │   └── User1@org2.example.com-cert.pem                 │   └── tlscacerts                 │       └── tlsca.org2.example.com-cert.pem                 └── tls                     ├── ca.crt                     ├── client.crt                     └── client.key   93 directories, 85 files 

生成通用连接配置文件(json与yaml文件格式)

拷贝测试网络中的ccp-generate.sh脚本文件及ccp模板文件

因ccp-generate.sh脚本使用了ccp-template.yaml文件与ccp-template.json文件,因此一起拷贝

cp ../test-network/organizations/ccp-* ./organizations/ 

ccp-generate.sh ccp-template.json ccp-template.yaml ordererOrganizations peerOrganizations

执行ccp-generate.sh脚本

./organizations/ccp-generate.sh  

这会 在peer节点目录中生成json与yaml文件

启动网络

拷贝测试网络中的docker-compose-net.yaml文件

mkdir docker cp ../test-network/docker/docker-compose-test-net.yaml docker/  #拷贝文件 [root@localhost test-network-myself]# ls docker  #查看拷贝的文件 docker-compose-test-net.yaml 

设置环境变量DOCKER_SOCK

export DOCKER_SOCK=/var/run/docker.sock #设置环境变量 

使用docker-compose启动网络

docker-compose -f docker/docker-compose-test-net.yaml up -d 

使用docker ps命令查看生成的容器

docker ps -a 

关闭自己搭建的网络

停止并删除容器、网络、卷、镜像

docker-compose -f docker/docker-compose-test-net.yaml down --volumes --remove-orphans 

删除节点目录

rm -rf ./organizations/*Organizations 

生成执行启动/关闭网络脚本

提前条件:

执行完上面步骤将保留配置文件(5个),下面的脚本将基于这5个配置文件运行:

[root@localhost test-network-myself]# tree  . ├── crypto-config.yaml                #生成组织节点加密配置文件 ├── docker │   └── docker-compose-test-net.yaml  #启动网络配置文件 ├── organizations                      │   ├── ccp-generate.sh               #生成通用连接配置文件脚本 │   ├── ccp-template.json             #生成通用连接配置文件json格式模板 │   └── ccp-template.yaml             #生成通用连接配置文件yaml格式模板 ├── scripts └── system-genesis-block     └── genesis.block 

创建脚本文件network-myself.sh

touch network-myself.sh  

授权network-myself.sh为可执行文件

chmod +x network-myself.sh  

编写启动/关闭网络脚本

vi network-myself.sh  

回车,按键盘上的 i 键或 Insert 功能键,进入编辑状态,脚本内容如下:

#!/bin/bash     #开启自己的测试网络 function networkUpMyself() {     # 关闭自己的测试网络 	networkDownMyself   	set -x 	# 生成组织及证书 	cryptogen generate --config=./crypto-config.yaml --output="organizations"   	# 执行ccp-generate.sh脚本,生成通用连通配置文件 	./organizations/ccp-generate.sh    	# 启动网络 	export DOCKER_SOCK=/var/run/docker.sock 	docker-compose -f $COMPOSE_FILE_BASE up -d   	set +x }   #关闭自己的测试网络 function networkDownMyself() {      	set -x 	 	#停止和删除容器、网络、卷、镜像 	export DOCKER_SOCK=/var/run/docker.sock 	docker-compose -f $COMPOSE_FILE_BASE down --volumes --remove-orphans   	#删除节点目录 	rm -rf ./organizations/*Organizations   	set +x }   # docker-compose yaml文件地址 COMPOSE_FILE_BASE=docker/docker-compose-test-net.yaml   #参数命令 MODE=$1     if [ "${MODE}" == "up" ]; then 	echo "开启自己的测试网络" 	networkUpMyself elif [ "${MODE}" == "down" ]; then 	echo "关闭自己的测试网络" 	networkDownMyself else 	echo "up 开启自己的测试网络" 	echo "down 关闭自己的测试网络" 	exit 1 fi 

测试开启网络network-myself.sh up

./network-myself.sh up 

测试关闭网络network-myself.sh down

./network-myself.sh down 

发表评论

您必须 [ 登录 ] 才能发表留言!

相关文章