FISCO BCOS docker

构建docker运行环境

说明

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

配置

[docker]
* 当前是否构建docker节点的安装包. 0:否    1:是
docker_toggle=1
* docker仓库地址
docker_repository=fiscoorg/fisco-octo
* docker版本号.
docker_version=v1.3.x-latest
  • docker_toggle

构建docker节点环境时, docker_toggle设置为1。

  • docker_repository

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

  • docker_version

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

配置节点信息

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

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

[nodes]
node0=192.168.1.42  0.0.0.0  2  agent_0
node1=192.168.1.43  0.0.0.0  2  agent_1
node2=192.168.1.44  0.0.0.0  2  agent_2

构建安装包

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

build/
├── 192.168.1.42_agent_0_genesis
├── 192.168.1.43_agent_1
├── 192.168.1.44_agent_2
├── stderr.log
└── temp

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

安装

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

docker/
├── node0
├── node1
├── register0.sh
├── register1.sh
├── start0.sh
├── start1.sh
├── start.sh
├── stop0.sh
├── stop1.sh
├── stop.sh
├── unregister0.sh
└── 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脚本

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

 ./start.sh 
start node0 ...
705b6c0e380029019a26e954e72da3748e29cec95a508bc1a8365abcfc36b86c
start node1 ...
be8bd964322a08a70f22be9ba15082dbe50d1729f955291586a0503e32d2225f

验证

  • docker ps

通过docker ps命令查看docker节点是否启动正常

docker ps  -f name="fisco*"
CONTAINER ID        IMAGE                               COMMAND                  CREATED             STATUS              PORTS               NAMES
be8bd964322a        fiscoorg/fisco-octo:v1.3.x-latest   "/fisco-bcos/start_n…"   21 minutes ago      Up 21 minutes                           fisco-node1_8546
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, 说明节点正常启动。

  • 日志验证
tail -f node0/log/log_*.log | egrep "seal"
INFO|2018-08-13 11:52:38:534|PBFTClient.cpp:343|+++++++++++++++++++++++++++ Generating seal onec61bbf7cb6152d523f391dfe65dd1f858ec3daa7b6df697308a0ad5219cf232#1tx:0,maxtx:1000,tq.num=0time:1534161158534
INFO|2018-08-13 11:52:40:550|PBFTClient.cpp:343|+++++++++++++++++++++++++++ Generating seal on127962f94ccb075a448ae741e69718ffc0bee4f97ccddb7bd5e8a0310f4b8980#1tx:0,maxtx:1000,tq.num=0time:1534161160550
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为例

$ sudo docker exec -it be8bd964322a /bin/bash
  • 加载环境变量

执行 source /etc/profile加载docker内部的一些环境变量。

  • 目录
$ cd /fisco-bcos

目录结构如下:

/fisco-bcos/
├── node
│   ├── config.json
│   ├── fisco-data   
│   ├── genesis.json
│   ├── log
│   └── start.sh
├── tool
├── systemcontract
├── web3sdk
├── nodejs
├── web3lib
└── 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目录, 部署合约

$ cd /fisco-bcos/tool
$ babel-node deploy.js HelloWorld     
RPC=http://0.0.0.0:8546
Ouputpath=./output/
deploy.js  ........................Start........................
Soc File :HelloWorld
HelloWorldcomplie success!
send transaction success: 0x726e328e5b53ddb3ce040424304ffd61e9ae277d6441068c45ad590003c7426a
HelloWorldcontract address 0x4437f8c9cd1e6a3e8ec9c3460c4bc209acdca052
HelloWorld deploy success!
cns add operation => cns_name = HelloWorld
         cns_name =>HelloWorld
         contract =>HelloWorld
         version  =>
         address  =>0x4437f8c9cd1e6a3e8ec9c3460c4bc209acdca052
         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"}]
send transaction success: 0xa280d823346e1b7ea332a2b4d7a7277ae380b0cc7372bef396c5205fa74b25ae

扩容

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

  • 构建扩容安装包

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

  • 安装启动

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

执行成功之后生成docker目录

启动docker节点

$ cd docker
$ ./start.sh
  • 节点入网

docker目录下registerIDX.sh脚本为注册脚本。

$ ./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

 tail -f node0/log/log*.log | egrep "seal"
INFO|2018-08-13 12:00:18:710|PBFTClient.cpp:343|+++++++++++++++++++++++++++ Generating seal on26c826ad8d275cd2c3c53a034818acce222ad7dc8ef455de64efbf193748c9ef#1tx:0,maxtx:1000,tq.num=0time:1534161618710
INFO|2018-08-13 13:00:02:040|PBFTClient.cpp:343|+++++++++++++++++++++++++++ Generating seal onb7a72e68cbc43293dac635b3c868e83ecbe24c3f1b72e0d57a809ee72bad9ca5#4tx:0,maxtx:0,tq.num=0time:1534165202040
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目录 保存的目录结构为:
cert目录  
    ca.crt 
    ca.key
    机构名称子目录
        agency.crt
        agency.key
  • 以上面示例的配置为例, 创世节点服务器cert目录内容(详见使用指南中证书说明):
ca.crt
ca.key
agent_0\
    agency.crt
    agency.key
agent_1\
    agency.crt
    agency.key
agent_2\
    agency.crt
    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机构证书私钥