FISCO BCOS docker

构建docker运行环境

说明

使用物料包同样可以构建基于docker节点的区块链的搭建, 使用方式与构建普通节点的区块链比较类似, 区别在于最终启动的docker节点。

配置

  1. [docker]
  2. * 当前是否构建docker节点的安装包. 0:否 1:是
  3. docker_toggle=1
  4. * docker仓库地址
  5. docker_repository=fiscoorg/fisco-octo
  6. * docker版本号.
  7. docker_version=v1.3.x-latest
  • docker_toggle构建docker节点环境时, docker_toggle设置为1。

  • docker_repositorydocker镜像仓库, 用户一般不需要修改。

  • docker_versiondocker版本号, 使用默认值即可, 版本更新时, 本地可以自动更新至最新版本。

配置节点信息

同样以在三台服务器上部署区块链为例:

服务器ip : 172.20.245.42 172.20.245.43 172.20.245.44机构分别为: agent_0 agent_1 agent_2节点数目 : 每台服务器搭建两个节点修改[nodes] section字段为:

  1. [nodes]
  2. node0=172.20.245.42 0.0.0.0 2 agent_0
  3. node1=172.20.245.43 0.0.0.0 2 agent_1
  4. node2=172.20.245.44 0.0.0.0 2 agent_2

构建安装包

执行成功会输出Building end! 并生成build目录

  1. build/
  2. ├── 172.20.245.42_agent_0_genesis
  3. ├── 172.20.245.43_agent_1
  4. ├── 172.20.245.44_agent_2
  5. ├── stderr.log
  6. └── temp

将安装包上传到对应的服务器。

安装

进入安装目录, 执行./install_node, 成功之后会生成 docker 目录

  1. docker/
  2. ├── node0
  3. ├── node1
  4. ├── register0.sh
  5. ├── register1.sh
  6. ├── start0.sh
  7. ├── start1.sh
  8. ├── start.sh
  9. ├── stop0.sh
  10. ├── stop1.sh
  11. ├── stop.sh
  12. ├── unregister0.sh
  13. └── unregister1.sh
  • nodeIDX : 第IDX个节点的目录, 该目录会被映射到docker的/fisco-bcos/node/目录, 这两个目录中的内容是一致的
  • nodeIDX/log : 日志目录
  • start.sh 启动所有的docker节点
  • stop.sh 停止所有的docker节点
  • startIDX.sh 启动第IDX个docker节点
  • stopIDX.sh 停止第IDX个节点
  • registerIDX.sh 扩容时使用, 将第IDX个节点注册入节点管理合约, 调用的是docker中的node_manager.sh脚本, 扩容时使用
  • unregisterIDX.sh 将IDX个节点从节点管理合约删除, 调用的是node_manager.sh脚本

启动

在docker目录执行start.sh脚本

注意:要先启动创世块节点所在的服务器上的节点!!!

  1. ./start.sh
  2. start node0 ...
  3. 705b6c0e380029019a26e954e72da3748e29cec95a508bc1a8365abcfc36b86c
  4. start node1 ...
  5. be8bd964322a08a70f22be9ba15082dbe50d1729f955291586a0503e32d2225f

验证

  • docker ps通过docker ps命令查看docker节点是否启动正常
  1. docker ps -f name="fisco*"
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. be8bd964322a fiscoorg/fisco-octo:v1.3.x-latest "/fisco-bcos/start_n…" 21 minutes ago Up 21 minutes fisco-node1_8546
  4. 705b6c0e3800 fiscoorg/fisco-octo:v1.3.x-latest "/fisco-bcos/start_n…" 22 minutes ago Up 22 minutes fisco-node0_8545

启动的两个docker节点的容器id分别为: be8bd964322a、705b6c0e3800, docker节点的STATUS状态为Up, 说明节点正常启动。

  • 日志验证
  1. tail -f node0/log/log_*.log | egrep "seal"
  2. INFO|2018-08-13 11:52:38:534|PBFTClient.cpp:343|+++++++++++++++++++++++++++ Generating seal onec61bbf7cb6152d523f391dfe65dd1f858ec3daa7b6df697308a0ad5219cf232#1tx:0,maxtx:1000,tq.num=0time:1534161158534
  3. INFO|2018-08-13 11:52:40:550|PBFTClient.cpp:343|+++++++++++++++++++++++++++ Generating seal on127962f94ccb075a448ae741e69718ffc0bee4f97ccddb7bd5e8a0310f4b8980#1tx:0,maxtx:1000,tq.num=0time:1534161160550
  4. INFO|2018-08-13 11:52:42:564|PBFTClient.cpp:343|+++++++++++++++++++++++++++ Generating seal on29ccca512d7e2bac34760e8c17807896dac914b426884a0bc28499a556811467#1tx:0,maxtx:1000,tq.num=0time:1534161162564

说明节点周期性共识, 出块。

  • 进入docker容器部署合约。docker运行之后, docker镜像内部是一个完整的fisco-bcos的运行环境, 包括js的工具都是可用的, 可以进入docker镜像内部进行合约的部署。

以be8bd964322a为例

  1. $ sudo docker exec -it be8bd964322a /bin/bash
  • 加载环境变量执行 source /etc/profile加载docker内部的一些环境变量。

  • 目录

  1. $ cd /fisco-bcos

目录结构如下:

  1. /fisco-bcos/
  2. ├── node
  3. ├── config.json
  4. ├── fisco-data
  5. ├── genesis.json
  6. ├── log
  7. └── start.sh
  8. ├── tool
  9. ├── systemcontract
  10. ├── web3sdk
  11. ├── nodejs
  12. ├── web3lib
  13. └── nodejs
  • /fisco-bcos/node : 节点目录
  • /fisco-bcos/node/fisco-data : 数据目录
  • /fisco-bcos/node/log : 日志目录
  • /fisco-bcos/systemcontract : nodejs系统合约工具
  • /fisc-bcos/tool : nodejs工具
  • /fisco-bcos/web3lib : nodejs基础库
  • /fisco-bcos/web3sdk : web3sdk环境
  • 部署合约进入tool目录, 部署合约
  1. $ cd /fisco-bcos/tool
  2. $ babel-node deploy.js HelloWorld
  3. RPC=http://0.0.0.0:8546
  4. Ouputpath=./output/
  5. deploy.js ........................Start........................
  6. Soc File :HelloWorld
  7. HelloWorldcomplie success
  8. send transaction success: 0x726e328e5b53ddb3ce040424304ffd61e9ae277d6441068c45ad590003c7426a
  9. HelloWorldcontract address 0x4437f8c9cd1e6a3e8ec9c3460c4bc209acdca052
  10. HelloWorld deploy success!
  11. cns add operation => cns_name = HelloWorld
  12. cns_name =>HelloWorld
  13. contract =>HelloWorld
  14. version =>
  15. address =>0x4437f8c9cd1e6a3e8ec9c3460c4bc209acdca052
  16. abi =>[{"constant":false,"inputs":[{"name":"n","type":"string"}],"name":"set","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"}]
  17. send transaction success: 0xa280d823346e1b7ea332a2b4d7a7277ae380b0cc7372bef396c5205fa74b25ae

扩容

与普通节点的扩容流程类似, 大体来说, 构建扩容安装包, 启动节点, 将扩容的节点入网(加入节点管理合约)。

  • 构建扩容安装包参考 扩容流程 构建扩容机器上的安装包。

  • 安装启动将扩容服务器上传对应的服务器, 进入安装目录, 执行./install_node

执行成功之后生成docker目录

启动docker节点

  1. $ cd docker
  2. $ ./start.sh
  • 节点入网docker目录下registerIDX.sh脚本为注册脚本。

  1. $ ./register0.sh

=====INIT ECDSA KEYPAIR From private key===node.json=file:/fisco-bcos/node/fisco-data/node.json

$ ./register1.sh

=====INIT ECDSA KEYPAIR From private key===node.json=file:/fisco-bcos/node/fisco-data/node.json

  • 验证查看 log
  1. tail -f node0/log/log*.log | egrep "seal"
  2. INFO|2018-08-13 12:00:18:710|PBFTClient.cpp:343|+++++++++++++++++++++++++++ Generating seal on26c826ad8d275cd2c3c53a034818acce222ad7dc8ef455de64efbf193748c9ef#1tx:0,maxtx:1000,tq.num=0time:1534161618710
  3. INFO|2018-08-13 13:00:02:040|PBFTClient.cpp:343|+++++++++++++++++++++++++++ Generating seal onb7a72e68cbc43293dac635b3c868e83ecbe24c3f1b72e0d57a809ee72bad9ca5#4tx:0,maxtx:0,tq.num=0time:1534165202040
  4. INFO|2018-08-13 13:54:25:054|PBFTClient.cpp:343|+++++++++++++++++++++++++++ Generating seal one2d93621481bf613b065f254519bbc32689d3b2eb8c5a1680c0f4d57531f7ef5#5tx:0,maxtx:0,tq.num=0time:1534168465054

私钥证书管理

  • 物料包使用FISCO BCOS的工具分配证书, 工具位于下载的FSICO-BCOS目录的cert子目录, 使用方式参考FISCO-BCOS 证书生成工具
  • 构建完成各个服务器的安装包之后, 整条链的根证书、机构证书会保存在创世节点所在服务器的dependencies/cert目录 保存的目录结构为:
  1. cert目录
  2. ca.crt
  3. ca.key
  4. 机构名称子目录
  5. agency.crt
  6. agency.key
  • 以上面示例的配置为例, 创世节点服务器cert目录内容(详见使用指南中证书说明):
  1. ca.crt
  2. ca.key
  3. agent_0\
  4. agency.crt
  5. agency.key
  6. agent_1\
  7. agency.crt
  8. agency.key
  9. agent_2\
  10. agency.crt
  11. agency.key
  • ca.crt 链证书
  • ca.key 链证书私钥
  • agent_0\agency.crt agent_0机构证书
  • agent_0\agency.key agent_0机构证书私钥
  • agent_1\agency.crt agent_1机构证书
  • agent_1\agency.key agent_1机构证书私钥
  • agent_2\agency.crt agent_2机构证书
  • agent_2\agency.key agent_2机构证书私钥