目录

0. 引言

1. 创建自己的网络目录

(1)进入fabric-samples目录

(2)创建文件夹test-network-myself(自己的网络目录)

(3)进入test-network-myself目录

2. 创建并编辑crypto-config.yaml文件

(1)创建crypto-config.yaml文件

(2)编辑crypto-config.yaml文件

3. 生成组织及证书

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

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

(2)执行ccp-generate.sh脚本

5. 启动网络

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

(2)设置环境变量DOCKER_SOCK

(3)使用docker-compose启动网络

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

6. 关闭自己搭建的网络

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

(2)删除节点目录

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

(1)提前条件

(2)创建脚本文件network-myself.sh

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

(4)编写启动/关闭网络脚本

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

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


0. 引言

本文根据network.sh脚本中启动网络函数 networkUp(),手动模拟自己搭建的网络。

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

红星标记:是若验证都通过时实际执行红星标记即可,可根据这些步骤自己搭建网络

绿色字体:引用并执行了其它脚本文件

下面开始搭建自己的网络:

1. 创建自己的网络目录

(1)进入fabric-samples目录

[root@localhost ~]# cd /home/gopath/src/github.com/hyperledger/fabric/scripts/fabric-samples

(2)创建文件夹test-network-myself(自己的网络目录)

[root@localhost fabric-samples]# mkdir test-network-myself

(3)进入test-network-myself目录

[root@localhost fabric-samples]# cd test-network-myself

2. 创建并编辑crypto-config.yaml文件

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

(1)创建crypto-config.yaml文件

[root@localhost test-network-myself]# touch crypto-config.yaml
[root@localhost test-network-myself]# ls
crypto-config.yaml

(2)编辑crypto-config.yaml文件

[root@localhost test-network-myself]# vi crypto-config.yaml 

文件内容参考测试网络test-network中的配置文件

文件中创建2个peer节点,一个排序节点,将上面3个配置文件合并成一个文件

OrdererOrgs:- Name: OrdererDomain: example.comEnableNodeOUs: trueSpecs:- Hostname: ordererSANS:- localhost
PeerOrgs:- Name: Org1Domain: org1.example.comEnableNodeOUs: trueTemplate:Count: 1SANS:- localhostUsers:Count: 1- Name: Org2Domain: org2.example.comEnableNodeOUs: trueTemplate:Count: 1SANS:- localhost Users:Count: 1

以下是对crypto-config.yaml的一些解释:

3. 生成组织及证书

[root@localhost test-network-myself]# cryptogen generate --config=./crypto-config.yaml --output="organizations"
org1.example.com
org2.example.com

cryptogen generate命令中的参数:

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

生成完成,查看organizations目录

[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.key93 directories, 85 files

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

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

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

[root@localhost test-network-myself]# cp ../test-network/organizations/ccp-* ./organizations/
[root@localhost test-network-myself]# ls organizations/
ccp-generate.sh  ccp-template.json  ccp-template.yaml  ordererOrganizations  peerOrganizations

(2)执行ccp-generate.sh脚本

[root@localhost test-network-myself]# ./organizations/ccp-generate.sh

在peer节点目录中生成json与yaml文件,如下图所示:

5. 启动网络

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

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

(2)设置环境变量DOCKER_SOCK

[root@localhost test-network-myself]# export DOCKER_SOCK=/var/run/docker.sock #设置环境变量
[root@localhost test-network-myself]# echo $DOCKER_SOCK #查看环境变量
/var/run/docker.sock

(3)使用docker-compose启动网络

[root@localhost test-network-myself]# docker-compose -f docker/docker-compose-test-net.yaml up -d
Creating network "fabric_test" with the default driver
Creating volume "docker_orderer.example.com" with default driver
Creating volume "docker_peer0.org1.example.com" with default driver
Creating volume "docker_peer0.org2.example.com" with default driver
Creating orderer.example.com    ... done
Creating peer0.org1.example.com ... done
Creating peer0.org2.example.com ... done
Creating cli                    ... done

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

[root@localhost test-network-myself]# docker ps -a
CONTAINER ID   IMAGE                               COMMAND             CREATED       STATUS       PORTS                                                                                                                                 NAMES
3d3b5a3960a5   hyperledger/fabric-tools:latest     "/bin/bash"         3 hours ago   Up 3 hours                                                                                                                                         cli
52393504fbdc   hyperledger/fabric-orderer:latest   "orderer"           3 hours ago   Up 3 hours   0.0.0.0:7050->7050/tcp, :::7050->7050/tcp, 0.0.0.0:7053->7053/tcp, :::7053->7053/tcp, 0.0.0.0:17050->17050/tcp, :::17050->17050/tcp   orderer.example.com
c9e58dcd7733   hyperledger/fabric-peer:latest      "peer node start"   3 hours ago   Up 3 hours   0.0.0.0:7051->7051/tcp, :::7051->7051/tcp, 0.0.0.0:17051->17051/tcp, :::17051->17051/tcp                                              peer0.org1.example.com
56849c90ba15   hyperledger/fabric-peer:latest      "peer node start"   3 hours ago   Up 3 hours   0.0.0.0:9051->9051/tcp, :::9051->9051/tcp, 7051/tcp, 0.0.0.0:19051->19051/tcp, :::19051->19051/tcp                                    peer0.org2.example.com

6. 关闭自己搭建的网络

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

[root@localhost test-network-myself]# docker-compose -f docker/docker-compose-test-net.yaml down --volumes --remove-orphans
Stopping cli                    ... done
Stopping peer0.org1.example.com ... done
Stopping peer0.org2.example.com ... done
Stopping orderer.example.com    ... done
Removing cli                    ... done
Removing peer0.org1.example.com ... done
Removing peer0.org2.example.com ... done
Removing orderer.example.com    ... done
Removing network fabric_test
Removing volume docker_orderer.example.com
Removing volume docker_peer0.org1.example.com
Removing volume docker_peer0.org2.example.com

(2)删除节点目录

[root@localhost test-network-myself]# rm -rf ./organizations/*Organizations

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

(1)提前条件

执行完上面步骤将保留配置文件(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

(2)创建脚本文件network-myself.sh

[root@localhost test-network-myself]# touch network-myself.sh 

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

[root@localhost test-network-myself]# chmod +x network-myself.sh 

(4)编写启动/关闭网络脚本

此脚本为简化版本,没有过多的验证,即认为每个命令都会正常执行。

[root@localhost test-network-myself]# vi network-myself.sh 

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

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

编辑完成后,按Esc, 输入 :wq  保存退出

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

[root@localhost test-network-myself]# ./network-myself.sh up
开启自己的测试网络
+ export DOCKER_SOCK=/var/run/docker.sock
+ DOCKER_SOCK=/var/run/docker.sock
+ docker-compose -f docker/docker-compose-test-net.yaml down --volumes --remove-orphans
Removing network fabric_test
WARNING: Network fabric_test not found.
Removing volume docker_orderer.example.com
WARNING: Volume docker_orderer.example.com not found.
Removing volume docker_peer0.org1.example.com
WARNING: Volume docker_peer0.org1.example.com not found.
Removing volume docker_peer0.org2.example.com
WARNING: Volume docker_peer0.org2.example.com not found.
+ rm -rf './organizations/*Organizations'
+ set +x
+ cryptogen generate --config=./crypto-config.yaml --output=organizations
org1.example.com
org2.example.com
+ ./organizations/ccp-generate.sh
+ export DOCKER_SOCK=/var/run/docker.sock
+ DOCKER_SOCK=/var/run/docker.sock
+ docker-compose -f docker/docker-compose-test-net.yaml up -d
Creating network "fabric_test" with the default driver
Creating volume "docker_orderer.example.com" with default driver
Creating volume "docker_peer0.org1.example.com" with default driver
Creating volume "docker_peer0.org2.example.com" with default driver
Creating orderer.example.com    ... done
Creating peer0.org1.example.com ... done
Creating peer0.org2.example.com ... done
Creating cli                    ... done
+ set +x

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

[root@localhost test-network-myself]# ./network-myself.sh down
关闭自己的测试网络
+ export DOCKER_SOCK=/var/run/docker.sock
+ DOCKER_SOCK=/var/run/docker.sock
+ docker-compose -f docker/docker-compose-test-net.yaml down --volumes --remove-orphans
Stopping cli                    ... done
Stopping orderer.example.com    ... done
Stopping peer0.org1.example.com ... done
Stopping peer0.org2.example.com ... done
Removing cli                    ... done
Removing orderer.example.com    ... done
Removing peer0.org1.example.com ... done
Removing peer0.org2.example.com ... done
Removing network fabric_test
Removing volume docker_orderer.example.com
Removing volume docker_peer0.org1.example.com
Removing volume docker_peer0.org2.example.com
+ rm -rf ./organizations/ordererOrganizations ./organizations/peerOrganizations
+ set +x

下一篇:Fabric v2.3 手动模拟(二)- 创建通道./network.sh createChannel命令

Fabric v2.3 手动模拟(一) - 测试网络./network.sh up命令创建自己的网络相关推荐

  1. Fabric v2.3 测试网络 - 脚本分析(二)- 创建通道createChannel.sh解析

    本文针对创建通道脚本createChannel.sh进行分析,此脚本被创建测试网络network.sh脚本在执行命令./network.sh createChannel时调用 调用脚本及参数默认值命令 ...

  2. Ubuntu 20.04 下Fabric V2.2.0 和 V1.1.0 运行及配置说明(均可运行)

    ubuntu 20.04 下Fabric V2.2.0 和 V1.1.0 运行及配置说明 ubuntu 20.04 下Fabric运行及配置说明 注:本文是对 <hyperledger/fabr ...

  3. Linux基础命令-网络配置和相关命令

    Linux基础命令-网络配置和相关命令 网络配置和相关命令 一.基本网络配置 二.网卡名称 1. 网卡别名 2. 设备别名 3. 实验 三.网络配置方式 1. ifconfig命令 2. route命 ...

  4. 把树莓派改造成无线网卡(3)-----共享无线网络,无线网络转换成有线网络,让有线网络设备连上无线网络

    本文目录 1.准备工作 2.安装DNS和配置管理软件 3.设置网络路由功能 3.1.树莓派的有线网络接口IP配置 3.2.启用路由和IP伪装 3.3.为有线网络配置DHCP和DNS服务 4.运行 5. ...

  5. Linux 命令之 netstat -- 查看网络状态信息/显示网络状态

    文章目录 命令介绍 常用选项 参考示例 (一)列出所有端口 (二)列出所有 TCP 端口 (三)列出所有 UDP 端口 (四)只显示监听端口 (五)只列出所有监听 tcp 端口 (六)只列出所有监听 ...

  6. 计算机没有设置无线临时网络,如何创建临时无线网络

    1.选择性能高的笔记本做主机 在参战笔记本中选一台性能比较高的笔记本做"主在系统右下角的任务栏托盘区中找到网络连接的图标,右键选择"网络和共享中心".同样的,也可以在Wi ...

  7. Docker Swarm 创建加密覆盖网络

    Docker Swarm 创建加密覆盖网络 文章目录 Docker Swarm 创建加密覆盖网络 1. 初始化 swarm 2. 创建未加密的覆盖网络 3. 监控网络 4. 创建加密覆盖网络 1. 初 ...

  8. Fabric v2.3测试网络 - 创建通道 返回结果分析

    创建通道使用的命令 [root@localhost test-network]# ./network.sh createChannel 创建通道使用的命令用到了以下一些工具,如下图所示: 下面是创建通 ...

  9. React 16 Jest手动模拟(Manual Mocks)

    2019独角兽企业重金招聘Python工程师标准>>> 转载地址 React 16 Jest手动模拟(Manual Mocks) 项目初始化 git clone https://gi ...

最新文章

  1. 集成学习-Adaboost
  2. AAAI2020 | SNERL:抛开mention级别的监督,实体链接、关系抽取我都行
  3. centos7 搭建 mysql8
  4. Python_序列对象内置方法详解_String
  5. IE8提示JS错误(KB927917)终极解决方法
  6. echart移上去显示内容_echarts如何移动到柱状图上显示自己想显示的提示信息
  7. avalon框架,简单的MVVM
  8. vscode输入vue自动_使用vscode,新建.vue文件,tab自动生成vue代码模板
  9. 国产特斯拉Model Y已开始向欧洲用户交付
  10. 华强北二手手机卖不出去,闲鱼砸一亿现金帮扶
  11. PowerJob 应对庞大任务的锦囊妙计:MapReduce
  12. 香港科技大学计算机专业国内就业6,香港科技大学就业好吗?
  13. x[:,n]或者x[n,:]的用法
  14. ehcache缓存共享(rmi方法)
  15. BI项目经理入门指南:用最详细的图解,带你落地企业自助分析项目
  16. ppt制作弹跳的小球动画效果_PPT动画制作教程:小球弹跳动画
  17. Pigeon中的流量限制
  18. Python解决乱码 \x222\x22,\x0A
  19. PMP-项目采购管理
  20. python api调用 验证码_Python语言调用创蓝253短信验证码API文档

热门文章

  1. 七星配资北向资金大举入市抢筹
  2. 笨方法学python 习题7
  3. 水电站生态泄流监测解决方案
  4. java对接微信公众号发布文章
  5. mysql 创建索引规范
  6. Qt网络编程-简易版UDP组播通信入门Demo(5)
  7. 在Mac使用Wine运行Windows软件:PanDownload_Beat(非虚拟机)
  8. 统信UOS牵手深信服 共建云生态新格局
  9. 你好啊!这是今天人工智能精选要闻〔12.20〕
  10. 多芯片同步技术解决措施