62 CentOS 上搭建WeBase
WeBASE(WeBank Blockchain Application Software Extension) 是在区块链应用和FISCO-BCOS节点之间搭建的一套通用组件。围绕交易、合约、密钥管理,数据,可视化管理来设计各个模块,开发者可以根据业务所需,选择子系统进行部署。WeBASE屏蔽了区块链底层的复杂度,降低开发者的门槛,大幅提高区块链应用的开发效率,包含节点前置、节点管理、交易链路,数据导出,Web管理平台等子系统。
本文介绍WeBase的可视化部署。可视化部署是指通过 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+)。
环境准备
主机防火墙需要开放以下端口。
| 端口 | 描述 |
|---|---|
| 22 | 默认SSH登录端口 |
| 5000 | WeBASE-Web 节点管理平台的访问端口 |
| 输入如下命令 |
1 | sudo firewall-cmd --zone=public --add-port=22/tcp --permanent |
1 | sudo firewall-cmd --reload |
更新CentOS 源
备份原来的源文件
1 | sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak |
下载阿里云的镜像源配置文件
1 | sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo |
- 清理旧缓存并生成新缓存:
1 | sudo yum clean all |
系统依赖
配置系统依赖分成宿主机(Node-Manager所在主机)与节点主机(节点所在主机)两种:
- 宿主机:安装WeBASE-Node-Manager的主机,配置Ansible、配置Ansible免密登录节点机
- 节点主机:用于安装节点的主机,配置docker及docker用户组、配置Ansible用户的sudo权限、安装FISCO BOCS节点依赖
注:宿主机也需要安装节点时,则需要同时配置。
配置Ansible
Ansible配置包括以下三步:
- 宿主机安装Ansible
- 仅在宿主机安装节点时,则仅需安装Ansible,无需完成下面两步host与免密配置
- 配置Ansible host列表
- 配置Ansible免密登录到节点主机
安装Ansible
注:Ansible只需要安装在宿主机上,节点主机无需安装Ansible,只需配置宿主机到节点主机的免密登录
1 | yum install epel-release -y |
安装完之后,验证
1 | ansible --version |
配置Ansible host_key_checking
配置Ansible的Host key checking,将自动确认连接到远程主机
1 | vi /etc/ansible/ansible.cfg |
免密登录配置
在节点管理台进行可视化部署时,节点管理(WeBASE-Node-Manager)服务会为每个节点生成相应的配置文件,然后通过Ansible的免密登录远程操作,在远程的节点主机中执行系统命令来操作节点。
下面介绍配置免密登录的各个步骤
- 配置 WeBASE-Node-Manager 主机到其它节点主机的 SSH 免密登录;
- 配置Ansible的hosts列表并配置免密登录私钥路径
- 注意免密登录的账号sudo权限,否则会造成Docker服务启动、检测端口占用失败;
- 如果免密账号为非 root 账号,保证账号有 sudo 免密 权限,即使用 sudo 执行命令时,不需要输入密码;
免密登录配置方法
[!important]
如果 WeBASE-Node-Manager 所在主机已经生成过秘钥对,建议使用命令 ssh-keygen -t rsa -m PEM 重新生成;
登录 WeBASE-Node-Manager 所在主机:
1 | ## ssh root@[IP] |
检查 ~/.ssh/ 目录是否已经存在 id_rsa 私钥文件和对应的 id_rsa.pub 公钥文件。如果存在,备份现有私钥对
1 | mv ~/.ssh/id_rsa ~/.ssh/id_rsa.bak |
如果没有文件会出现下面的找不到文件的提示,属于正常情况
1 | No such file or directory |
执行命令 ssh-keygen -t rsa -m PEM,然后直接两次回车即可生成(提示输入密码时,直接回车)
1 | ssh-keygen -t rsa -m PEM |
输出下面的信息说明创建证书成功
1 | Generating public/private rsa key pair. |
将公钥文件上传到需要免密登录的主机(替换 [IP] 为节点主机的 IP 地址),然后输入远程主机的登录密码。
1 | ssh-copy-id -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa.pub root@[IP] |
假设节点安装的4台主机IP如下:
1 | 192.168.201.129 |
则启动相应的节点主机并执行下面的命令:
1 | ssh-copy-id -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa.pub root@192.168.201.129 |
运行命令后会提示输入root用户的密码,如果看到下面的提示说明证书上传成功
1 | Number of key(s) added: 1 |
检查从部署 WeBASE-Node-Manager 服务的主机是否能成功免密登录部署节点的主机(替换 [IP] 为主机的 IP 地址)
1 | # ssh -o StrictHostKeyChecking=no root@[IP] |
如果出现类似下面的信息说明可以成功登录
1 | Last login: Wed Oct 15 23:47:59 2025 |
切记妥善保管免密登录的私钥,否则当前主机与ssh免密登录的主机均会被控制
此处配置宿主机免密登录到节点主机完成后,记住宿主机中id_rsa私钥的路径,下一步进行Ansible中hosts的免密配置。
配置Ansible Hosts与免密登录
在/etc/ansible/hosts文件中添加IP组webase,并配置节点主机的IP、免密登录账号和私钥路径、SSH端口。
[!note]
注:若后续需要添加新的主机,需要将新主机的IP添加到此处
添加以下内容:此处假设节点机IP为192.168.201.133,免密登录账户为root,且id_rsa免密私钥的路径为/root/.ssh/id_rsa,ssh端口使用22端口,添加名为webase的IP组
1 | # 先登录到NodeManger主机也就是我们的宿主机 |
1 | [webase] |
测试Ansible
执行Ansible的--list-hosts命令查看是否已添加成功
1 | ansible webase --list-hosts |
执行Ansible的ping命令,检测添加到hosts中各个节点主机IP能否被访问,免密配置是否已生效
- 若出现
IP | SUCCESS的则代表该IP可连通 - 如果出现
FAILED代表该IP无法连接,需要根据上文的免密登录配置进行ssh -o StrictHostKeyChecking=no root@[IP]检测
对ansible中的webase ip组进行ping检测
1 | ansible webase -m ping |
输出结果类似下面这样
1 | 92.168.201.131 | SUCCESS => { |
配置Docker
配置Docker需要在每个安装节点的主机上都要执行,否则将导致节点远程安装失败。包括以下几个步骤
- 安装Docker并启动Docker
- 配置Docker用户组
替换阿里源
docker安装之前先替换centos的源为阿里源
1 | sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup |
1 | sudo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo |
1 | yum clean all |
1 | yum makecache |
登录每一个主机安装docker
安装依赖工具
安装 yum-utils 工具,用于管理软件包和配置仓库:
1 | sudo yum install -y yum-utils |
添加 Docker 官方仓库
运行以下命令添加 Docker 的官方仓库:
1 | sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo |
安装Docker
使用以下命令安装 Docker:
1 | sudo yum install -y docker-ce docker-ce-cli containerd.io |
首先查看 Docker 服务是否处于运行状态:
bash
1 | sudo systemctl status docker |
- 若输出中包含
inactive (dead),说明 Docker 服务未启动; - 若包含
active (running),则可能是守护进程配置异常(后续步骤处理)。
如果服务未启动,执行以下命令启动服务,并配置开机自动启动(避免下次重启后仍需手动启动):
1 | # 启动 Docker 服务 |
配置docker用户组
检测docker ps命令
1 | docker ps |
若docker ps命令报错Permission Denied则需要配置docker用户组:
1 |
|
重新登入后,执行docker ps如有输出,未报错Permission Denied则代表配置成功。
一键部署依赖安装
一键部署需要安装以下依赖环境
| 环境 | 版本 |
|---|---|
| Java | Oracle JDK 8 至 14 |
| MySQL | MySQL-5.6及以上 |
| Python | Python3.6及以上 |
| PyMySQL |
Java安装
基于CentOS的安装,系统默认带有OpenJDK1.8,执行下面命令查看jdk版本
[!caution]
CentOS下OpenJDK无法正常工作,需要安装OracleJDK下载链接。
从Oracle官网(https://www.oracle.com/java/technologies/downloads/#java8)选择Java 8或以上的版本下载,例如下载jdk-8u461-linux-x64.tar.gz
然后可以创建一个文件夹保存下载的文件
1 | mkdir /software |
解压jdk
1 | tar -zxvf jdk-8u461-linux-x64.tar.gz |
修改解压后的文件夹,便于查看
1 | mv jdk1.8.0_461 jdk-8u461 |
配置Java环境,编辑/etc/profile文件
1 | vim /etc/profile |
1 | # 打开以后将下面三句输入到文件里面并保存退出 |
1 | # 生效profile |
1 | # 查询Java版本,出现的版本是自己下载的版本,则安装成功。 |
MySQL 安装
此处以CentOS 7(x86_64)安装MariaDB 10.6为例。_MariaDB_数据库是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可。_MariaDB_完全兼容 MySQL,包括API和命令行。MariaDB 10.2版本对应Mysql 5.7。其他安装方式请参考MySQL官网。
- CentOS 7 默认MariaDB为5.5版本,安装10.6版本需要按下文进行10.6版本的配置。
- 若使用CentOS 8则直接使用
sudo yum install -y mariadb*即可安装MariaDB 10.3,并跳到下文的 启停 章节即可。
使用vi或vim创建新文件/etc/yum.repos.d/mariadb.repo,并写入下文的文件内容(参考MariaDB中科大镜像源修改进行配置)
- 创建repo文件
1 | sudo vi /etc/yum.repos.d/mariadb.repo |
- 文件内容,此处使用的是中科大镜像源
1 | # MariaDB 10.6 CentOS repository list - created 2021-07-12 07:37 UTC |
- 更新yum源缓存数据
1 | yum clean all |
- 安装
MariaDB 10.2 - 如果已存在使用
sudo yum install -y mariadb*命令安装的MariaDB,其版本默认为5.5版本,对应Mysql版本为5.5。新版本MariaDB无法兼容升级,需要先卸载旧版本的MariaDB,卸载前需要备份数据库内容,卸载命令可参考yum remove mariadb
1 | sudo yum install -y mariadb-server |
启动数据库
1 | sudo systemctl start mariadb.service |
停止数据库
1 | sudo systemctl stop mariadb.service |
设置开机启动
1 | sudo systemctl enable mariadb.service |
初始化
1 | 执行以下命令: |
- 授权访问用户
1 | mysql -uroot -p -h localhost -P 3306 |
- 授权root用户远程访问
1 | mysql > GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; |
这样就设置了远程root用户,密码是123456
- 创建test用户并授权本地访问
1 | mysql > GRANT ALL PRIVILEGES ON *.* TO 'test'@localhost IDENTIFIED BY '123456' WITH GRANT OPTION; |
- 登录数据库
1 | mysql -utest -p123456 -h localhost -P 3306 |
- 创建数据库
1 | mysql > create database webasenodemanager; |
安装Python 3.x
python版本要求使用python3.x, 推荐使用python3.6及以上版本
1 | sudo yum install -y python36 |
安装PyMySQL
1 | sudo pip3 install PyMySQL |
检查服务器网络策略
网络策略检查:
- 开放WeBASE管理平台端口:检查webase-web管理平台页面的端口
webPort(默认为5000)在服务器的网络安全组中是否设置为开放。如,云服务厂商如腾讯云,查看安全组设置,为webase-web开放5000端口。若端口未开放,将导致浏览器无法访问WeBASE服务页面 - 开放节点前置端口:如果希望通过浏览器直接访问webase-front节点前置的页面,则需要开放节点前置端口
frontPort(默认5002);由于节点前置直连节点,不建议对公网开放节点前置端口,建议按需开放
拉取部署脚本
获取部署安装包:
1 | wget https://github.com/WeBankBlockchain/WeBASELargeFiles/releases/download/v1.5.5/webase-deploy.zip |
解压安装包:
1 | unzip webase-deploy.zip |
进入目录:
1 | cd webase-deploy |
修改配置
mysql数据库需提前安装,已安装直接配置即可。
修改配置文件(vi common.properties);
一键部署支持使用已有链或者搭建新链。通过参数”if.exist.fisco”配置是否使用已有链,以下配置二选一即可:
- 当配置”yes”时,需配置已有链的路径
fisco.dir。路径下要存在sdk目录,sdk目录中包含ca.crt, sdk.crt, sdk.key及gm目录,gm目录中包含国密SSL所需证书,包含gmca.crt、gmsdk.crt、gmsdk.key、gmensdk.crt和gmensdk.key - 当配置”no”时,需配置节点fisco版本和节点安装个数,搭建的新链默认两个群组
服务端口不能小于1024
部署时,修改 common.properties 配置文件
1 | # WeBASE子系统的最新版本(v1.1.0或以上版本) |
上述配置文件中记得将以下两项改成mysql数据库的用户名和密码
1 | sign.mysql.user=dbUsername |
部署
- 执行installAll命令,部署服务将自动部署FISCO BCOS节点,并部署 WeBASE 中间件服务,包括签名服务(sign)、节点前置(front)、节点管理服务(node-mgr)、节点管理前端(web)
备注:
- 部署脚本会拉取相关安装包进行部署,需保持网络畅通
- 首次部署需要下载编译包和初始化数据库,重复部署时可以根据提示不重复操作
- 部署过程中出现报错时,可根据错误提示进行操作,或根据本文档中的常见问题进行排查
- 不要用sudo执行脚本,例如
sudo python3 deploy.py installAll(sudo会导致无法获取当前用户的环境变量如JAVA_HOME)
1 | # 部署并启动所有服务 |
部署完成后可以看到deploy has completed的日志:
1 | $ python3 deploy.py installWeBASE |
- 服务部署后,需要对各服务进行启停操作,可以使用以下命令:
1 | # 可视化部署 |
可视化部署节点
在部署完依赖服务后,使用浏览器,访问节点管理平台页面:
1 | # 默认端口 5000 |
然后用默认的用户名和密码登录 admin/Abcd1234,第一次要求修改为自己的密码。
注意:这里有一个bug。当创建私钥的时候会抛出异常。这是因为后天数据库tb_user表中缺少private_key字段。目前官方还没有解决这个问题,但是GitHub中提到这是因为签名服务和节点管理服务共用了一个数据库导致的。