开发部署工具
重要
开发部署工具 build_chain脚本目标是让用户最快的使用FISCO BCOS,对于企业级应用部署FISCO BCOS请参考 运维部署工具 。
FISCO BCOS提供了build_chain.sh
脚本帮助用户快速搭建FISCO BCOS联盟链,该脚本默认从GitHub下载master
分支最新版本预编译可执行程序进行相关环境的搭建。
脚本功能简介
build_chain.sh
脚本用于快速生成一条链中节点的配置文件,脚本依赖于openssl
请根据自己的操作系统安装openssl 1.0.2
以上版本。脚本的源码位于FISCO-BCOS/tools/build_chain.sh。- 快速体验可以使用
-l
选项指定节点IP和数目。-f
选项通过使用一个指定格式的配置文件,支持创建各种复杂业务场景FISCO BCOS链。-l
和-f
选项必须指定一个且不可共存。 - 建议测试时使用
-T
,-T
开启log级别到DEBUG,p2p模块默认监听0.0.0.0
。
注解
为便于开发和体验,p2p模块默认监听IP是 0.0.0.0 ,出于安全考虑,请根据实际业务网络情况,修改为安全的监听地址,如内网IP或特定的外网IP
帮助
Usage:
-l <IP list> [Required] "ip1:nodeNum1,ip2:nodeNum2" e.g:"192.168.0.1:2,192.168.0.2:3"
-f <IP list file> [Optional] split by line, every line should be "ip:nodeNum agencyName groupList". eg "127.0.0.1:4 agency1 1,2"
-e <FISCO-BCOS binary path> Default download fisco-bcos from GitHub. If set -e, use the binary at the specified location
-o <Output Dir> Default ./nodes/
-p <Start Port> Default 30300,20200,8545 means p2p_port start from 30300, channel_port from 20200, jsonrpc_port from 8545
-v <FISCO-BCOS binary version> Default get version from https://github.com/FISCO-BCOS/FISCO-BCOS/releases. If set, use specificd version binary
-s <DB type> Default rocksdb. Options can be rocksdb / mysql / external / scalable, rocksdb is recommended
-d <docker mode> Default off. If set -d, build with docker
-c <Consensus Algorithm> Default PBFT. Options can be pbft / raft /rpbft, pbft is recommended
-C <Chain id> Default 1. Can set uint.
-g <Generate guomi nodes> Default no
-z <Generate tar packet> Default no
-t <Cert config file> Default auto generate
-T <Enable debug log> Default off. If set -T, enable debug log
-F <Disable log auto flush> Default on. If set -F, disable log auto flush
-h Help
e.g
./tools/build_chain.sh -l "127.0.0.1:4"
选项介绍
l
选项:
用于指定要生成的链的IP列表以及每个IP下的节点数,以逗号分隔。脚本根据输入的参数生成对应的节点配置文件,其中每个节点的端口号默认从30300开始递增,所有节点属于同一个机构和群组。
f
选项
+ 用于根据配置文件生成节点,相比于`l`选项支持更多的定制。
+ 按行分割,每一行表示一个服务器,格式为`IP:NUM AgencyName GroupList`,每行内的项使用空格分割,**不可有空行**。
+ `IP:NUM`表示机器的IP地址以及该机器上的节点数。`AgencyName`表示机构名,用于指定使用的机构证书。`GroupList`表示该行生成的节点所属的组,以`,`分割。例如`192.168.0.1:2 agency1 1,2`表示`ip`为`192.168.0.1`的机器上有两个节点,这两个节点属于机构`agency1`,属于group1和group2。
下面是一个配置文件的例子,每个配置项以空格分隔。
192.168.0.1:2 agency1 1,2
192.168.0.1:2 agency1 1,3
192.168.0.2:3 agency2 1
192.168.0.3:5 agency3 2,3
192.168.0.4:2 agency2 3
假设上述文件名为ipconf
,则使用下列命令建链,表示使用配置文件,设置日志级别为DEBUG
。
$ bash build_chain.sh -f ipconf -T
e
选项[Optional]
用于指定fisco-bcos
二进制所在的完整路径,脚本会将fisco-bcos
拷贝以IP为名的目录下。不指定时,默认从GitHub下载master
分支最新的二进制程序。
# 从GitHub下载下载最新release二进制,生成本机4节点
$ bash build_chain.sh -l "127.0.0.1:4"
# 使用 bin/fisco-bcos 二进制,生成本机4节点
$ bash build_chain.sh -l "127.0.0.1:4" -e bin/fisco-bcos
o
选项[Optional]
指定生成的配置所在的目录。
p
选项[Optional]
指定节点的起始端口,每个节点占用三个端口,分别是p2p,channel,jsonrpc使用,
分割端口,必须指定三个端口。同一个IP下的不同节点所使用端口从起始端口递增。
# 两个节点分别占用`30300,20200,8545`和`30301,20201,8546`。
$ bash build_chain.sh -l 127.0.0.1:2 -p 30300,20200,8545
v
选项[Optional]
用于指定搭建FISCO BCOS时使用的二进制版本。build_chain默认下载Release页面最新版本,设置该选项时下载参数指定version
版本并设置config.ini
配置文件中的[compatibility].supported_version=${version}
。如果同时使用-e
选项,则配置[compatibility].supported_version=${version}
为Release页面最新版本号。
d
选项[Optional]
使用docker模式搭建FISCO BCOS,使用该选项时不再拉取二进制,但要求用户启动节点机器安装docker且账户有docker权限,即用户加入docker群组。 在节点目录下执行如下命令启动节点
$ ./start.sh
该模式下 start.sh 脚本启动节点的命令如下
$ docker run -d --rm --name ${nodePath} -v ${nodePath}:/data --network=host -w=/data fiscoorg/fiscobcos:latest -c config.ini
s
选项[Optional]
有参数选项,参数为db名,目前支持rocksdb、mysql、external、scalable。默认使用RocksDB。
- RocksDB模式,使用RocksDB作为后端数据库。
- MySQL模式,使用MySQL作为后端数据库,节点直连MySQL,需要在群组ini文件中配置数据库相关信息。
- External模式,使用MySQL作为后端数据库,节点使用amdb-proxy连接数据库,代理和节点通过amop协议通信,需要在群组ini文件中配置topic信息。
- scalable模式,区块数据和状态数据存储在不同的数据库中,区块数据根据配置存储在以块高命名的RocksDB实例中。如需使用裁剪数据的功能,必须使用scalable模式。
c
选项[Optional]
有参数选项,参数为共识算法类型,目前支持PBFT、Raft、RPBFT。默认共识算法是PBFT。
C
选项[Optional]
用于指定搭建FISCO BCOS时的链标识。设置该选项时将使用参数设置config.ini
配置文件中的[chain].id
,参数范围为正整数,默认设置为1。
# 该链标识为2。
$ bash build_chain.sh -l 127.0.0.1:2 -C 2
g
选项[Optional]
无参数选项,设置该选项时,搭建国密版本的FISCO BCOS。使用g
选项时要求二进制fisco-bcos为国密版本。
z
选项[Optional]
无参数选项,设置该选项时,生成节点的tar包。
t
选项[Optional]
该选项用于指定生成证书时的证书配置文件。
T
选项[Optional]
无参数选项,设置该选项时,设置节点的log级别为DEBUG。log相关配置参考这里。
节点文件组织结构
- cert文件夹下存放链的根证书和机构证书。
- 以IP命名的文件夹下存储该服务器所有节点相关配置、
fisco-bcos
可执行程序、SDK所需的证书文件。 - 每个IP文件夹下的
node*
文件夹下存储节点所需的配置文件。其中config.ini
为节点的主配置,conf
目录下存储证书文件和群组相关配置。配置文件详情,请参考这里。每个节点中还提供start.sh
和stop.sh
脚本,用于启动和停止节点。 - 每个IP文件夹下的提供
start_all.sh
和stop_all.sh
两个脚本用于启动和停止所有节点。
nodes/
├── 127.0.0.1
│ ├── fisco-bcos # 二进制程序
│ ├── node0 # 节点0文件夹
│ │ ├── conf # 配置文件夹
│ │ │ ├── ca.crt # 链根证书
│ │ │ ├── group.1.genesis # 群组1初始化配置,该文件不可更改
│ │ │ ├── group.1.ini # 群组1配置文件
│ │ │ ├── node.crt # 节点证书
│ │ │ ├── node.key # 节点私钥
│ │ │ ├── node.nodeid # 节点id,公钥的16进制表示
│ │ ├── config.ini # 节点主配置文件,配置监听IP、端口等
│ │ ├── start.sh # 启动脚本,用于启动节点
│ │ └── stop.sh # 停止脚本,用于停止节点
│ ├── node1 # 节点1文件夹
│ │.....
│ ├── node2 # 节点2文件夹
│ │.....
│ ├── node3 # 节点3文件夹
│ │.....
│ ├── sdk # SDK需要用到的
│ │ ├── ca.crt # 链根证书
│ │ ├── sdk.crt # SKD所需的证书文件,建立连接时使用
│ │ └── sdk.key # SDK所需的私钥文件,建立连接时使用
├── cert # 证书文件夹
│ ├── agency # 机构证书文件夹
│ │ ├── agency.crt # 机构证书
│ │ ├── agency.key # 机构私钥
│ │ ├── agency.srl
│ │ ├── ca-agency.crt
│ │ ├── ca.crt
│ │ └── cert.cnf
│ ├── ca.crt # 链证书
│ ├── ca.key # 链私钥
│ ├── ca.srl
│ └── cert.cnf
使用举例
无外网条件的单群组
最简单的操作方式是在有外网的Linux机器上使用build_chain建好链,借助-z选项打包,然后拷贝到无外网的机器上运行。
- 针对某下场景下无外网条件下建链,请从发布页面下载最新的目标操作系统的二进制,例如对于Linux系统下载fisco-bcos.tar.gz。
- 请从发布页面下载最新版本的build_chain脚本。
- 上传fisco-bcos.tar.gz和build_chain.sh到目标服务器,需要注意目标服务器要求64位,要求安装有openssl 1.0.2以上版本。
- 解压fisco-bcos.tar.gz得到fisco-bcos可执行文件,作为-e选项的参数。
- 构建本机上4节点的FISCO BCOS联盟链,使用默认起始端口
30300,20200,8545
(4个节点会占用30300-30303
,20200-20203
,8545-8548
)。 - 执行下面的指令,假设最新版本是2.2.0,则将
2.2.0
作为-v选项参数。
# 构建FISCO BCOS联盟链
$ bash build_chain.sh -l "127.0.0.1:4" -p 30300,20200,8545 -e ./fisco-bcos -v 2.2.0
# 生成成功后,输出`All completed`提示
Generating CA key...
==============================================================
Generating keys ...
Processing IP:127.0.0.1 Total:4 Agency:agency Groups:1
==============================================================
Generating configurations...
Processing IP:127.0.0.1 Total:4 Agency:agency Groups:1
==============================================================
[INFO] FISCO-BCOS Path : bin/fisco-bcos
[INFO] Start Port : 30300 20200 8545
[INFO] Server IP : 127.0.0.1:4
[INFO] State Type : storage
[INFO] RPC listen IP : 127.0.0.1
[INFO] Output Dir : /Users/fisco/WorkSpace/FISCO-BCOS/tools/nodes
[INFO] CA Key Path : /Users/fisco/WorkSpace/FISCO-BCOS/tools/nodes/cert/ca.key
==============================================================
[INFO] All completed. Files in /Users/fisco/WorkSpace/FISCO-BCOS/tools/nodes
群组新增节点
本节以为上一小节生成的群组1新增一个共识节点为例操作。
为新节点生成私钥证书
接下来的操作,都在上一节生成的nodes/127.0.0.1
目录下进行
- 获取证书生成脚本
curl -LO https://raw.githubusercontent.com/FISCO-BCOS/FISCO-BCOS/master/tools/gen_node_cert.sh
注解
- 如果因为网络问题导致长时间无法下载,请尝试 curl -LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/raw/master/tools/gen\_node\_cert.sh
- 生成新节点私钥证书
# -c指定机构证书及私钥所在路径
# -o输出到指定文件夹,其中newNode/conf中会存在机构agency新签发的证书和私钥
bash gen_node_cert.sh -c ../cert/agency -o newNode
国密版本请执行下面的指令生成证书。
bash gen_node_cert.sh -c ../cert/agency -o newNodeGm -g ../gmcert/agency/
准备配置文件
拷贝群组1中节点node0配置文件与工具脚本
cp node0/config.ini newNode/config.ini
cp node0/conf/group.1.genesis newNode/conf/group.1.genesis
cp node0/conf/group.1.ini newNode/conf/group.1.ini
cp node0/*.sh newNode/
cp -r node0/scripts newNode/
更新
newNode/config.ini
中监听的IP和端口,对于[rpc]
模块,修改listen_ip
、channel_listen_port
和jsonrpc_listen_port
;对于[p2p]
模块,修改listen_port
将新节点的P2P配置中的IP和Port加入原有节点的config.ini中的[p2p]字段。假设新节点IP:Port为127.0.0.1:30304则,修改后的[P2P]配置为
注解
为便于开发和体验,p2p模块默认监听IP是 0.0.0.0 ,出于安全考虑,请根据实际业务网络情况,修改为安全的监听地址,如:内网IP或特定的外网IP
```bash
[p2p]
listen_ip=0.0.0.0
listen_port=30300
;enable_compress=true
; nodes to connect
node.0=127.0.0.1:30300
node.1=127.0.0.1:30301
node.2=127.0.0.1:30302
node.3=127.0.0.1:30303
node.4=127.0.0.1:30304
```
- 启动新节点,执行
newNode/start.sh
- 通过console将新节点加入群组1,请参考这里和这里,
nodeID
可以通过命令cat newNode/conf/node.nodeid
来获取 - 检查连接和共识
多服务器多群组
使用build_chain
脚本构建多服务器多群组的FISCO BCOS联盟链需要借助脚本配置文件,详细使用方式可以参考这里。