引言:依据hyperledger fabric提供的测试网络脚本搭建自己的网络环境
该系列参考:https://blog.csdn.net/ling1998?type=blog
执行./network.sh up 将调用脚本中networkUp()函数,函数解析如下图所示

创建自己的网络目录
进入fabric-samples目录
bash
cd $GOPATH/src/github.com/hyperledger/fabric/scripts/fabric-samples
创建文件夹test-network-myself
bash
mkdir test-network-myself
进入test-network-myself目录
bash
cd test-network-myself
创建并编辑crypto-config.yaml
因hyperledger fabri是许可网络,任何节点的网络参与者都需要有证书才可以访问网络,证书是证明能够访问网络的通行证
创建crypto-config.yaml文件
bash
touch crypto-config.yaml
编辑crypto-config.yaml文件
bash
vim crypto-config.yaml
文件中创建2个peer节点,一个order排序节点,两个organization组织
yaml
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
生成组织及证书
bash
cryptogen generate --config=./crypto-config.yaml --output="organizations"
解释:
cryptogen generate命令中的参数:
--output="organizations" 用来存放构建的输出目录
--config=./crypto-config.yaml 使用的配置文件,即第2步中创建的文件
查看organization目录
bash
[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 #组织成员目录
│ └── [email protected] #至少有一个管理员
│ ├── msp
│ │ ├── admincerts
│ │ ├── cacerts
│ │ │ └── ca.example.com-cert.pem
│ │ ├── config.yaml
│ │ ├── keystore #账号的私钥
│ │ │ └── priv_sk
│ │ ├── signcerts #符合X.509的节点或者账户证书文件
│ │ │ └── [email protected]
│ │ └── 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
│ ├── [email protected]
│ │ ├── msp
│ │ │ ├── admincerts
│ │ │ ├── cacerts
│ │ │ │ └── ca.org1.example.com-cert.pem
│ │ │ ├── config.yaml
│ │ │ ├── keystore
│ │ │ │ └── priv_sk
│ │ │ ├── signcerts
│ │ │ │ └── [email protected]
│ │ │ └── tlscacerts
│ │ │ └── tlsca.org1.example.com-cert.pem
│ │ └── tls
│ │ ├── ca.crt
│ │ ├── client.crt
│ │ └── client.key
│ └── [email protected]
│ ├── msp
│ │ ├── admincerts
│ │ ├── cacerts
│ │ │ └── ca.org1.example.com-cert.pem
│ │ ├── config.yaml
│ │ ├── keystore
│ │ │ └── priv_sk
│ │ ├── signcerts
│ │ │ └── [email protected]
│ │ └── 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
├── [email protected]
│ ├── msp
│ │ ├── admincerts
│ │ ├── cacerts
│ │ │ └── ca.org2.example.com-cert.pem
│ │ ├── config.yaml
│ │ ├── keystore
│ │ │ └── priv_sk
│ │ ├── signcerts
│ │ │ └── [email protected]
│ │ └── tlscacerts
│ │ └── tlsca.org2.example.com-cert.pem
│ └── tls
│ ├── ca.crt
│ ├── client.crt
│ └── client.key
└── [email protected]
├── msp
│ ├── admincerts
│ ├── cacerts
│ │ └── ca.org2.example.com-cert.pem
│ ├── config.yaml
│ ├── keystore
│ │ └── priv_sk
│ ├── signcerts
│ │ └── [email protected]
│ └── 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文件,因此一起拷贝
bash
cp ../test-network/organizations/ccp-* ./organizations/
ccp-generate.sh ccp-template.json ccp-template.yaml ordererOrganizations peerOrganizations
执行ccp-generate.sh脚本
bash
./organizations/ccp-generate.sh
这会 在peer节点目录中生成json与yaml文件
启动网络
拷贝测试网络中的docker-compose-net.yaml文件
bash
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
bash
export DOCKER_SOCK=/var/run/docker.sock #设置环境变量
使用docker-compose启动网络
bash
docker-compose -f docker/docker-compose-test-net.yaml up -d
使用docker ps命令查看生成的容器
bash
docker ps -a
关闭自己搭建的网络
停止并删除容器、网络、卷、镜像
bash
docker-compose -f docker/docker-compose-test-net.yaml down --volumes --remove-orphans
删除节点目录
bash
rm -rf ./organizations/*Organizations
生成执行启动/关闭网络脚本
提前条件:
执行完上面步骤将保留配置文件(5个),下面的脚本将基于这5个配置文件运行:
bash
[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
bash
touch network-myself.sh
授权network-myself.sh为可执行文件
bash
chmod +x network-myself.sh
编写启动/关闭网络脚本
bash
vi network-myself.sh
回车,按键盘上的 i 键或 Insert 功能键,进入编辑状态,脚本内容如下:
bash
#!/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
bash
./network-myself.sh up
测试关闭网络network-myself.sh down
bash
./network-myself.sh down