Hyperledger Fabric - 自定义network.sh脚本
引言:依据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 功能键,进入编辑状态,脚本内容如下:
#!/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
Hyperledger Fabric - 自定义network.sh脚本的更多相关文章
- Hyperledger fabric 2.2.0 环境搭建
基础环境搭建 ### docker 安装 如果服务器上有旧版的docker,需要先执行卸载操作. $ sudo yum remove docker \ docker-common \ docker-s ...
- 第5章 Hyperledger Fabric功能
Hyperledger Fabric is a unique implementation of distributed ledger technology (DLT) that delivers e ...
- Hyperledger Fabric源码分析之Gossip
Gossip算法正如它的名字,小道消息只需要有人传播一次,那么过一段时间,所有人都会知道,就像新冠病毒一样,所以Gossip算法也有其它的别名"传染病扩散算法"."谣言传 ...
- Hyperledger Fabric 2.x 自定义智能合约
一.说明 为了持续地进行信息的更新,以及对账本进行管理(写入交易,进行查询等),区块链网络引入了智能合约来实现对账本的访问和控制:智能合约在 Fabric 中称之为 链码,是区块链应用的业务逻辑. 本 ...
- Warning Please make sure the network configuration is correct!( iaas-install-mysql.sh 脚本)
解读先电2.4版 iaas-install-mysql.sh 脚本 基础服务的操作命令已经编写成shell脚本,通过脚本进行一键安装.如下: # Controller节点 安装 执行脚本iaas-in ...
- Hyperledger Fabric手动生成CA证书搭建Fabric网络
之前介绍了使用官方脚本自动化启动一个Fabric网络,并且所有的证书都是通过官方的命令行工具cryptogen直接生成网络中的所有节点的证书.在开发环境可以这么简单进行,但是生成环境下还是需要我们自定 ...
- 7.搭建hyperledger fabric环境及启动——2019年12月12日
2019年12月12日13:05:16 声明:从网络中学习整理实践而来. 1.介绍fabric Fabric 是一个面向企业应用的区块链框架,基于 Fabric 的开发可以粗略分为几个层面: 1. 参 ...
- 基于Debian搭建Hyperledger Fabric 2.4开发环境及运行简单案例
相关实验源码已上传:https://github.com/wefantasy/FabricLearn 前言 在基于truffle框架实现以太坊公开拍卖智能合约中我们已经实现了以太坊智能合约的编写及部署 ...
- Hyperledger Fabric部署与测试(Ubuntu)
Fabric部署与测试 Fabric部署与测试最正确的还是参照官方链接:Hyperledger Fabric官方链接 ok,接下来开始部署Fabric.(以Ubuntu为例) 一.部署Fabric 1 ...
- Hyperledger Fabric 1.0 从零开始(八)——Fabric多节点集群生产部署
6.1.平台特定使用的二进制文件配置 该方案与Hyperledger Fabric 1.0 从零开始(五)--运行测试e2e类似,根据企业需要,可以控制各节点的域名,及联盟链的统一域名.可以指定单独节 ...
随机推荐
- Hadoop 概述(三)
HDFS shell API HDFS作为大数据的文件系统,可以放置数据文件,列举几个常用的shell脚本命令,用法和linux中的基本类似,不过这个是hadoop里的一套,所以我们要用hadoop ...
- Peewee:Python 简洁强大的 ORM 框架
在 Python 的开发世界中,数据库操作是至关重要的一环. 今天介绍的 Peewee 作为一款简洁且功能强大的 ORM(对象关系映射)框架,为开发者提供了高效便捷的数据库交互方式. 1. Peewe ...
- LinkedList可以同时作为堆栈和队列使用
Java里的LinkedList可以同时作为堆栈和队列使用,因此在使用的时候总是会弄混他们的方法,此文就简单总结一下作为不同数据结构使用时的用法. 作为队列 方法 声明 任意两种方法: 一是直接声 ...
- vue-element-template实现顶部菜单栏
一.框架侧边栏改为顶部导航栏 1.复制src/layout/componets/Sidebar所有文件至同级目录,改名为Headbar 2.src/layout/components/index.js ...
- [BZOJ3159] 决战 题解
个人感觉各方面难度高于<在美妙的数学王国中畅游>,也不知道是不是求导的关系,这题 \(luogu\) 难度评级还更低.不过感觉这题作完对 \(LCT\) 理解更顺畅了. 前四个操作简单,关 ...
- Java微信小程序登录接口获取openid
根据官方文档,wx.login()的回调函数中,需要我们传递生成的用户登录凭证到code2accessToken的接口中 小程序登录方法 code2accessToken的方法中要求传入如下参数 ...
- Vulnhun靶机-kioptix level 4-sql注入万能密码拿到权限ssh连接利用mysql-udf漏洞提权
一.环境搭建 然后选择靶机所在文件夹 信息收集 本靶机ip和攻击机ip 攻击机:192.168.108.130 靶机:192.168.108.141 扫描ip 靶机ip为:192.168.108.14 ...
- C++17 Filesystem 实用教程
点击查看代码 C++17 标准带来了 std::filesystem库, 提供了强大的工具来处理文件路径, 目录以及其他与文件系统相关的操作. 这篇文章适合 C++ 初学者以及希望掌握 C++17 新 ...
- 万字解析Golang的map实现原理
0.引言 相信大家对Map这个数据结构都不陌生,像C++的map.Java的HashMap.各个语言的底层实现各有不同,在本篇博客中,我将分享个人对Go的map实现的理解,以及深入源码进行分析,相信耐 ...
- 【MATLAB习题】双摇杆机构的运动学分析
1.双摇杆机构概述 双摇杆机构的判别方法: 最长杆长度+最短杆长度 ≤ 其他两杆长度之和,连杆(机架的对杆)为最短杆时. 如果最长杆长度+最短杆长度 >其他两杆长度之和,此时不论以何杆为机架,均 ...