什么是shell脚本
一系列的shell命令的集合, 还可以加入一些逻辑 *** 作(if else for) 将这些命令放入一个文件中.
文件shell命令 * n个可以加入逻辑需要在linux的终端中执行
# test.sh
ls
pwd
if [ xxx ]
cd ..
什么是shell命令?
$ ls
$ cd
$ pwd
shell脚本的基本格式
命名格式
一般命名规则 : xxxxx.sh (建议以.sh为后缀命名)书写格式
# test.sh #是shell脚本中的注释
# 第一行如果忘了了写, 使用默认的命令解析器 /bin/sh
#!/bin/bash # 指定解析shell脚本的时候使用的命令解析器 /bin/sh也可以
# 一系列的shell命令
ls
pwd
cp
rm
shell脚本的执行
# shell脚本编写完成之后, 必须添加执行权限
chmod u+x xxx.sh
# 执行shell脚本
./xxx.sh
sh test.sh
1.2 shell脚本中的变量
变量的定义
普通变量(本地变量)
# 定义变量, 定义完成, 必须要赋值, =前后不能有空格
temp=666
# 普通变量只能在当前进程中使用
环境变量 - 一般大写 # 可以理解问全局变量, 在当前 *** 作系统中可以全局访问
# 分类
- 系统自带的
- PWD
- SHELL
- PATH
- HOME
- 用户自定义的
- 将普通变量提升为系统级别的环境变量
GOPATH=/home/zoro/go/src - > 普通环境变量
set GOPATH=/home/zoro/go/src - > 系统环境变量
export GOPATH=/home/zoro/go/src
~/.bashrc
位置变量
执行脚本的时候, 可以给脚本传递参数, 在脚本内部接收这些参数, 需要使用位置变量
# 已经存在的脚本test.sh
#!/bin/bash
echo "hello , world, echo"
"第一个参数: echo"
"第2参数: echo"
"第3个参数: echo"
"第4个参数: echo"
"第5个参数: echo"
"第6个参数: # 执行test.sh"
11
$ ./test.sh 22 3 4 5 6 11 aa bb
hello , world, ./test.sh
第一个参数: 22
第2参数: 3
第3个参数: 4
第4个参数: 5
第5个参数: 6
第6个参数: # test.sh
$0: 执行的脚本文件的名字$1: 第一个参数$2: 第2个参数$3: 第三个参数… 特殊变量
$#: 获取传递的参数的个数$@: 给脚本传递的所有的参数$?: 脚本执行完成之后的状态, 失败>0 or 成功=0$$: 脚本进程执行之后对应的进程ID#!/bin/bash
echo
echo "hello , world, "
echo "第一个参数: "
echo "第2参数: "
echo "第3个参数: "
echo "第4个参数: "
echo "第5个参数: "
echo "第6个参数: $#"
echo "传递的参数个数: $@"
echo "传递的所有的参数: $$"
dd "当前脚本的进程ID: 8"
$ ./test.sh aa bb cc 9 ee ff 0 dd 9
hello , world, ./test.sh
第一个参数: aa
第2参数: bb
第3个参数: cc
第4个参数: dd
第5个参数: ee
第6个参数: ff
传递的参数个数: 8
传递的所有的参数: aa bb cc 9 ee ff 0 47946 # 脚本执行状态查看
当前脚本的进程ID: echo
$?
$ 0 # 变量定义
value -> 成功
非0 -> 失败
普通变量取值
=
123# 默认以字符串处理= "123 456"
value1 echo $value
# 如何取变量的值: ${变量名}
# 取值的两种方式:
- $变量名
- var
取命令执行之后的结果值
=
$()varshell命令=
``# 双引号shell命令echo
引号的使用
$var
# 单引号 "当前文件: echo"
- 打印的时候会将var中的值取出并输出
'当前文件: $var'
# if语句 # 注意事项:
- 将字符串原样输出
1.3 条件判断和循环
shell脚本中的if条件判断
if
[
- ] 和 []直接有一个空格
- : 条件 else if 条件的前后都有空格
- = elif if> [
-
] ; 条件判断 thenfi# ===================
逻辑处理 -> shell命令
xxx
xxxx
xxxx
if
[
] then 条件判断 fi
# if ... elif .. fi
逻辑处理 -> shell命令
xxx
xxx
if
[
] ; 条件判断 thenelif[
逻辑处理 -> shell命令
xxx
xxxx
xxxx
] ; 条件判断 thenelif[
shell命令
] ; 条件判断 thenelif[
shell命令
] ; 条件判断 thenelsefi
shell命令
# if.sh
shell命令
#!/bin/bash
# 需要对传递到脚本内部的文件名做判断
if
[
] -d ; thenecho
elif "[ 是一个目录!"
] -s ; thenecho
else "echo 是一个文件, 并文件不为空"
fi "# shell中的循环 for/ while 不是目录, 有肯能不存在, 或文件大小为0"
# 语法: for 变量 in 集合; do;done
shell脚本for循环
for
var
in ; do 集合done# for.sh
shell命令
#!/bin/bash
# 对当前目录下的文件进行遍历
list
=
`ls`forvar
in $list ; doecho$var
echo "当前文件: '当前文件: $var'"
done # 运行脚本
$var
$var
$ ./for.sh
当前文件: a
当前文件: $var
当前文件: abc
当前文件: $var
当前文件: for.sh
当前文件: $var
当前文件: if.sh
当前文件: # 没有函数修饰, 没有参数, 没有返回值
当前文件: test.sh
当前文件: # 格式
1.4 shell脚本中的函数
funcName
(
)# 得到第一个参数arg1{
=
# 得到第2个参数arg2
=
mkdir}
函数体 -> shell命令 + 逻辑循环和判断
# 没有参数列表, 但是可以传参 /root/abc
# 函数调用
dd
# 函数调用之后的状态:
funcName aa bb cc 0
#!/bin/bash
# 判断传递进行来的文件名是不是目录, 如果不是, 创建... -> 调用成功
非0 -> 失败
# 定义函数
is_directory
(
)# 得到文件名, 通过参数得到文件名name
{
=
if[
$name ] -d ; thenecho$name
else "# 创建目录 是一个目录!"
mkdir
$name
if [
0 $? ] -ne ; thenecho"目录创建失败..."
exit fi
echo
"目录创建成功!!!"
fi }
# 函数调用
-b filename
is_directory 当filename 存在并且是块文件时返回真(返回0)
2. Fabric环境搭建
3. Fabric基本概念
3.1 逻辑架构
成员管理(MemberShip)
会员注册
注册成功一个账号得到的不是用户名密码使用证书作用身份认证的标志 身份保护交易审计内容保密
可以多条区块链, 通过通道来区分的 账本管理
区块链
保存所有的交易记录 世界状态
数据的最新状态数据存储在当前节点的数据库中
自带的默认数据库: levelDB, 也可以使用couchdb
以键值对的方式进行存储 的 交易管理
部署交易
部署的是链码, 就是给节点安装链码 - chaincode 调用交易
invoke 智能合约
一段代码, 处理网络成员所同意的业务逻辑真正实现了链码和账本的分离(逻辑和数据分离)
3.2 基础概念
组织
是指这样一个社会实体,它具有明确的目标导向和精心设计的结构与有意识协调的活动系统,同时又同外部环境保持密切的联系
在Fabric中一个组织里边都有什么?
有用户有进行数据处理 的节点 -> peer put -> 写数据到区块链中get -> 数据查询
节点
client
进行交易管理(cli , node sdk, java sdk)
cli -> 通过linux的命令行进行通过, 使用的是shell命令对象数据进行提交和查询node.js -> 通过node.js api 实现一个客户端java -> 通过java api 实现一个客户端go也可以peer
存储和同步账本数据
用户通过客户端工具对数据进行put *** 作, 数据写入到一个节点里边数据同步是fabric框架实现的orderer
排序和分发交易
为什么要排序?
解决双花问题没发起一般交易都会在orderer节点进行排序交易数据需要先进行打包, 然后写入到区块中
通道 -> channel
通道是有共识服务(ordering)提供的一种通讯机制,将peer和orderer连接在一起,形成一个个具有保密性的通讯链路(虚拟),实现了业务隔离的要求;通道也与账本(ledger)-状态(worldstate)紧密相关
consensus Server : orderer节点
三条不同颜色的线, 代表三个通道
一个peer节点是可以同时加入到不同的通道中的
peer节点每加入到一个新的通道, 存储数据的区块链就需要添加一条, 只要加入到通道中就可以拥有这个通道中的数据, 每个通道对应一个区块链.
交易流程
要完成交易, 这笔交易必须要有背书策略的, 假设:
组织A中的成员必须同意组织B中的成员也必须同意 Application/SDK : 充当的是客户端的角色 写数据 客户端发起一个提案, 给到peer节点 会发送给组织A和组织B中的节点 peer节点将交易进行预演, 会得到一个结果peer节点将交易结果发送给客户端 如果模拟交易失败, 整个交易流程终止成功, 继续 客户端将交易提交给排序节点排序节点对交易打包orderer节点将打包数据发送给peer, peer节点将数据写入区块中 打包数据的发送, 这不是时时的有设定条件, 在配置文件中背书策略:
要完成一笔交易, 这笔交易的完成过程叫背书
账本
shell条件测试参考文件状态测试
-c filename | 当filename 存在并且是字符文件时返回真 |
-d pathname | 当pathname 存在并且是一个目录时返回真 |
-e pathname | 当由pathname 指定的文件或目录存在时返回真 |
-f filename | 当filename 存在并且是正规(普通)文件时返回真 |
-g pathname | 当由pathname 指定的文件或目录存在并且设置了SGID 位时返回真 |
-h/-L filename | 当filename 存在并且是符号链接文件时返回真 (或 filename) |
-k pathname | 当由pathname 指定的文件或目录存在并且设置了"粘滞"位时返回真 |
-p filename | 当filename 存在并且是命名管道时返回真 |
-r pathname | 当由pathname 指定的文件或目录存在并且可读时返回真 |
-s filename | 当filename 存在并且文件大小大于0 时返回真 |
-S filename | 当filename 存在并且是socket 时返回真 |
-t fd | 当fd 是与终端设备相关联的文件描述符时返回真 |
-u pathname | 当由pathname 指定的文件或目录存在并且设置了SUID 位时返回真 |
-w pathname | 当由pathname 指定的文件或目录存在并且可写时返回真 |
-x pathname | 当由pathname 指定的文件或目录存在并且可执行时返回真 |
-O pathname | 当由pathname 存在并且被当前进程的有效用户id 的用户拥有时返回真(字母O 大写) |
-G pathname | 当由pathname 存在并且属于当前进程的有效用户id 的用户的用户组时返回真 |
file1 -nt file2 | file1 比file2 新时返回真 |
file1 -ot file2 | file1 比file2 旧时返回真 |
f1 -ef f2 | files f1 and f2 are hard links to the same file |
-z string | 字符串string 为空串(长度为0)时返回真 |
---|
常见字符串测试
-n string | 字符串string 为非空串时返回真 |
str1 = str2 | 字符串str1 和字符串str2 相等时返回真 |
str1 == str2 | 同 = |
str1 != str2 | 字符串str1 和字符串str2 不相等时返回真 |
str1 < str2 | 按字典顺序排序,字符串str1 在字符串str2 之前 |
按字典顺序排序,字符串str1 在字符串str2 之后 | nt1 -eq int2 |
---|---|
str1 > str2 | 如果int1 等于int2,则返回真 |
常见数值测试
int1 -ne int2 | 如果int1 不等于int2,则返回真 |
int1 -lt int2 | 如果int1 小于int2,则返回真 |
int1 -le int2 | 如果int1 小于等于int2,则返回真 |
int1 -gt int2 | 如果int1 大于int2,则返回真 |
int1 -ge int2 | 如果int1 大于等于int2,则返回真 |
-a | 逻辑与, *** 作符两边均为真,结果为真,否则为假。&& |
---|
测试时使用的逻辑 *** 作符
-o | 逻辑或, *** 作符两边一边为真,结果为真,否则为假。|| |
! | 逻辑否,条件为假,结果为真。 |
机构名称 | 组织标识符 |
---|
我们可以自己组建一个Fabric网路, 网络结构如下:
排序节点 1 个组织个数 2 个, 分别为go和cpp, 每个组织分别有两个peer节点, 用户个数为3
组织ID | Go学科 | org_go |
---|---|---|
OrgGoMSP | CPP | org_cpp |
OrgCppMSP | $cryptogen# ---------------------------------------------------------------------------
一些理论基础:
域名 baidu.comjd.comtaobao.com msp Membership service provider (MSP)是一个提供虚拟成员 *** 作的管理框架的组件。账号 都谁有msp 每个节点都有一个msp账号每个用户都有msp账号 锚节点 代表所属组织和其他组织进行通信的节点 1. 生成fabric证书 1.1 命令介绍# "OrdererOrgs" - Definition of organizations managing orderer nodes --help
1.2 证书的文件的生成 - yaml
配置文件的模板
# ---------------------------------------------------------------------------
OrdererOrgs
:
# 排序节点组织信息# --------------------------------------------------------------------------- # Orderer
# ---------------------------------------------------------------------------
-
Name
: # 排序节点组织的名字Domain Orderer :
# 根域名, 排序节点组织的根域名Specs example.com :
-Hostname
: # 访问这台orderer对应的域名为: orderer.example.com- orderer Hostname
: # 访问这台orderer对应的域名为: order2.example.com# --------------------------------------------------------------------------- order2 # "PeerOrgs" - Definition of organizations managing peer nodes
# ---------------------------------------------------------------------------
PeerOrgs
:
# ---------------------------------------------------------------------------# Org1
# ---------------------------------------------------------------------------
-
Name
: # 第一个组织的名字, 自己指定Domain Org1 :
# 访问第一个组织用到的根域名EnableNodeOUs org1.example.com :
true# 是否支持node.js Template :
# 模板, 根据默认的规则生成2个peer存储数据的节点Count :
2# 1. peer0.org1.example.com 2. peer1.org1.example.com Users :
# 创建的普通用户的个数Count :
3# --------------------------------------------------------------------------- # Org2: See "Org1" for full specification
# ---------------------------------------------------------------------------
-
Name
: Domain: Org2
EnableNodeOUs: org2.example.com
trueTemplate :
Count:
2Specs :
-Hostname
: Users: hello
Count:
1# crypto-config.yaml # ---------------------------------------------------------------------------
上边使用的域名, 在真实的生成环境中需要注册备案, 测试环境, 域名自己随便指定就可以
根据要求编写好的配置文件, 配置文件名: crypto-config.yaml
# "OrdererOrgs" - Definition of organizations managing orderer nodes
# ---------------------------------------------------------------------------
OrdererOrgs
:
# ---------------------------------------------------------------------------# Orderer
# ---------------------------------------------------------------------------
-
Name
: Domain: Orderer
Specs: itcast.com
-Hostname
: # ---------------------------------------------------------------------------# "PeerOrgs" - Definition of organizations managing peer nodes orderer
# ---------------------------------------------------------------------------
PeerOrgs
:
# ---------------------------------------------------------------------------# Org1
# ---------------------------------------------------------------------------
-
Name
: Domain: OrgGo
EnableNodeOUs: orggo.itcast.com
trueTemplate :
Count:
2Users :
Count:
3# --------------------------------------------------------------------------- # Org2: See "Org1" for full specification
# ---------------------------------------------------------------------------
-
Name
: Domain: OrgCpp
EnableNodeOUs: orgcpp.itcast.com
trueTemplate :
Count:
2Users :
Count:
3= # 输出创始块区块文件的路径和名字
通过命令生成证书文件
$ cryptogen generate --config`crypto-config.yaml
2. 创始块文件和通道文件的生成
2.1 命令介绍
$ configtxgen --help
`
# 指定创建的channel的名字, 如果没指定系统会提供一个默认的名字.-outputBlock string`
`
# 表示输通道文件路径和名字-channelID string`
`
# 指定配置文件中的节点-outputCreateChannelTx string`
`
# 更新channel的配置信息-profile string`
`
# 指定所属的组织名称-outputAnchorPeersUpdate string`
`
# 要想执行这个命令, 需要一个配置文件 configtx.yaml-asOrg string---
################################################################################
2.2 创始块/通道文件的生成
配置文件的编写 - 参考模板
#
# Section: Organizations
#
# - This section defines the different organizational identities which will
# be referenced later in the configuration.
#
################################################################################
Organizations
:
# 固定的不能改- &OrdererOrg
# 排序节点组织, 自己起个名字 Name :
# 排序节点的组织名ID OrdererOrg :
# 排序节点组织的IDMSPDir OrdererMSP :
-# 组织的msp账号信息 crypto-config/ordererOrganizations/example.com/msp &Org1
# 第一个组织, 名字自己起 Name :
# 第一个组织的名字ID Org1MSP :
# 第一个组织的IDMSPDir Org1MSP :
-AnchorPeers crypto:config/peerOrganizations/org1.example.com/msp
# 锚节点- Host
: # 指定一个peer节点的域名Port peer0.org1.example.com :
7051# 端口不要改 - &Org2
Name :
ID: Org2MSP
MSPDir: Org2MSP
-AnchorPeers crypto:config/peerOrganizations/org2.example.com/msp
-Host
: Port: peer0.org2.example.com
7051################################################################################ #
# SECTION: Capabilities, 在fabric1.1之前没有, 设置的时候全部设置为true
#
################################################################################
Capabilities
:
Global:
&ChannelCapabilitiesV1_1 :
trueOrderer :
&OrdererCapabilitiesV1_1 :
trueApplication :
&ApplicationCapabilitiesV1_2 :
true################################################################################ #
# SECTION: Application
#
################################################################################
Application
:
&ApplicationDefaultsOrganizations :
#################################################################################
# SECTION: Orderer
#
################################################################################
Orderer
:
&OrdererDefaults# Available types are "solo" and "kafka" # 共识机制 == 排序算法
OrdererType
:
# 排序方式Addresses solo :
# orderer节点的地址- :
7050 orderer.example.com# 端口不要改# BatchTimeout,MaxMessageCount,AbsoluteMaxBytes只要一个满足, 区块就会产生 BatchTimeout
:
# 多长时间产生一个区块BatchSize 2s :
MaxMessageCount:
10# 交易的最大数据量, 数量达到之后会产生区块, 建议100左右 AbsoluteMaxBytes :
# 数据量达到这个值, 会产生一个区块, 32M/64MPreferredMaxBytes 99 MB :
Kafka: 512 KB
Brokers:
-:
9092 127.0.0.1Organizations:
#################################################################################
# Profile
#
################################################################################
Profiles
:
# 不能改TwoOrgsOrdererGenesis :
# 区块名字, 随便改Capabilities :
<<:
*ChannelCapabilitiesOrderer :
<<:
*OrdererDefaultsOrganizations :
-*OrdererOrg
Capabilities :
<<:
*OrdererCapabilitiesConsortiums :
SampleConsortium:
# 这个名字可以改Organizations :
-*Org1
- *Org2
TwoOrgsChannel :
# 通道名字, 可以改Consortium :
# 这个名字对应93行Application SampleConsortium :
<<:
*ApplicationDefaultsOrganizations :
-*Org1
- *Org2
Capabilities :
<<:
*ApplicationCapabilities# configtx.yaml ---
按照要求编写的配置文件
################################################################################
#
# Section: Organizations
#
################################################################################
Organizations
:
-&OrdererOrg
Name :
ID: OrdererOrg
MSPDir: OrdererMSP
-- crypto&org_goconfig/ordererOrganizations/itcast.com/msp
Name :
ID: OrgGoMSP
MSPDir: OrgGoMSP
-AnchorPeers crypto:config/peerOrganizations/orggo.itcast.com/msp
-Host
: Port: peer0.orggo.itcast.com
7051- &org_cpp
Name :
ID: OrgCppMSP
MSPDir: OrgCppMSP
-AnchorPeers crypto:config/peerOrganizations/orgcpp.itcast.com/msp
-Host
: Port: peer0.orgcpp.itcast.com
7051################################################################################ #
# SECTION: Capabilities
#
################################################################################
Capabilities
:
Global:
&ChannelCapabilitiesV1_1 :
trueOrderer :
&OrdererCapabilitiesV1_1 :
trueApplication :
&ApplicationCapabilitiesV1_2 :
true################################################################################ #
# SECTION: Application
#
################################################################################
Application
:
&ApplicationDefaultsOrganizations :
#################################################################################
# SECTION: Orderer
#
################################################################################
Orderer
:
&OrdererDefaults# Available types are "solo" and "kafka" OrdererType
:
Addresses: solo
-:
7050 orderer.itcast.comBatchTimeout:
BatchSize: 2s
MaxMessageCount:
100AbsoluteMaxBytes :
PreferredMaxBytes: 32 MB
Kafka: 512 KB
Brokers:
-:
9092 127.0.0.1Organizations:
#################################################################################
# Profile
#
################################################################################
Profiles
:
ItcastOrgsOrdererGenesis:
Capabilities:
<<:
*ChannelCapabilitiesOrderer :
<<:
*OrdererDefaultsOrganizations :
-*OrdererOrg
Capabilities :
<<:
*OrdererCapabilitiesConsortiums :
SampleConsortium:
Organizations:
-*org_go
- *org_cpp
ItcastOrgsChannel :
Consortium:
Application: SampleConsortium
<<:
*ApplicationDefaultsOrganizations :
-*org_go
- *org_cpp
Capabilities :
<<:
*ApplicationCapabilities$ configtxgen -profile ItcastOrgsOrdererGenesis -outputBlock ./genesis.block
- 在当前目录下得到一个文件: genesis.block
$ configtxgen -profile ItcastOrgsChannel -outputCreateChannelTx channel.tx -channelID itcastchannel
执行命令生成文件
-profile 后边的参数从configtx.yaml中的Profiles 里边的配置项
生成创始块文件
# 每个组织都对应一个锚节点的更新文件
生成通道文件
# go组织锚节点文件
生成锚节点更新文件
这个 *** 作是可选的
# cpp组织锚节点文件
# 查看生成的文件
$ configtxgen -profile ItcastOrgsChannel -outputAnchorPeersUpdate GoMSPanchors.tx -channelID itcastchannel -asOrg OrgGoMSP
1
$ configtxgen -profile ItcastOrgsChannel -outputAnchorPeersUpdate CppMSPanchors.tx -channelID itcastchannel -asOrg OrgCppMSP
.
$ tree -L # 客户端docker容器启动之后, go的工作目录
GOPATH
├── channel-artifacts
├── channel.tx ----------> 生成的通道文件
├── configtx.yaml
├── CppMSPanchors.tx -----> 生成的cpp组织锚节点文件
├── crypto-config
├── crypto-config.yaml
├── genesis.block --------> 生成的创始块文件
└── GoMSPanchors.tx ------> 生成的go组织锚节点文件
3. docker-compose文件的编写
3.1 客户端角色需要使用的环境变量
=
- # 不需要修改# docker容器启动之后, 对应的守护进程的本地套接字, 不需要修改/opt/gopath CORE_VM_ENDPOINT
=
- CORE_LOGGING_LEVEL=unix:///host/var/run/docker.sock
- # 日志级别CORE_PEER_IDINFO =
- # 当前客户端节点的ID, 自己指定CORE_PEER_ADDRESScli =
- # 客户端连接的peer节点CORE_PEER_LOCALMSPIDpeer0.org1.example.com:7051 =
- # 组织IDCORE_PEER_TLS_ENABLED =
- # 通信是否使用tls加密CORE_PEER_TLS_CERT_FILEtrue =
- # 证书文件CORE_PEER_TLS_KEY_FILE =
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
- # 私钥文件= # 根证书文件
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
-CORE_PEER_TLS_ROOTCERT_FILE# 指定当前客户端的身份 CORE_PEER_MSPCONFIGPATH
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
=
- ORDERER_GENERAL_LOGLEVEL= /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
3.2 orderer节点需要使用的环境变量
- # 日志级别ORDERER_GENERAL_LISTENADDRESSINFO =
- 0.0# orderer节点监听的地址ORDERER_GENERAL_GENESISMETHOD.0.0 =
- # 创始块的来源, 指定file来源就是文件中# 创始块对应的文件, 这个不需要改file ORDERER_GENERAL_GENESISFILE
=
- ORDERER_GENERAL_LOCALMSPID=/var/hyperledger/orderer/orderer.genesis.block
- # orderer节点所属的组的IDORDERER_GENERAL_LOCALMSPDIROrdererMSP =
- # 当前节点的msp账号路径# enabled TLS/var/hyperledger/orderer/msp ORDERER_GENERAL_TLS_ENABLED
=
- # 是否使用tls加密ORDERER_GENERAL_TLS_PRIVATEKEYtrue =
- # 私钥ORDERER_GENERAL_TLS_CERTIFICATE/var/hyperledger/orderer/tls/server.key =
- # 证书ORDERER_GENERAL_TLS_ROOTCAS/var/hyperledger/orderer/tls/server.crt =
- []# 根证书/var/hyperledger/orderer/tls/ca.crtCORE_PEER_ID =
3.3 peer节点需要使用的环境变量
- # 当前peer节点的名字, 自己起# 当前peer节点的地址信息peer0.orggo.test.com CORE_PEER_ADDRESS
=
- # 启动的时候, 指定连接谁, 一般写自己就行CORE_PEER_GOSSIP_BOOTSTRAPpeer0.orggo.test.com:7051
=
- # 为了被其他节点感知到, 如果不设置别的节点不知有该节点的存在CORE_PEER_GOSSIP_EXTERNALENDPOINTpeer0.orggo.test.com:7051
=
- CORE_PEER_LOCALMSPID=peer0.orggo.test.com:7051
- # docker的本地套接字地址, 不需要改CORE_VM_ENDPOINTOrgGoMSP
=
- # 当前节点属于哪个网络CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODEunix:///host/var/run/docker.sock
=
- CORE_LOGGING_LEVEL=network_default
- CORE_PEER_TLS_ENABLED=INFO
- CORE_PEER_GOSSIP_USELEADERELECTION=true
- # 释放自动选举leader节点CORE_PEER_GOSSIP_ORGLEADERtrue =
- # 当前不是leaderCORE_PEER_PROFILE_ENABLEDfalse =
- # 在peer节点中有一个profile服务CORE_PEER_TLS_CERT_FILEtrue =
- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.crt
- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/server.key
-
### 3.3 peer节点需要使用的环境变量
```shell
- CORE_PEER_ID=peer0.orggo.test.com # 当前peer节点的名字, 自己起
# 当前peer节点的地址信息
- CORE_PEER_ADDRESS=peer0.orggo.test.com:7051
# 启动的时候, 指定连接谁, 一般写自己就行
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.orggo.test.com:7051
# 为了被其他节点感知到, 如果不设置别的节点不知有该节点的存在
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.orggo.test.com:7051
- CORE_PEER_LOCALMSPID=OrgGoMSP
# docker的本地套接字地址, 不需要改
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
# 当前节点属于哪个网络
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=network_default
- CORE_LOGGING_LEVEL=INFO
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_GOSSIP_USELEADERELECTION=true # 释放自动选举leader节点
- CORE_PEER_GOSSIP_ORGLEADER=false # 当前不是leader
- CORE_PEER_PROFILE_ENABLED=true # 在peer节点中有一个profile服务
- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
/etc/hyperledger/fabric/tls/ca.crt
ger/orderer/tls/ca.crt] # 根证书
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)