【适合小白】区块链之我用可视化的方式部署Webase

  • Post author:
  • Post category:其他



前言

本小编在今年的四月底参加了一个区块链的省技能大赛,并在此基于我对官网教程的理解下,分享我的操作方法。

可视化部署是指通过 WeBASE 管理平台(WeBASE-Web + WeBASE-Node-Manager),在 多台 主机上快速部署 FISCO-BCOS 底层节点和 WeBASE-Front 前置 以及 对底层节点的扩容操作。 可视化部署,需要先部署依赖服务,包括管理平台(WeBASE-Web)、节点管理子系统(WeBASE-Node-Manager)、签名服务(WeBASE-Sign)。 然后通过 WeBASE 管理平台(WeBASE-Web)的界面在填入的主机中部署节点(FISCO-BCOS 2.5.0+,暂未支持FISCO-BCOS 3.0系列)和节点前置子系统(WeBASE-Front 1.4.0+)。

系统环境

硬件配置

使用可视化部署搭建一个

至少2 节点

的区块链服务,WeBASE(WeBASE-Node-Manager + WeBASE-Sign)至少配置

1G

空闲内存(用于节点管理服务与签名服务)、每个节点+前置的镜像配置至少2G空闲内存(CPU内核数与节点数正相关,如4核可配置4节点),在进行可视化部署时会进行主机的可用内存检测。


在端口这一块本小编插一句:在进行整一个部署操作的时候,一定要把有使用到的端口号防火墙给关掉,相关命令如下:


Centos


防火墙相关命令

1、查看防火墙状态 : systemctl status firewalld.service

注:active是绿的running表示防火墙开启

2、关闭防火墙 :systemctl stop firewalld.service

3、开机禁用防火墙自启命令 :systemctl disable firewalld.service

4、启动防火墙 :systemctl start firewalld.service

5、防火墙随系统开启启动 : systemctl enable firewalld.service

6、重启防火墙 : firewall-cmd --reload

注:为了安全考虑,一般我们只会选择关闭指定的端口号,在这里我们为了方便练习,通过命令3直接把防火墙关闭了


ubuntu

1、查看防火墙状态:sudo ufw status

2、打开防火墙:sudo ufw enable

3、关闭防火墙:sudo ufw disable

系统依赖

配置系统依赖分成

宿主机

(Node-Manager所在主机)与

节点主机

(节点所在主机)两种:

  • 宿主机:安装WeBASE-Node-Manager的主机,配置Ansible、配置Ansible免密登录节点机
  • 节点主机:用于安装节点的主机,配置docker及docker用户组、配置Ansible用户的sudo权限、安装FISCO BOCS节点依赖


注:宿主机也需要安装节点时,则需要同时配置(在我这次的比赛中是没有这个要求的)

配置Ansible(本文档从这里便开始配置一些偏操作性的配置了)

Ansible配置包括以下三步:

  • 宿主机安装Ansible


    • 仅在宿主机安装节点

      时,则仅需安装Ansible,无需完成下面两步host与免密配置
  • 配置Ansible host列表
  • 配置Ansible免密登录到节点主机

安装Ansible




:Ansible只需要安装在宿主机上,节点主机无需安装Ansible,只需配置宿主机到节点主机的免密登录


Centos

yum install epel-release -y
yum install ansible –y


Ubuntu

apt-get install software-properties-common
apt-add-repository ppa:ansible/ansible
apt-get update
apt-get install ansible 

安装完成后,可以通过

--version

检查是否安装成功

$ ansible --version
ansible 2.9.15
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.17 (default, Sep 30 2020, 13:38:04) [GCC 7.5.0]


仅在宿主机安装节点时

,无需操作下文的Ansible host配置和免密配置,直接进入

配置Docker

章节,并在部署节点时,添加主机的IP为

127.0.0.1

配置Ansible host_key_checking

配置Ansible的Host key checking,将自动确认连接到远程主机

vi /etc/ansible/ansible.cfg

# 找到host_key_checking选项
···
host_key_checking = False


免密登录配置

在节点管理台进行可视化部署时,节点管理(WeBASE-Node-Manager)服务会为每个节点生成相应的配置文件,然后通过Ansible的免密登录远程操作,在远程的节点主机中执行系统命令来操作节点。

下面介绍配置免密登录的各个步骤

重要

  1. 配置 WeBASE-Node-Manager 主机到其它节点主机的 SSH 免密登录;
  2. 配置Ansible的hosts列表并配置免密登录私钥路径
  3. 注意免密登录的账号sudo权限,否则会造成Docker服务启动、检测端口占用失败;
  4. 如果免密账号为非 root 账号,保证账号有 sudo

    免密

    权限,即使用 sudo 执行命令时,不需要输入密码;参考本章节的[sudo账号配置]

登录 WeBASE-Node-Manager 所在主机:

重要

  1. 如果 WeBASE-Node-Manager 所在主机已经生成过秘钥对,建议使用命令 ssh-keygen -t rsa -m PEM 重新生成;
ssh root@[IP]

检查

~/.ssh/

目录是否已经存在

id_rsa

私钥文件和对应的

id_rsa.pub

公钥文件。如果存在,备份现有私钥对

mv ~/.ssh/id_rsa ~/.ssh/id_rsa.bak
mv ~/.ssh/id_rsa.pub ~/.ssh/id_rsa.pub.bak 

执行命令

ssh-keygen -t rsa -m PEM

,然后直接两次回车即可生成(提示输入密码时,直接回车)

ssh-keygen -t rsa -m PEM

注:如果 WeBASE-Node-Manager 所在主机已经生成过秘钥对,建议使用命令 ssh-keygen -t rsa -m PEM 重新生成;

将公钥文件上传到需要免密登录的主机(替换 [IP] 为节点主机的 IP 地址),然后输入远程主机的登录密码

ssh-copy-id -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa.pub root@[IP]
  • 输出结果出现

    Number of key(s) added: 1

    结果,表示免密登录配置成功
  • 检查从部署 WeBASE-Node-Manager 服务的主机是否能成功免密登录部署节点的主机(替换 [IP] 为主机的 IP 地址)
ssh -o StrictHostKeyChecking=no root@[IP]


切记妥善保管免密登录的私钥,否则当前主机与ssh免密登录的主机均会被控制

此处配置宿主机免密登录到节点主机完成后,记住宿主机中

id_rsa

私钥的路径,下一步进行Ansible中hosts的免密配置


配置Ansible Hosts与免密登录



/etc/ansible/hosts

文件中添加IP组

webase

,并配置节点主机的IP、免密登录账号和私钥路径、SSH端口。




:若后续需要添加新的主机,需要将新主机的IP添加到此处

添加以下内容:此处假设节点机IP为127.0.0.1,免密登录账户为root,且

id_rsa

免密私钥的路径为

/root/.ssh/id_rsa

,ssh端口使用22端口,添加名为

webase

的IP组

vi /etc/ansible/hosts

···
[webase]
127.0.0.1 ansible_ssh_private_key_file=/root/.ssh/id_rsa  ansible_ssh_user=root  ansible_ssh_port=22
{your_host_ip} ansible_ssh_private_key_file={ssh_private_key}  ansible_ssh_user={ssh_user}  ansible_ssh_port={ssh_port}

测试Ansible

执行Ansible的

--list-hosts

命令查看是否已添加成功

ansible webase --list-hosts
  hosts (2):
    XXX.XXX.XXX.1
    XXX.XXX.XXX.2

执行Ansible的

ping

命令,检测添加到hosts中各个节点主机IP能否被访问,免密配置是否已生效

  • 若出现

    IP | SUCCESS

    的则代表该IP可连通
  • 如果出现

    FAILED

    代表该IP无法连接,需要根据上文的免密登录配置进行

    ssh -o StrictHostKeyChecking=no root@[IP]

    检测

对ansible中的webase ip组进行ping检测

ansible webase -m ping

xxx.xxx.xxx.1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
xxx.xxx.xxx.2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

配置Docker

配置Docker需要

在每个安装节点的主机上都要执行

,否则将导致节点远程安装失败。包括以下几个步骤

  • 安装Docker并启动Docker
  • 配置Docker用户组

安装Docker

安装 Docker 服务,请参考下文

常见问题

中:

Docker 安装

如果使用云服务器,推荐使用

操作系统镜像模板

的方式创建主机,即在一台主机上安装 Docker 后,然后使用安装 Docker 服务后的操作系统做一个镜像模板。通过这个模板镜像来创建主机,这样新创建的主机就自带了 Docker 服务。

配置docker用户组

若执行Docker命令,如

docker ps

必须使用sudo才能运行,则需要按如下修改:

检测

docker ps

命令

docker ps



docker ps

命令报错Permission Denied则需要配置docker用户组:

# 创建docker用户组
sudo groupadd docker
# 将当前用户添加到docker用户组
sudo usermod -aG docker $USER
# 重启docker服务
sudo systemctl restart docker
# 切换或者退出当前账户,重新登入
exit

重新登入后,执行

docker ps

如有输出,未报错Permission Denied则代表配置成功

Docker拉取教程:

拉取 Docker 镜像

部署依赖服务

可视化部署需要依赖 WeBASE 的中间件服务,包括

管理平台(WeBASE-Web)、节点管理子系统(WeBASE-Node-Manager)、签名服务(WeBASE-Sign)

对于依赖服务的安装,有两种方式(

一键部署



手动部署

),选择其中一种部署方式即可

一键部署依赖服务

适合

同机部署

,快速体验WeBASE的情况使用


一键部署依赖

具体环境依赖参考

一键部署-前提条件


拉取部署脚本

获取部署安装包:

wget https://github.com/WeBankFinTech/WeBASELargeFiles/releases/download/v1.5.5/webase-deploy.zip

# 若网络问题导致长时间无法下载,可尝试以下命令
wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/v1.5.5/webase-deploy.zip

解压安装包:

unzip webase-deploy.zip

进入目录:

cd webase-deploy


注意:

  • 配置可视化部署配置文件时,选择

    visual-deploy.properties

    进行配置
  • 选择部署方式时,选择

    可视化部署

    方式,即执行

    deploy.py

    脚本时,执行

    python3 deploy.py installWeBASE

修改

visual-deploy.properties

文件。

注意: sign.ip 配置的 IP 是WeBASE-Sign签名服务对外提供服务访问的 IP 地址,供其他部署节点主机访问。

# WeBASE子系统的最新版本(v1.1.0或以上版本)
webase.web.version=v1.5.5
webase.mgr.version=v1.5.5
webase.sign.version=v1.5.5
fisco.webase.docker.cdn.version=v1.5.5

# 节点管理子系统mysql数据库配置
mysql.ip=127.0.0.1
mysql.port=3306
mysql.user=dbUsername
mysql.password=dbPassword
mysql.database=webasenodemanager

# 签名服务子系统mysql数据库配置
sign.mysql.ip=localhost
sign.mysql.port=3306
sign.mysql.user=dbUsername
sign.mysql.password=dbPassword
sign.mysql.database=webasesign

# WeBASE管理平台服务端口
web.port=5000
# 启用移动端管理平台 (0: disable, 1: enable)
web.h5.enable=1

# 节点管理子系统服务端口
mgr.port=5001

# 签名服务子系统端口
sign.port=5004

# WeBASE-Sign 对外提供服务的访问 IP 地址
# 部署在其它主机的节点前置,需要使用此 IP 访问 WeBASE-Sign 服务
# 不能是 127.0.0.1 或者 localhost
sign.ip=

# 是否使用国密(0: standard, 1: guomi)
# 此配置决定可视化部署搭建国密或非国密的链
encrypt.type=0

这里需要改动的是sign.ip、dbUsername跟dbPassword

完成配置文件修改后,则执行部署:


备注:

  • 部署脚本会拉取相关安装包进行部署,需保持网络畅通。
  • 首次部署需要下载编译包和初始化数据库,重复部署时可以根据提示不重复操作
  • 部署过程中出现报错时,可根据错误提示进行操作,或根据本文档中的

    常见问题

    进行排查
  • 不建议使用sudo执行脚本,例如

    sudo python3 deploy.py installWeBASE

    (sudo会导致无法获取当前用户的环境变量如JAVA_HOME)
  • 推荐使用Python 3.6及以上版本
# 部署并启动可视化部署的所有服务
python3 deploy.py installWeBASE

如果遇到docker必须使用sudo运行,报错

Docker....Permission Denied

,可以参考

常见问题-创建docker用户组

部署完成后可以看到

deploy has completed

的日志:

$ python3 deploy.py installWeBASE
...
============================================================
              _    _     ______  ___  _____ _____ 
             | |  | |    | ___ \/ _ \/  ___|  ___|
             | |  | | ___| |_/ / /_\ \ `--.| |__  
             | |/\| |/ _ | ___ |  _  |`--. |  __| 
             \  /\  |  __| |_/ | | | /\__/ | |___ 
              \/  \/ \___\____/\_| |_\____/\____/  
...
...
============================================================
==============      deploy has completed     ==============
============================================================
==============    webase-web version  v1.5.0        ========
==============    webase-node-mgr version  v1.5.0   ========
==============    webase-sign version  v1.5.0       ========
============================================================

服务部署后,需要对各服务进行启停操作,可以使用以下命令:

# 可视化部署
部署并启动可视化部署的所有服务  python3 deploy.py installWeBASE
停止可视化部署的所有服务  python3 deploy.py stopWeBASE
启动可视化部署的所有服务  python3 deploy.py startWeBASE
# 各子服务启停
启动WeBASE-Node-Manager: python3 deploy.py startManager
停止WeBASE-Node-Manager: python3 deploy.py stopManager
启动WeBASE-Web:          python3 deploy.py startWeb
停止WeBASE-Web:          python3 deploy.py stopWeb
启动WeBASE-Sign:        python3 deploy.py startSign
停止WeBASE-Sign:        python3 deploy.py stopSign

经过上面一大堆操作,部署操作已经完成了,可以使用浏览器,访问节点管理平台页面:

# 默认端口 5000
http://{deployIP}:{webPort}

如果你是在自己主机上访问,则IP输入的是你部署的虚拟机的IP

部署节点

可视化部署节点时,后台服务将通过在各个主机安装

FISCO BCOS + WeBASE-Front

的Docker镜像,结合免密远程操作进行自动化部署节点与节点前置的过程。

因此,正如上文步骤中“拉取Docker镜像”的阐述,此操作依赖Docker服务,并默认从CDN自动加载节点与前置的Docker镜像


提示:

  • 在执行部署前,请提前在节点机中

    手动安装 Docker 服务

  • 如果部署

    国密

    版本

    • 国密链需要将WeBASE-Node-Manager yml中的

      encryptType

      配置修改为1
  • 部署时,默认的链名为

    default_chain

    ,默认机构名为

    agency1
  • 部署节点的所有操作将使用

    Ansible免密

    的免密SSH账号进行操作,请确保Ansible自检通过

打开节点管理平台页面后,登录后修改密码,默认进入

可视化部署引导页

,点击右上角可以进入主机管理开始部署节点

部署节点主要包含三步:添加并检测节点主机、初始化主机(检查Docker与安装依赖)

首先需要选中镜像拉取方式,推荐使用自动从CDN拉取并加载方式。

离线环境或网络不好

的情况下,推荐使用

手动加载

方式,提前在各个节点主机下载并加载镜像


(一)添加主机


添加主机时,需要填入主机的

IP

与部署节点的

目录

  • 仅在宿主机(即节点管理服务所在主机)部署节点时,则添加主机必须为

    127.0.0.1

    ,否则填写公网IP或内网IP需要

    配置Ansible host
  • 添加主机时,将检查该IP是否可以连通,同时将检查该主机的路径是否可访问,并自动创建该目录

在比赛中是要求选手把节点部署到节点机

在选择安装目录的时候,建议选在root目录下,因为担心会没有权限创建节点乃至报错。如果你的防火墙没有关闭,也会导致报错(没有有效前置,节点服务未开启······)出现报错后,把节点机的Docker重启一遍,Webase服务重新部署一遍就可以解决问题了


(二)添加节点信息

节点管理,先点击“新增节点”添加节点信息

  • 可以在一台主机中指定

    节点数量
  • 添加多个主机的节点,需要确保填入的各个主机间的

    P2P端口和前置端口互通

    ,否则将影响节点正常运行


(三)检查主机


添加节点信息后,将自动检查一下依赖

  • 检查主机的

    可用内存

    是否支持当前的节点数
  • 检测机器的

    端口

    是否已被占用
  • 检测

    Docker服务

    是否已启用,并通过hello-world的镜像进行测试

检测失败的信息将在

操作日志

中显示,只有添加的节点信息全部通过才可以开始下一步“初始化”

  • 如果提示内存不足(Free memory too low),则可以释放主机内存,一节点至少

    1G

    可用内存(Free memory)
  • 如果提示端口被占用,可根据提示的端口号,在主机

    释放端口

    或删除填入的节点信息,修改后重新填入
  • 如果提示Docker相关错误,需要到主机确认已

    安装Docker

    并已启用,是否已

    配置Docker组

    ,确保能拉取并运行hello-world镜像
  • 部分虚拟机缺少bc依赖(bc command not found),需要手动安装bc


排除错误原因后,可以点击“检测”按钮,再次检测


(四)初始化主机

点击“初始化”按钮进行主机初始化,将自动完成以下操作,初始化成功后才能进行下一步的部署操作,“初始化”按钮将变成“部署”按钮

  • 自动检测并安装相关系统依赖,如

    netstat

    ,

    wget

  • 加载节点镜像:根据选中的镜像加载方式进行加载(若手动加载则检测镜像已存在于节点主机)
  • 自动加载镜像时,会在节点主机指定目录中创建

    download

    目录,并下载镜像的tar包保存于此;若已存在同名tar包将不重复下载,直接使用已有tar包(docker-fisco-webase.tar)
  • 初始化操作预计在

    两到三分钟

    内完成,若

    网速过慢或不稳定

    建议通过

    手动加载镜像

    方式拉取 若初始化失败,则需要结合

    操作日志

    排查上述步骤的错误原因,排除主机中存在的问题后,

    重新执行检测,初始化

    操作


(五)部署

添加的主机状态都为“初始化成功”后,点击“

部署

”按钮后,将自动完成以下操作

  • 根据填入的节点信息自动生成链配置与证书
  • 通过SCP将节点与前置的配置文件、证书传输到各个主机的指定目录下

  • 生成配置与传输配置完成后,将自动进入链初始化页面,届时将自动启动各个主机的节点,此过程

    预计需要几分钟时间

    ,直到链状态为“运行”


若出现启动失败,需要结合报错提示,检查节点主机状态正常,各个节点主机间端口互通,网速过慢或网络丢包严重等等,排查后,点击“删除链”重置当前的链后,重新尝试建链


如始终无法部署,可以结合Node-Manager日志排查错误原因,并在github上提交配上日志和环境信息的issue

新增节点

节点新增,也称作节点扩容,指在已有的区块链服务中,在新的主机上,添加一个新的节点。


提示:

  • 新主机需要按照

    系统依赖

    中的

    节点机

    进行配置

  • 新增的节点,

    默认处于游离状态

    ,需要手动

    变更节点为共识或者观察节点

    后,新节点开始从原有节点同步区块数据。


具体操作:

新增节点与部署时是同样的三个步骤:添加并检测节点主机、初始化主机(检查Docker与安装依赖)、启动节点并重启链


添加主机

若需要添加新的主机时,填入主机的

IP

与部署节点的

目录

  • 点击

    新增节点

    按钮

添加主机信息,与部署链时相似的操作

  • 选择 Docker 拉取方式,推荐使用CDN拉取,

    离线环境或网络不好

    的情况下,推荐使用

    手动加载

    方式,提前在各个节点主机下载并加载镜像
  • 选择“新增节点”添加信息,选择主机与节点的端口、节点数量等;



  • ,若需要添加新的主机,则按文档的

    环境要求

    准备新的主机,并到“主机管理”添加主机

依次执行同

部署链

相同的检测、初始化、部署即可

点击“部署”后将生成并传输新的节点的配置文件到目标主机,同时新增节点比部署链会多出以下操作

  • 自动在链的其他节点中

    添加新节点的P2P连接配置

    ,并在新节点的P2P配置中添加本次新增节点的IP与已有的非游离节点的IP
  • [可选]配置完成后,需要手动“重启”已有节点才能使新的P2P配置在已有节点中生效,即双向互联;新节点会默认连接已有的所有节点,此操作可视具体情况自行操作
  • 若新节点启动失败,将新节点删除并重新尝试添加即可

重启完成后,需要创建私钥或使用已有私钥,将新节点

设为共识节点

或观察节点

节点操作

节点操作,包括:节点的启停、节点共识类型切换、删除节点

  • 节点的类型切换:共识,观察和游离

    • 在可视化部署中,变更节点为游离节点时,该群组内,至少仍有两个共识节点
    • 变更节点类型,需要发送交易,请先在

      私钥管理 中 添加私钥账号;

修改节点为共识节点

若需要添加私钥:

  • 节点的启动,停止

    • 若节点的docker容器被意外删除,通过页面点击“启动”即可完成节点重启
    • 停止或重启操作时,请确保满足链的共识容错要求。设为观察节点可避免影响共识状态
    • 每次启停操作大约需要30秒
  • 删除节点

    • 将节点设置为游离节点后,即可安全删除节点,删除后,链将会移除被删节点的P2P配置,并重启链
    • 删除节点时,节点必须处于停止状态

完成到这,就可以进行合约的编写、部署、调用了,详细请看小编的另一篇文章:

智能合约开发



版权声明:本文为LforikQ原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。