一键部署

one_click_generator.sh脚本为根据用户填写的节点配置,一键部署联盟链的脚本。脚本会根据用户指定文件夹下配置的node_deployment.ini,在文件夹下生成相应的节点。

本章主要以部署3机构2群组6节点的组网模式,为用户讲解单机构一键部署企业级部署工具的使用方法。

本教程适用于单机构搭建所有节点的部署方式,企业级部署工具多机构部署教程可以参考使用企业级部署工具

下载安装

下载

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

安装

此操作要求用户具有sudo权限。

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

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

  1. ./generator -h

获取节点二进制

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

  1. ./generator --download_fisco ./meta

检查二进制版本

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

  1. ./meta/fisco-bcos -v

PS源码编译节点二进制的用户,只需要用编译出来的二进制替换掉meta文件夹下的二进制即可。

背景介绍

本节以部署6节点3机构2群组的组网模式,演示如何使用企业级部署工具一键部署功能,搭建区块链。

节点组网拓扑结构

一个如图所示的6节点3机构2群组的组网模式。机构B和机构C分别位于群组1和群组2中。机构A同属于群组1和群组2中。

../../_images/one_click_step_3.png

机器环境

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

机构节点所属群组P2P地址RPC/channel监听地址
机构A节点0群组1、2127.0.0.1:30300127.0.0.1:8545/:20200
节点1群组1、2127.0.0.1:30301127.0.0.1:8546/:20201
节点4群组1、2127.0.0.1:30304127.0.0.1:8549/:20204
机构B节点2群组1127.0.0.1:30302127.0.0.1:8547/:20202
节点3群组1127.0.0.1:30303127.0.0.1:8548/:20203
机构C节点5群组1、2127.0.0.1:30305127.0.0.1:8550/:20205

重要

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

部署网络

首先完成如图所示机构A、B搭建群组1的操作:

../../_images/one_click_step_1.png

使用前用户需准备如图如tmp_one_click的文件夹,在文件夹下分别拥有不同机构的目录,每个机构目录下需要有对应的配置文件node_deployment.ini。使用前需要保证generator的meta文件夹没有进行过任何操作。

查看一键部署模板文件夹:

  1. cd ~/generator
  2. ls ./tmp_one_click
  1. # 参数解释
  2. # 如需多个机构,需要手动创建该文件夹
  3. tmp_one_click # 用户指定进行一键部署操作的文件夹
  4. ├── agencyA # 机构A目录,命令执行后会在该目录下生成机构A的节点及相关文件
  5.    └── node_deployment.ini # 机构A节点配置文件,一键部署命令会根据该文件生成相应节点
  6. └── agencyB # 机构B目录,命令执行后会在该目录下生成机构B的节点及相关文件
  7. └── node_deployment.ini # 机构B节点配置文件,一键部署命令会根据该文件生成相应节点

机构填写节点信息

教程中将配置文件放置与tmp_one_click文件夹下的agencyA, agencyB下

  1. cat > ./tmp_one_click/agencyA/node_deployment.ini << EOF
  2. [group]
  3. group_id=1
  4.  
  5. [node0]
  6. ; Host IP for the communication among peers.
  7. ; Please use your ssh login IP.
  8. p2p_ip=127.0.0.1
  9. ; listening IP for the communication between SDK clients.
  10. ; This IP is the same as p2p_ip for the physical host.
  11. ; But for virtual host e.g., VPS servers, it is usually different from p2p_ip.
  12. ; You can check accessible addresses of your network card.
  13. ; Please see https://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
  14. ; for more instructions.
  15. rpc_ip=127.0.0.1
  16. p2p_listen_port=30300
  17. channel_listen_port=20200
  18. jsonrpc_listen_port=8545
  19.  
  20. [node1]
  21. p2p_ip=127.0.0.1
  22. rpc_ip=127.0.0.1
  23. p2p_listen_port=30301
  24. channel_listen_port=20201
  25. jsonrpc_listen_port=8546
  26. EOF
  1. cat > ./tmp_one_click/agencyB/node_deployment.ini << EOF
  2. [group]
  3. group_id=1
  4.  
  5. [node0]
  6. ; Host IP for the communication among peers.
  7. ; Please use your ssh login IP.
  8. p2p_ip=127.0.0.1
  9. ; listening IP for the communication between SDK clients.
  10. ; This IP is the same as p2p_ip for the physical host.
  11. ; But for virtual host e.g., VPS servers, it is usually different from p2p_ip.
  12. ; You can check accessible addresses of your network card.
  13. ; Please see https://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
  14. ; for more instructions.
  15. rpc_ip=127.0.0.1
  16. p2p_listen_port=30302
  17. channel_listen_port=20202
  18. jsonrpc_listen_port=8547
  19.  
  20. [node1]
  21. p2p_ip=127.0.0.1
  22. rpc_ip=127.0.0.1
  23. p2p_listen_port=30303
  24. channel_listen_port=20203
  25. jsonrpc_listen_port=8548
  26. EOF

生成节点

  1. bash ./one_click_generator.sh -b ./tmp_one_click

执行完毕后,./tmp_one_click文件夹结构如下:

查看执行后的一键部署模板文件夹:

  1. ls ./tmp_one_click
  1. ├── agencyA # A机构文件夹
  2.    ├── agency_cert # A机构证书及私钥
  3.    ├── generator-agency # 自动代替A机构进行操作的generator文件夹
  4.    ├── node # A机构生成的节点,多机部署时推送至对应服务器即可
  5.    ├── node_deployment.ini # A机构的节点配置信息
  6.    └── sdk # A机构的sdk或控制台配置文件
  7. ├── agencyB
  8. | ├── agency_cert
  9. | ├── generator-agency
  10. | ├── node
  11. | ├── node_deployment.ini
  12. | └── sdk
  13. |── ca.crt # 链证书
  14. |── ca.key # 链私钥
  15. |── group.1.genesis # 群组1创世区块
  16. |── peers.txt # 节点的peers.txt信息

启动节点

调用脚本启动节点:

  1. bash ./tmp_one_click/agencyA/node/start_all.sh
  1. bash ./tmp_one_click/agencyB/node/start_all.sh

查看节点进程:

  1. ps -ef | grep fisco
  1. # 命令解释
  2. # 可以看到如下进程
  3. fisco 15347 1 0 17:22 pts/2 00:00:00 ~/generator/tmp_one_click/agencyA/node/node_127.0.0.1_30300/fisco-bcos -c config.ini
  4. fisco 15402 1 0 17:22 pts/2 00:00:00 ~/generator/tmp_one_click/agencyA/node/node_127.0.0.1_30301/fisco-bcos -c config.ini
  5. fisco 15442 1 0 17:22 pts/2 00:00:00 ~/generator/tmp_one_click/agencyB/node/node_127.0.0.1_30302/fisco-bcos -c config.ini
  6. fisco 15456 1 0 17:22 pts/2 00:00:00 ~/generator/tmp_one_click/agencyB/node/node_127.0.0.1_30303/fisco-bcos -c config.ini

查看节点运行状态

查看节点log:

  1. tail -f ~/generator/tmp_one_click/agency*/node/node*/log/log* | grep +++
  1. # 命令解释
  2. # +++即为节点正常共识
  3. info|2019-02-25 17:25:56.028692| [g:1][p:264][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,myIdx=0,hash=833bd983...
  4. info|2019-02-25 17:25:59.058625| [g:1][p:264][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,myIdx=0,hash=343b1141...
  5. info|2019-02-25 17:25:57.038284| [g:1][p:264][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,myIdx=1,hash=ea85c27b...

新增节点 (扩容新节点)

接下来,我们为机构A和机构C增加新节点,完成下图所示的组网:

../../_images/one_click_step_2.png

初始化扩容配置

创建扩容文件夹,示例中tmp_one_click_expand可以为任意名称,请每次扩容使用新的文件夹

  1. mkdir ~/generator/tmp_one_click_expand/

拷贝链证书及私钥至扩容文件夹

  1. cp ~/generator/tmp_one_click/ca.* ~/generator/tmp_one_click_expand/

拷贝群组1创世区块group.1.genesis至扩容文件夹

  1. cp ~/generator/tmp_one_click/group.1.genesis ~/generator/tmp_one_click_expand/

拷贝群组1节点P2P连接文件peers.txt至扩容文件夹

  1. cp ~/generator/tmp_one_click/peers.txt ~/generator/tmp_one_click_expand/

机构A配置节点信息

创建机构A扩容节点所在目录

  1. mkdir ~/generator/tmp_one_click_expand/agencyA

此时机构A已经存在联盟链中,因此需拷贝机构A证书、私钥至对应文件夹

  1. cp -r ~/generator/tmp_one_click/agencyA/agency_cert ~/generator/tmp_one_click_expand/agencyA

机构A填写节点配置信息

  1. cat > ./tmp_one_click_expand/agencyA/node_deployment.ini << EOF
  2. [group]
  3. group_id=1
  4.  
  5. [node0]
  6. ; Host IP for the communication among peers.
  7. ; Please use your ssh login IP.
  8. p2p_ip=127.0.0.1
  9. ; listening IP for the communication between SDK clients.
  10. ; This IP is the same as p2p_ip for the physical host.
  11. ; But for virtual host e.g., VPS servers, it is usually different from p2p_ip.
  12. ; You can check accessible addresses of your network card.
  13. ; Please see https://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
  14. ; for more instructions.
  15. rpc_ip=127.0.0.1
  16. p2p_listen_port=30304
  17. channel_listen_port=20204
  18. jsonrpc_listen_port=8549
  19. EOF

机构C配置节点信息

创建机构C扩容节点所在目录

  1. mkdir ~/generator/tmp_one_click_expand/agencyC

机构C填写节点配置信息

  1. cat > ./tmp_one_click_expand/agencyC/node_deployment.ini << EOF
  2. [group]
  3. group_id=1
  4.  
  5. [node0]
  6. ; Host IP for the communication among peers.
  7. ; Please use your ssh login IP.
  8. p2p_ip=127.0.0.1
  9. ; listening IP for the communication between SDK clients.
  10. ; This IP is the same as p2p_ip for the physical host.
  11. ; But for virtual host e.g., VPS servers, it is usually different from p2p_ip.
  12. ; You can check accessible addresses of your network card.
  13. ; Please see https://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
  14. ; for more instructions.
  15. rpc_ip=127.0.0.1
  16. p2p_listen_port=30305
  17. channel_listen_port=20205
  18. jsonrpc_listen_port=8550
  19. EOF

生成扩容节点

  1. bash ./one_click_generator.sh -e ./tmp_one_click_expand

启动新节点

调用脚本启动节点:

  1. bash ./tmp_one_click_expand/agencyA/node/start_all.sh
  1. bash ./tmp_one_click_expand/agencyC/node/start_all.sh

查看节点进程:

  1. ps -ef | grep fisco
  1. # 命令解释
  2. # 可以看到如下进程
  3. fisco 15347 1 0 17:22 pts/2 00:00:00 ~/generator/tmp_one_click/agencyA/node/node_127.0.0.1_30300/fisco-bcos -c config.ini
  4. fisco 15402 1 0 17:22 pts/2 00:00:00 ~/generator/tmp_one_click/agencyA/node/node_127.0.0.1_30301/fisco-bcos -c config.ini
  5. fisco 15403 1 0 17:22 pts/2 00:00:00 ~/generator/tmp_one_click_expand/agencyA/node/node_127.0.0.1_30304/fisco-bcos -c config.ini
  6. fisco 15442 1 0 17:22 pts/2 00:00:00 ~/generator/tmp_one_click/agencyB/node/node_127.0.0.1_30302/fisco-bcos -c config.ini
  7. fisco 15456 1 0 17:22 pts/2 00:00:00 ~/generator/tmp_one_click/agencyB/node/node_127.0.0.1_30303/fisco-bcos -c config.ini
  8. fisco 15466 1 0 17:22 pts/2 00:00:00 ~/generator/tmp_one_click_expand/agencyC/node/node_127.0.0.1_30305/fisco-bcos -c config.ini

重要

为群组1扩容的新节点需要使用sdk或控制台加入到群组中。

使用控制台注册节点

由于控制台体积较大,一键部署中没有直接集成,用户可以使用以下命令获取控制台

获取控制台,可能需要较长时间,国内用户可以使用--cdn命令:

以机构A使用控制台为例,此步需要切换到机构A对应的generator-agency文件夹

  1. cd ~/generator/tmp_one_click/agencyA/generator-agency
  1. ./generator --download_console ./ --cdn

查看机构A节点4

机构A使用控制台加入机构A节点4为共识节点,其中参数第二项需要替换为加入节点的nodeid,nodeid在节点文件夹的conf的node.nodeid文件

查看机构A节点nodeid:

  1. cat ~/generator/tmp_one_click_expand/agencyA/node/node_127.0.0.1_30304/conf/node.nodeid
  1. # 命令解释
  2. # 可以看到类似于如下nodeid,控制台使用时需要传入该参数
  3. ea2ca519148cafc3e92c8d9a8572b41ea2f62d0d19e99273ee18cccd34ab50079b4ec82fe5f4ae51bd95dd788811c97153ece8c05eac7a5ae34c96454c4d3123

使用控制台注册共识节点

启动控制台:

  1. cd ~/generator/tmp_one_click/agencyA/generator-agency/console && bash ./start.sh 1

使用控制台addSealer命令将节点注册为共识节点,此步需要用到cat命令查看得到机构A节点的node.nodeid

  1. addSealer ea2ca519148cafc3e92c8d9a8572b41ea2f62d0d19e99273ee18cccd34ab50079b4ec82fe5f4ae51bd95dd788811c97153ece8c05eac7a5ae34c96454c4d3123
  1. # 命令解释
  2. # 执行成功会提示success
  3. $ [group:1]> addSealer ea2ca519148cafc3e92c8d9a8572b41ea2f62d0d19e99273ee18cccd34ab50079b4ec82fe5f4ae51bd95dd788811c97153ece8c05eac7a5ae34c96454c4d3123
  4. {
  5. "code":0,
  6. "msg":"success"
  7. }

退出控制台:

  1. exit

查看机构C节点5

机构A使用控制台加入机构C的节点5为观察节点,其中参数第二项需要替换为加入节点的nodeid,nodeid在节点文件夹的conf的node.nodeid文件

查看机构C节点nodeid:

  1. cat ~/generator/tmp_one_click_expand/agencyC/node/node_127.0.0.1_30305/conf/node.nodeid
  1. # 命令解释
  2. # 可以看到类似于如下nodeid,控制台使用时需要传入该参数
  3. 5d70e046047e15a68aff8e32f2d68d1f8d4471953496fd97b26f1fbdc18a76720613a34e3743194bd78aa7acb59b9fa9aec9ec668fa78c54c15031c9e16c9e8d

使用控制台注册观察节点

启动控制台:

  1. cd ~/generator/tmp_one_click/agencyA/generator-agency/console && bash ./start.sh 1

使用控制台addObserver命令将节点注册为观察节点,此步需要用到cat命令查看得到机构C节点的node.nodeid

  1. addObserver 5d70e046047e15a68aff8e32f2d68d1f8d4471953496fd97b26f1fbdc18a76720613a34e3743194bd78aa7acb59b9fa9aec9ec668fa78c54c15031c9e16c9e8d
  1. # 命令解释
  2. # 执行成功会提示success
  3. $ [group:1]> addObserver 5d70e046047e15a68aff8e32f2d68d1f8d4471953496fd97b26f1fbdc18a76720613a34e3743194bd78aa7acb59b9fa9aec9ec668fa78c54c15031c9e16c9e8d
  4. {
  5. "code":0,
  6. "msg":"success"
  7. }

退出控制台:

  1. exit

至此,我们完成了新增节点至现有群组的操作。

新增群组 (扩容新群组)

新建群组的操作用户可以在执行one_click_generator.sh脚本的目录下,通过修改./conf/group_genesis.ini文件,并执行--create_group_genesis命令。

为如图4个节点生成群组2

../../_images/one_click_step_3.png

配置群组2创世区块

重要

此操作需要在和上述操作generator下执行。

  1. cd ~/generator

配置群组创世区块文件,指定group_id为2。并在[node]下指定新群组中各个节点的IP和P2P端口,分别为机构A-节点0,机构A-节点1,机构A-节点4和机构C-节点5。

  1. cat > ./conf/group_genesis.ini << EOF
  2. [group]
  3. group_id=2
  4.  
  5. [nodes]
  6. node0=127.0.0.1:30300
  7. node1=127.0.0.1:30301
  8. node2=127.0.0.1:30304
  9. node3=127.0.0.1:30305
  10. EOF

获取对应节点证书

机构A-节点0(node0=127.0.0.1:30300

  1. cp ~/generator/tmp_one_click/agencyA/generator-agency/meta/cert_127.0.0.1_30300.crt ~/generator/meta

机构A-节点1(node1=127.0.0.1:30301

  1. cp ~/generator/tmp_one_click/agencyA/generator-agency/meta/cert_127.0.0.1_30301.crt ~/generator/meta

机构A-节点4(node2=127.0.0.1:30304

  1. cp ~/generator/tmp_one_click_expand/agencyA/generator-agency/meta/cert_127.0.0.1_30304.crt ~/generator/meta

机构C-节点5(node3=127.0.0.1:30305

  1. cp ~/generator/tmp_one_click_expand/agencyC/generator-agency/meta/cert_127.0.0.1_30305.crt ~/generator/meta

生成群组创世区块

  1. ./generator --create_group_genesis ./group2

将群组创世区块加入现有节点:

机构A-节点0(node0=127.0.0.1:30300

  1. ./generator --add_group ./group2/group.2.genesis ./tmp_one_click/agencyA/node/node_127.0.0.1_30300

机构A-节点1(node1=127.0.0.1:30301

  1. ./generator --add_group ./group2/group.2.genesis ./tmp_one_click/agencyA/node/node_127.0.0.1_30301

机构A-节点4(node2=127.0.0.1:30304

  1. ./generator --add_group ./group2/group.2.genesis ./tmp_one_click_expand/agencyA/node/node_127.0.0.1_30304

机构C-节点5(node3=127.0.0.1:30305

  1. ./generator --add_group ./group2/group.2.genesis ./tmp_one_click_expand/agencyC/node/node_127.0.0.1_30305

加载、启动新群组

节点在运行时,可直接用脚本load_new_groups.sh加载新群组

机构A-节点0(node0=127.0.0.1:30300

  1. bash ./tmp_one_click/agencyA/node/node_127.0.0.1_30300/scripts/load_new_groups.sh

机构A-节点1(node1=127.0.0.1:30301

  1. bash ./tmp_one_click/agencyA/node/node_127.0.0.1_30301/scripts/load_new_groups.sh

机构A-节点4(node2=127.0.0.1:30304

  1. bash ./tmp_one_click_expand/agencyA/node/node_127.0.0.1_30304/scripts/load_new_groups.sh

机构C-节点5(node3=127.0.0.1:30305

  1. bash ./tmp_one_click_expand/agencyC/node/node_127.0.0.1_30305/scripts/load_new_groups.sh

查看节点

查看节点log内group1信息:

  1. tail -f ~/generator/tmp_one_click/agency*/node/node*/log/log* | grep g:2 | grep +++
  1. # 命令解释
  2. # +++即为节点正常共识
  3. info|2019-02-25 17:25:56.028692| [g:2][p:264][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,myIdx=0,hash=833bd983...
  4. info|2019-02-25 17:25:59.058625| [g:2][p:264][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,myIdx=0,hash=343b1141...
  5. info|2019-02-25 17:25:57.038284| [g:2][p:264][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,myIdx=1,hash=ea85c27b...

至此 我们完成了所示构建教程中的所有操作。

注解

使用完成后建议用以下命令对meta文件夹进行清理:

  • rm ./meta/cert_*
  • rm ./meta/group*

更多操作

更多操作,可以参考操作手册,或企业工具对等部署教程

如果使用该教程遇到问题,请查看FAQ