引言:依据hyperledger fabric提供的测试网络脚本搭建自己的网络环境
执行./network.sh up 将调用脚本中networkUp()函数,函数解析如下图所示
创建自己的网络目录
进入fabric-samples目录
1
| cd $GOPATH/src/github.com/hyperledger/fabric/scripts/fabric-samples
|
创建文件夹test-network-myself
1
| mkdir test-network-myself
|
进入test-network-myself目录
创建并编辑crypto-config.yaml
因hyperledger fabri是许可网络,任何节点的网络参与者都需要有证书才可以访问网络,证书是证明能够访问网络的通行证
创建crypto-config.yaml文件
1
| touch crypto-config.yaml
|
编辑crypto-config.yaml文件
文件中创建2个peer节点,一个order排序节点,两个organization组织
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| OrdererOrgs: - Name: Orderer Domain: example.com EnableNodeOUs: true Specs: - Hostname: orderer SANS: - localhost PeerOrgs: - Name: Org1 Domain: org1.example.com EnableNodeOUs: true Template: Count: 1 SANS: - localhost Users: Count: 1 - Name: Org2 Domain: org2.example.com EnableNodeOUs: true Template: Count: 1 SANS: - localhost Users: Count: 1
|
生成组织及证书
1
| cryptogen generate --config=./crypto-config.yaml --output="organizations"
|
解释:
cryptogen generate命令中的参数:
–output=”organizations” 用来存放构建的输出目录
–config=./crypto-config.yaml 使用的配置文件,即第2步中创建的文件
查看organization目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
| [root@localhost test-network-myself] organizations ├── ordererOrganizations │ └── example.com │ ├── ca │ │ ├── ca.example.com-cert.pem │ │ └── priv_sk │ ├── msp │ │ ├── admincerts │ │ ├── cacerts │ │ │ └── ca.example.com-cert.pem │ │ ├── config.yaml │ │ └── tlscacerts │ │ └── 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 │ │ │ └── Admin@example.com-cert.pem │ │ └── tlscacerts │ │ └── tlsca.example.com-cert.pem │ └── tls │ ├── ca.crt │ ├── client.crt │ └── client.key └── peerOrganizations ├── 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文件,因此一起拷贝
1
| cp ../test-network/organizations/ccp-* ./organizations/
|
ccp-generate.sh ccp-template.json ccp-template.yaml ordererOrganizations peerOrganizations
执行ccp-generate.sh脚本
1
| ./organizations/ccp-generate.sh
|
这会 在peer节点目录中生成json与yaml文件
启动网络
拷贝测试网络中的docker-compose-net.yaml文件
1 2 3 4
| mkdir docker cp ../test-network/docker/docker-compose-test-net.yaml docker/ [root@localhost test-network-myself] docker-compose-test-net.yaml
|
设置环境变量DOCKER_SOCK
1
| export DOCKER_SOCK=/var/run/docker.sock
|
使用docker-compose启动网络
1
| docker-compose -f docker/docker-compose-test-net.yaml up -d
|
使用docker ps命令查看生成的容器
关闭自己搭建的网络
停止并删除容器、网络、卷、镜像
1
| docker-compose -f docker/docker-compose-test-net.yaml down --volumes --remove-orphans
|
删除节点目录
1
| rm -rf ./organizations/*Organizations
|
生成执行启动/关闭网络脚本
提前条件:
执行完上面步骤将保留配置文件(5个),下面的脚本将基于这5个配置文件运行:
1 2 3 4 5 6 7 8 9 10 11 12
| [root@localhost test-network-myself] . ├── crypto-config.yaml ├── docker │ └── docker-compose-test-net.yaml ├── organizations │ ├── ccp-generate.sh │ ├── ccp-template.json │ └── ccp-template.yaml ├── scripts └── system-genesis-block └── genesis.block
|
创建脚本文件network-myself.sh
授权network-myself.sh为可执行文件
1
| chmod +x network-myself.sh
|
编写启动/关闭网络脚本
回车,按键盘上的 i 键或 Insert 功能键,进入编辑状态,脚本内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| #!/bin/bash
function networkUpMyself() { networkDownMyself set -x cryptogen generate --config=./crypto-config.yaml --output="organizations" ./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 }
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 down
1
| ./network-myself.sh down
|