引言:依据hyperledger fabric提供的测试网络脚本搭建自己的网络环境
该系列参考:https://blog.csdn.net/ling1998?type=blog
执行./network.sh up 将调用脚本中networkUp()函数,函数解析如下图所示
创建自己的网络目录
进入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 功能键,进入编辑状态,脚本内容如下:
测试开启网络network-myself.sh up
./network-myself.sh up
测试关闭网络network-myself.sh down
./network-myself.sh down