使用企业级部署工具部署BCOS

文章目录

  • 一、下载安装
    • 1、下载
    • 2、安装
    • 3、获取节点二进制
    • 4、检查二进制版本
  • 二、节点组网拓扑结构
  • 三、机器环境
  • 四、涉及机构
  • 五、关键流程
  • 六、联盟链初始化
    • 1、初始化链证书
    • 在证书颁发机构上进行操作,一条联盟链拥有唯一的链证书ca.crt
    • 2、初始化机构A
    • 3、初始化机构B
    • 4、机构A修改配置文件(机构B进行类似修改,将相应的配置换成B的配置)
    • 5、机构A生成并发送节点信息(机构B进行相应的操作,将A替换成B)
    • 6、机构A生成群组1创世区块
    • 7、机构A生成所属节点(机构B类似操作生成所属节点)

使用企业级部署工具

  • FISCO BCOS企业级部署工具面向于真实的多机构生产环境。为了保证机构的密钥安全,企业级部署工具提供了一种机构间相互合作部署联盟链方式。
  • 本文以部署4节点2机构1群组的组网模式,演示企业级部署工具的使用方法。更多参数选项说明请参考这里。
  • 本章节为多机构对等部署的过程,适用于多机构部署,机构私钥不出内网的情况。

一、下载安装

1、下载

$ cd ~/ && git clone https://github.com/FISCO-BCOS/generator.git

2、安装

此操作需要具有sudo权限

$ cd ~/generator && bash ./scripts/install.sh

检查是否安装成功,若成功,输出 usage: generator xxx

$ ./generator -h

3、获取节点二进制

拉取最新fisco-bcos二进制文件到meta中

$ ./generator --download_fisco ./meta

4、检查二进制版本

若成功,输出 FISCO-BCOS Version : x.x.x-x

$ ./meta/fisco-bcos -v

二、节点组网拓扑结构

一个如图所示的6节点3机构2群组的组网模式。机构B和机构C分别位于群组1和群组2中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hVRbYa7Y-1584456936233)(en-resource://database/737:1)]

机构A同属于群组1和群组2中。

本文使用4节点2机构1群组的组网模式,后续探讨6节点3机构2群组的组网模式。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ObPllglK-1584456936236)(en-resource://database/739:2)]

三、机器环境

每个节点的IP,端口号为如下:

机构 节点 所属群组 P2P地址 RPC/channel监听地址
机构A 节点0 群组1 公网ip:30300 内网ip:8545/:20200
节点1 群组1 公网ip:30301 内网ip:8546/:20201
机构B 节点2 群组1 公网ip:30300 内网ip:8545/:20200
节点3 群组1 公网ip:30301 内网ip:8546/:20201

备注
针对云服务器中的vps服务器,RPC监听地址需要写网卡中的真实地址(如内网地址或127.0.0.1),可能与用户登录的ssh服务器不一致。

四、涉及机构

搭链操作涉及多个机构的合作,包括:

  • 证书颁发机构
  • 搭建节点的机构(简称“机构”)

五、关键流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xx90LRao-1584456936237)(en-resource://database/741:1)]

六、联盟链初始化

1、初始化链证书

在证书颁发机构上进行操作,一条联盟链拥有唯一的链证书ca.crt

准备两台ubuntu18.04服务器,machineA,machineB。
用户名均为ubuntu
ip分别为machineA_ip、machineB_ip
以machineA作为证书颁发机构,命名为机构A,machineB所在的机构命名为机构B

  • 生成链证书
$ cd ~/generator
$ ./generator --generate_chain_certificate ./dir_chain_ca
# 查看链证书
$ ls ./dir_chain_ca
# 从左至右分别为链证书、链私钥
ca.crt  ca.key

2、初始化机构A

生成机构A证书

$ ./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyA

查看机构证书及私钥

$ ls dir_agency_ca/agencyA/
# 上述命令解释# 从左至右分别为机构证书、机构私钥、链证书
agency.crt  agency.key  ca.crt

发送链证书、机构证书、机构私钥至机构A,示例是通过文件拷贝的方式,从证书授权机构将机构证书发送给对应的机构,放到机构的工作目录的meta子目录下

$ cp ./dir_agency_ca/agencyA/* ~/generator/meta/

发送链证书到machineB

$ scp -r ./dir_chain_ca ubuntu@machineB_ip:/home/ubuntu/generator/dir_chain_ca

3、初始化机构B

生成机构B证书

$ ./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyB

查看机构证书及私钥

$ ls dir_agency_ca/agencyB/
# 上述命令解释# 从左至右分别为机构证书、机构私钥、链证书
agency.crt  agency.key  ca.crt

发送链证书、机构证书、机构私钥至机构A,示例是通过文件拷贝的方式,从证书授权机构将机构证书发送给对应的机构,放到机构的工作目录的meta子目录下

$ cp ./dir_agency_ca/agencyB/* ~/generator/meta/

一条联盟链中只能用到一个根证书ca.crt,多服务器部署时不要生成多个根证书和私钥。
一个群组只能有一个群组创世区块group.x.genesis

4、机构A修改配置文件(机构B进行类似修改,将相应的配置换成B的配置)

$ vim ./conf/node_deployment.ini
# 配置内容如下:
[group]group_id=1

[node0]
; host ip for the communication among peers.
; Please use your ssh login ip.
p2p_ip=machineA的公网ip
; listen ip for the communication between sdk clients.
; This ip is the same as p2p_ip for physical host.
; But for virtual host e.g. vps servers, it is usually different from p2p_ip.
; You can check accessible addresses of your network card.
; Please see https://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
;for more instructions.
rpc_ip=machineA的内网ip
p2p_listen_port=30300
channel_listen_port=20200
jsonrpc_listen_port=8545

[node1]
p2p_ip=machineA的公网ip
rpc_ip=machineA的内网ip
p2p_listen_port=30301
channel_listen_port=20201
jsonrpc_listen_port=8546

5、机构A生成并发送节点信息(机构B进行相应的操作,将A替换成B)

机构A生成节点证书及P2P连接信息文件,此步需要用到上述配置的node_deployment.ini,及机构meta文件夹下的机构证书与私钥,机构A生成节点证书及P2P连接信息文件。

$ ./generator --generate_all_certificates ./agencyA_node_info

查看生成文件:

$ ls ./agencyA_node_info
# 上述命令解释
# 从左至右分别为需要交互给机构A的节点证书,节点P2P连接地址文件(根据node_deployment.ini生成的本机构节点信息)
cert_machineA_IP_30300.crt cert_machineA_IP_30301.crt peers.txt

机构生成节点时需要指定其他节点的节点P2P连接地址,因此,A机构需将节点P2P连接地址文件发送至机构B。
发送节点P2P连接地址文件:

$ scp ./agencyA_node_info/peers.txt ubuntu@machineB_IP:/home/ubuntu/generator/meta/peersA.txt

生成创世区块的机构需要节点证书,示例中由A机构生成创世区块,因此B机构除了发送节点P2P连接地址文件外,还需发送节点证书至机构A。
发送节点证书(仅需机构B上操作):

$ scp ./agencyB_node_info/cert*.crt ubuntu@machineB_IP:/home/ubuntu/generator/meta/

6、机构A生成群组1创世区块

机构A修改conf文件夹下的group_genesis.ini

$ vim ./conf/group_genesis.ini
[group]
group_id=1

[nodes]
node0=machineA_IP:30300
node1=machineA_IP:30301
node2=machineB_IP:30300
node3=machineB_IP:30301

教程中选择机构A生成群组创世区块,实际生产中可以通过联盟链委员会协商选择。

此步会根据机构A的meta文件夹下配置的节点证书,生成group_genesis.ini配置的群组创世区块,教程中需要机构A的meta下有名为cert_machineA_IP_30300.crt,cert_machineA_IP_30301.crt,cert_machineA_IP_30300.crt,cert_machineA_IP_30301.crt的节点证书,此步需要用到机构B的节点证书。

$ ./generator --create_group_genesis ./group

分发群组1创世区块至机构B:

$ scp ./group/group.1.genesis ubuntu@machineB_IP:/home/ubuntu/generator/meta

7、机构A生成所属节点(机构B类似操作生成所属节点)

生成机构A所属节点,此命令会根据用户配置的node_deployment.ini文件生成相应的节点配置文件夹:
注意,此步指定的节点P2P连接信息peers.txt为群组内其他节点的链接信息,多个机构组网的情况下需要将其合并

$ ./generator --build_install_package ./meta/peersB.txt ./nodeA

查看生成节点配置文件夹:

$ ls ./nodeA
# 命令解释 此处采用tree风格显示
# 生成的文件夹nodeA信息如下所示,
├── monitor # monitor脚本
├── node_machineA_IP_30300 # machineA服务器 端口号30300的节点配置文件夹
├── node_machineA_30301
├── scripts # 节点的相关工具脚本
├── start_all.sh # 节点批量启动脚本
└── stop_all.sh # 节点批量停止脚本

机构A启动节点:

$ bash ./nodeA/start_all.sh
# 查看节点进程
$ ps -ef | grep fisco
# 查看节点log:
$ tail -f ./node*/node*/log/log*  | grep +++

待机构B按照上面的流程启动节点之后
至此,我们完成了如图所示机构A、B搭建群组1的操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LVwByCSX-1584456936238)(en-resource://database/739:2)]

你可能感兴趣的:(区块链,联盟链)