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部署使用dockerrun命令,通过-v参数挂载配置文件与证书到容器内后启动节点
实际上,用户使用节点二进制文件部署节点与使用Docker镜像部署节点的使用方式十分类似,而通过Docker容器化部署链节点的过程主要包含以下步骤:
通过build_chain生成链配置文件与链节点证书
通过gen_node_cert脚本与机构证书生成新节点证书,拷贝并修改节点配置文件,完成扩容新节点
1.生成配置
我们下载建链脚本后,以生成一个 127.0.0.1 的国密节点为例,输出的节点目录为nodes。以 -d docker模式生成,这样脚本不会下载FISCO BCOS节点的二进制文件,仅生成证书与配置文件。
curl -#LO /FISCO-BCOS/FISCO-BCOS/raw/master/tools/build_chain.sh && chmod u+x build_chain.sh
bash build_chain.sh -l 127.0.0.1:1 -p 30300,0,8545 -g -o nodes -d
当构建完成后,我们可以看到"All completed."的提示语。我们可以查看nodes/127.0.0.1目录(以node0为例)。
node0目录:
节点的config.ini配置文件
conf目录包含节点证书与群组创世块与配置文件
start.sh/stop.sh 节点启停脚本,在脚本中我们可以看到是使用Docker命令启动的,是因为我们使用了 -d docker 模式生成了链
2. 拉取镜像
我们拉取最新的 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-/WeBASE/releases/download/v1.5.0/docker-fisco-webase.tar
docker load -i docker-fisco-webase.tar
拉取成功后可以通过docker images | grep webase命令查看镜像 :
3. 启动容器
完成以上的准备步骤后,我们进入nodes/127.0.0.1/node0的目录,通过docker run命令启动该节点。
启动时,我们需要同时通过-v命令(-v需要使用绝对路径地址)
将node0的配置文件挂载到fisco-webase的容器中,将sdk目录挂载到容器中的/data/sdk中,将容器中产生的数据挂载到宿主机(容器外)的数据目录中。
若生成节点时使用的是默认端口(0),则可以跳过该步骤。
由于镜像中包含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文件:
/WeBank/WeBASE-Docker/blob/dev-deploy/docker/application.yml
下面开始执行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
启动后,通过docker ps即可看到正在运行的fisco-webase docker容器:
启动节点与WeBASE-Front后,就可以直接访问WeBASE-Front(ip:5002/WeBASE-Front)既可以访问节点和前置的Web服务。
若需要运行多个fisco-webase容器,则需要在各个节点目录下分别执行docker run命令。
二、扩容节点
上文中我们通过建链脚本生成了一个单节点的链,下面我们通过 gen_node_cert 脚本扩容一个新的Docker节点。
1. 生成证书
在生成配置文件时,链相关的所有证书都保存在 nodes/cert 目录中,国密时还会额外生成 nodes/gmcert 保存国密相关证书。其中机构证书存放在 nodes/cert/agency 目录中。
下面我们用 gen_node_cert 脚本生成新的节点证书,并基于已有的机构证书生成新节点证书,保存到 newNodeGm 目录中。上文生成的 nodes/cert 目录中包含了链证书与机构证书。
curl -#LO /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."的提示,即生成完成。生成证书后,还需要将节点的配置文件复制到新节点目录中才能正常启动节点。
下面我们拷贝已有的配置文件到新节点中。
2. 拷贝配置
需要将节点的配置文件拷贝到 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连接节点使用。
3. 修改节点配置
修改节点的.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`。
4. 配置前置
本文中新增的节点是在同一主机,因此需要修改WeBASE-Front的服务端口及其对应节点的channelPort。我们要将前置的application.yml文件也挂载到容器中。我们拷贝一份节点前置的application.yml文件(在WeBASE-Docker仓库中可以下载该yml文件),以gitee为例:
/WeBank/WeBASE-Docker/blob/dev-deploy/docker/application.yml
前置服务的默认5002端口已被占用,则修改yml的server.port为5012
扩容节点时我们在前文设置了节点的channelPort为1,因此将yml中的sdk.channelPort改为对应的1
最后在启动的命令中加上"-v /nodes/127.0.0.1/node0/application.yml:/front/conf/application.yml"配置,将yml挂载到容器中
5. 启动
因为在上文搭链的时候,我们已经拉取了 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/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 访问前置页面。
6. 加入共识
扩容的新节点需要通过控制台或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仓库:
/WebankFinTech/WeBASE-Docker/tree/dev-deploy
gitee仓库:
/WeBank/WeBASE-Docker/blob/dev-deploy
WeBASE-Docker镜像使用文档:
/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
https://mp./s/ff8114vppChegJJziuxJfA