教程|使用WeBASE-Docker部署区块链节点

作为一个友好的、功能丰富的区块链中间件平台, WeBASE致力于提高区块链开发者的运维与管理效率。其中一大优化便是在区块链节点的运维部署上,逐步完善了对Docker容器化的支持。

Docker容器化是一种可以大大简化部署步骤的高适配性技术,只需要一次性配置好容器的环境,就可以在其他机器中轻松复用。社区不少用户倾向于使用快捷的一键部署进行链的安装,同时也有用户反馈希望WeBASE支持容器化部署,以支持Docker的“一键部署”。

基于用户需求,我们把FISCO BCOS节点和WeBASE-Front节点前置服务打包到一个Docker镜像中(Image),用户只需要拉取镜像并挂载配置即可轻松运行节点和节点前置服务,省去了大量配置环境的时间。同时,WeBASE在BaaS(Blockchain-as-a-Service)云平台的场景中,结合Kubernetes对该节点镜像进行运维部署管理,管理节点变得十分高效。

本文总结了使用Docker部署节点的经验,下面我们使用FISCO BCOS节点结合WeBASE-Front的Docker镜像 fiscoorg/fisco-webase,开始今天的容器化搭链之旅。

  部署链

首先我们可以看一下直接使用节点二进制启动节点与使用Docker启动节点的区别:

  • 使用节点二进制:bash start.sh  启动节点,读取目录中的节点配置与证书

  • WeBASE-Docker 部署使用 docker run 命令,通过 -v 参数挂载配置文件与证书到容器内后启动节点

实际上,用户使用节点二进制文件部署节点与使用Docker镜像部署节点的使用方式十分类似,而通过Docker容器化部署链节点的过程主要包含以下步骤:

  • 通过build_chain生成链配置文件与链节点证书

  • 通过gen_node_cert脚本与机构证书生成新节点证书,拷贝并修改节点配置文件,完成扩容新节点

生成配置

我们下载建链脚本后,以生成一个 127.0.0.1 的国密节点为例,输出的节点目录为nodes。以 -d docker模式生成,这样脚本不会下载FISCO BCOS节点的二进制文件,仅生成证书与配置文件。

curl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/raw/master/tools/build_chain.sh && chmod u+x build_chain.sh
bash build_chain.sh -f 127.0.0.1:1 -p 30300,20200,8545 -g -o nodes  -d

当构建完成后,我们可以看到"All completed."的提示语。我们可以查看nodes/127.0.0.1目录(以node0为例)。

教程|使用WeBASE-Docker部署区块链节点_第1张图片

node0目录:

  • 节点的config.ini配置文件

  • conf目录包含节点证书与群组创世块与配置文件

  • start.sh/stop.sh 节点启停脚本,在脚本中我们可以看到是使用Docker命令启动的,是因为我们使用了 -d docker 模式生成了链

拉取镜像

我们拉取最新的 v2.7.2 的 fisco-webase 镜像,镜像的tag版本号以FISCO BCOS节点版本为准,镜像中的WeBASE-Front则保持为最新版,即当前最新的v1.5.0版本,此步骤需要安装Docker依赖,可参考Docker官方安装文档。

docker pull fiscoorg/fisco-webase:v2.7.2

如果由于网络问题docker pull一直失败,可以尝试通过WeBASE cdn的镜像安装包安装镜像:

wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/v1.5.0/docker-fisco-webase.tar
docker load -i docker-fisco-webase.tar

拉取成功后可以通过 docker images | grep webase 命令查看镜像 :

启动容器

完成以上的准备步骤后,我们进入nodes/127.0.0.1/node0的目录,通过docker run命令启动该节点。

启动时,我们需要同时通过-v命令将node0的配置文件挂载到fisco-webase的容器中,将sdk目录挂载到容器中的/data/sdk中,同时将容器中产生的数据挂载到宿主机(容器外)的数据目录中(-v需要使用绝对路径地址)。

若生成节点时使用的是默认端口(20200),则可以跳过该步骤。由于镜像中包含WeBASE-Front服务,因此还需要将前置的application.yml文件也挂载到容器中。首先我们拷贝一份节点前置的application.yml文件,若服务的默认5002端口已被占用,则修改yml的server.port避免产生端口冲突;继而需要修改yml中的sdk.channelPort改为节点对应的channel端口;最后在启动的命令中加上"-v /nodes/127.0.0.1/node0/application.yml:/front/conf/application.yml"配置。

在WeBASE-Docker仓库中可以下载该yml文件:

https://gitee.com/WeBank/WeBASE-Docker/blob/dev-deploy/docker/application.yml

教程|使用WeBASE-Docker部署区块链节点_第2张图片

下面开始执行docker run命令:

cd /nodes/127.0.0.1/node0
docker run -d -v /nodes/127.0.0.1/node0:/data -v /nodes/127.0.0.1/sdk:/data/sdk -v /nodes/127.0.0.1/node0/front-log:/front/log --network=host -w=/data --name=node0 fiscoorg/fisco-webase:v2.7.2 

教程|使用WeBASE-Docker部署区块链节点_第3张图片

启动后,通过docker ps即可看到正在运行的fisco-webase docker容器:

启动节点与WeBASE-Front后,就可以直接访问WeBASE-Front(ip:5002/WeBASE-Front)既可以访问节点和前置的Web服务。

教程|使用WeBASE-Docker部署区块链节点_第4张图片

若需要运行多个fisco-webase容器,则需要在各个节点目录下分别执行docker run命令。

  扩容节点

上文中我们通过建链脚本生成了一个单节点的链,下面我们通过 gen_node_cert 脚本扩容一个新的Docker节点。

生成证书

在生成配置文件时,链相关的所有证书都保存在 nodes/cert 目录中,国密时还会额外生成 nodes/gmcert 保存国密相关证书。其中机构证书存放在 nodes/cert/agency 目录中。

下面我们用 gen_node_cert 脚本生成新的节点证书,并基于已有的机构证书生成新节点证书,保存到 newNodeGm 目录中。上文生成的 nodes/cert 目录中包含了链证书与机构证书。

教程|使用WeBASE-Docker部署区块链节点_第5张图片

curl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/raw/master/tools/gen_node_cert.sh && chmod u+x gen_node_cert.sh
bash gen_node_cert.sh -c nodes/cert/agency -o newNodeGm -g nodes/gmcert/agency/

当我们看到"All completed."的提示,即生成完成。生成证书后,还需要将节点的配置文件复制到新节点目录中才能正常启动节点。下面我们拷贝已有的配置文件到新节点中。

拷贝配置

需要将节点的配置文件拷贝到 newNodeGm/conf 目录中,包含:

  • 拷贝配置文件:需要拷贝node0的config.ini到newNodeGm目录,同时需要拷贝node0/conf的group.x.ini和group.x.genesis拷贝到newNodeGm/conf中

  • 拷贝sdk证书:需要将127.0.0.1目录中的sdk目录拷贝到newNodeGm/中

容器启动时会自动挂载到/data/sdk目录的sdk证书拷贝到/front/conf目录中,供WeBASE-Front连接节点使用。

修改节点配置

修改节点的.ini配置文件:

  • 修改`rpc`与`p2p`模块监听的IP和端口,我们将端口设为已有节点不同的值,rpc端口设为8546,p2p端口设为30301

  • 将已有节点的IP端口添加到`p2p`的`node.0, node.1`列表中,保证新节点可连上已有节点。如:连接node0节点则可以将node.0中填入node0的IP与P2P端口

使用国密时,需确保`network_security`的节点证书和节点私钥要由`node开头`改为`gmnode开头`,同理`ca.crt`改为`gmca.crt`;同时,确保`chain.sm_crypto`要与节点的国密类型匹配,国密时`sm_crypto=true`。

教程|使用WeBASE-Docker部署区块链节点_第6张图片

教程|使用WeBASE-Docker部署区块链节点_第7张图片

配置前置

本文中新增的节点是在同一主机,因此需要修改WeBASE-Front的服务端口及其对应节点的channelPort。我们要将前置的application.yml文件也挂载到容器中。我们拷贝一份节点前置的application.yml文件(在WeBASE-Docker仓库中可以下载该yml文件),以gitee为例:

https://gitee.com/WeBank/WeBASE-Docker/blob/dev-deploy/docker/application.yml

  • 前置服务的默认5002端口已被占用,则修改yml的server.port为5012

  • 扩容节点时我们在前文设置了节点的channelPort为20201,因此将yml中的sdk.channelPort改为对应的20201

  • 最后在启动的命令中加上"-v /nodes/127.0.0.1/node0/application.yml:/front/conf/application.yml"配置,将yml挂载到容器中

教程|使用WeBASE-Docker部署区块链节点_第8张图片

启动

因为在上文搭链的时候,我们已经拉取了 fisco-webase镜像,同机再次启动节点则无需再次拉取。我们只需要进入新节点的目录,使用docker run命令启动容器即可。

cd 127.0.0.1/newNodeGm/  
docker run -d -v 127.0.0.1/newNodeGm:/data -v 127.0.0.1/newNodeGm/sdk:/data/sdk -v 127.0.0.1/newNodeGm/front-log:/front/log -v /nodes/127.0.0.1/newNodeGm/application.yml:/front/conf/application.yml  --network=host -w=/data --name=node1 fiscoorg/fisco-webase:v2.7.2

与上文一样,启动成功后,我们可以通过docker ps查看正在运行的容器,并在浏览器通过 {ip}:5012/WeBASE-Front 访问前置页面。

加入共识

扩容的新节点需要通过控制台或WeBASE管理台将新节点从游离节点设为共识节点才能参与群组的共识,详情可以参考控制台文档或WeBASE使用手册。

控制台文档:

https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/console/console_of_java_sdk.html

WeBASE使用手册:

https://webasedoc.readthedocs.io/zh_CN/latest/docs/WeBASE-Console-Suit/index.html#id27

  即刻使用

节点部署结合Docker容器化技术,让复杂的节点部署操作变得更加简单。WeBASE-Docker总结了多种Docker与FISCO BCOS节点及WeBASE服务相结合的方法。用户可以通过WeBASE-Docker构建属于自己的 FISCO BCOS + WeBASE-Front 镜像,也可直接通过设置环境变量的方式改变容器中的配置,亦可像BaaS(Blockchain-as-a-Service)云平台一样通过k8s进行节点管理,或者像WeBASE可视化部署一样使用Ansible+Docker快速部署节点等等。

借由此文抛砖引玉,我们期待社区用户能迸发出更多更Smart的链管理方案,并积极在社区中的分享。也欢迎给我们提交Issue或Pull Request来分享你们的想法。

  文档地址

github仓库:

https://github.com/WebankFinTech/WeBASE-Docker/tree/dev-deploy

gitee仓库:

https://gitee.com/WeBank/WeBASE-Docker/blob/dev-deploy

WeBASE-Docker镜像使用文档:

https://gitee.com/WeBank/WeBASE-Docker/blob/dev-deploy/docker/front-install.md

FISCO-BCOS开发部署工具文档:

https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/manual/build_chain.html

你可能感兴趣的:(运维,docker,kubernetes,java,分布式)