Webase管理平台搭建
零、 总览
先看一下Webase管理平台一共有几部分:
- 节点前置
- 签名服务
- 节点管理 (WeBASE-Node-Manager)
- WeBASE管理平台
这四个Webase子系统组成,其中需要节点前置和区块链节点部署在同一台机器上,节点管理和WeBASE管理平台可以同机部署,也可以分开部署。
可以看到这四个子系统的关系

其中WeBASE管理平台 (WeBASE-Web)是一个纯粹的WebUI,提供了可视化的操作界面,不执行任何的后端逻辑,通过调用WeBASE-Node-Manger提供的REST API来发送用户请求以及接受展示数据。
从webase提供的官方文档也可以看出,WeBase-Web就是一个vue项目

节点管理(WeBASE-Node-Manger)就是一个后端服务,为WeBASE-Web提供接口,主要就是负责维护区块链网络的状态(节点列表、合约信息、用户信息),本质上是一个Spring Boot的java后端

签名服务 (WeBASE-Sign):是一个独立的、高安全的签名微服务。安全地存储和管理用户私钥,是一个中心化的服务,只需要部署一个。

节点前置 (WeBASE-Front):这是一个本地代理服务,部署在每一台FISCO BCOS节点所在的机器上,直接与本机的FISCO BCOS节点通过JSON-RPC进行通信。负责收集本机节点的状态、日志、配置等信息。执行来自 节点管理 的具体指令(如“把这个签名后的交易发给你的节点”)。也是一个SpringBoot的Java项目

后面的内容即为具体搭建过程,搭建过程均参考官方文档。
一、 签名服务搭建
这是一个中心化的服务,只需要部署在一台机器上即可。
参考文档《签名服务安装说明》
1、 依赖
java1.8及以上版本
MySQL-5.6或以上版本
mysql安装
通过下面命令检查
java --version
2、 拉取代码
我们由于要搭建完整的Webase管理平台这里在中心机器上面穿件一个目录为webase-deploy
mkdir -p ~/fisco/webase-deploy && cd ~/fisco/webase-deploy
首先拉取签名服务的代码
git clone https://gitee.com/WeBank/WeBASE-Sign.git

3、 编译代码
进入WeBASE-Sign目录
cd WeBASE-Sign
使用gradle编译
通过下面命令查询是否存在gradle且版本是否对应
gradle --version
如果你和我显示的一样都是command not found
那么就需要先安装gradle,再进行编译
chmod +x ./gradlew && ./gradlew build -x test

同时WeBASE-Sign目录下生成了已经编译好的代码目录dist

4、 数据库初始化
登陆mysql
mysql -u ${your_db_account} -p${your_db_password}
创建数据库
CREATE DATABASE IF NOT EXISTS webase DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

5、 修改配置
进入dist目录
cd ~/fisco/webase-deploy/WeBASE-Sign/dist
dist目录提供了一份配置模板conf_template:根据配置模板生成一份实际配置conf。初次部署可直接拷贝。
cp conf_template conf -r

修改配置
gedit conf/application.yml
打开后的模版配置文件是这样的
# server version
version: v1.5.3
server:
# 本工程服务端口,端口被占用则修改
port: 5004
servlet:
context-path: /WeBASE-Sign
tomcat:
max-threads: 200 #default 200
max-connections: 10000 #default 10000
spring:
cache:
type: simple
datasource:
# 数据库连接信息
url: jdbc:mysql://127.0.0.1:3306/webasesign?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8
# 数据库用户名
username: "dbUsername"
# 数据库密码
password: "dbPassword"
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
connection-test-query: SELECT 1 FROM DUAL
connection-timeout: 30000
maximum-pool-size: 20
max-lifetime: 1800000
minimum-idle: 5
# fix swagger
mvc:
pathmatch:
matching-strategy: ant_path_matcher
constant:
# aes加密key(16位)
aesKey: EfdsW23D23d3df43
# aes加密模式 v1.4.0+ 默认CBC(v1.4.0前默认为ECB)
aesPattern: CBC
keepAliveRequests: 100
syncUsrCacheTaskFixedDelay: 10000
# 返回值是否支持私钥传输
supportPrivateKeyTransfer: true
mybatis:
mapper-locations: classpath:mapper/*.xml
logging:
config: classpath:log4j2.xml
现在我们需要对上面的模版配置文件进行响应的修改
需要修改数据库的配置部分
datasource:
# 数据库连接信息
url: jdbc:mysql://127.0.0.1:3306/webasesign?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8
# 数据库用户名
username: "dbUsername"
# 数据库密码
password: "dbPassword"
将url修改成自己数据库的url,用户名和数据库密码均作相应修改,其他部分可以修改也可不修改,需要确保本地5004端口没有被占用如果被占用了则需要进行响应的修改。
修改后的配置文件如下:
# server version
version: v1.5.3
server:
# 本工程服务端口,端口被占用则修改
port: 5004
servlet:
context-path: /WeBASE-Sign
tomcat:
max-threads: 200 #default 200
max-connections: 10000 #default 10000
spring:
cache:
type: simple
datasource:
# 数据库连接信息
url: jdbc:mysql://127.0.0.1:3306/webase?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8
# 数据库用户名
username: "root"
# 数据库密码
password: "1234asdF"
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
connection-test-query: SELECT 1 FROM DUAL
connection-timeout: 30000
maximum-pool-size: 20
max-lifetime: 1800000
minimum-idle: 5
# fix swagger
mvc:
pathmatch:
matching-strategy: ant_path_matcher
constant:
# aes加密key(16位)
aesKey: EfdsW23D23d3df43
# aes加密模式 v1.4.0+ 默认CBC(v1.4.0前默认为ECB)
aesPattern: CBC
keepAliveRequests: 100
syncUsrCacheTaskFixedDelay: 10000
# 返回值是否支持私钥传输
supportPrivateKeyTransfer: true
mybatis:
mapper-locations: classpath:mapper/*.xml
logging:
config: classpath:log4j2.xml
6、 启停服务
这里启停服务都给我们提供了shell脚本
注意这些脚本都需要在dist目录下执行
启动服务
bash start.sh
这里显示JAVA_HOME没有配置
orin@ubuntu:~/fisco/webase-deploy/WeBASE-Sign/dist$ bash start.sh
JAVA_HOME has not been configured
这里可以配置一下JAVA_HOME,自行ai或google
停止服务
bash stop.sh
检查服务状态
bash status.sh

6、 查看日志
如果需要查看日志的话就使用tail命令加上-f选项
这是查看全部日志内容
tail -f log/WeBASE-Sign.log
仅查看错误日志
tail -f log/WeBASE-Sign-error.log
二、 节点前置搭建
节点前置服务相当于每台机器上面的代理,所以需要每台机器都部署一遍,教程参考webase官方文档《节点前置安装说明》
1、依赖
Java: Oracle JDK 8至14
FISCO-BCOS: v2.0.0及以上版本
这里我已经把区块链网络搭好了,所以每台机器上面都是有FISCO-BCOS的
2、 拉取代码
拉取代码并进入WeBASE-Front目录
git clone https://gitee.com/WeBank/WeBASE-Front.git && cd WeBASE-Front

3、 编译代码
chmod +x ./gradlew && ./gradlew build -x test
这仍是一条组合命令吗,先给./gradlew添加可执行权限,然后使用./gradlew去编译

编译成功后这里也会多一个dist目录
4、 修改配置
进入到dist目录
cd dist
根据dist目录提供的配置模板conf_template生成一份实际配置conf。初次部署可直接拷贝。
cp -r conf_template conf
进入conf文件
cd conf
将节点所在目录nodes/${ip}/sdk下的所有文件拷贝到当前conf目录,供SDK与节点建立连接时使用
cp -r ~/fisco/nodes/192.168.1.100/sdk/* ./
修改application.yml配置文件,下面是原来的版本
# server version
version: v1.5.5
spring:
datasource:
url: jdbc:h2:file:../h2/webasefront;DB_CLOSE_ON_EXIT=FALSE
databaseName: db
driverClassName: org.h2.Driver
serverName:
username:
password:
jpa:
database-platform: org.hibernate.dialect.H2Dialect
database: H2
openInView: false
show_sql: false
generate-ddl: true
hibernate:
ddl-auto: update
naming-strategy: org.hibernate.cfg.EJB3NamingStrategy
session:
events:
log: false
properties:
hibernate.cache.use_query_cache: false
hibernate.generate_statistics: false
h2:
console:
enabled: true
path: /console
settings:
web-allow-others: false
trace: true
rabbitmq:
host: 127.0.0.1
port: 5672
username:
password:
virtual-host:
publisher-confirm: true
ssl:
enabled: false
http:
multipart:
max-request-size: 30MB # request max size
max-file-size: 20MB # single file size
mvc:
pathmatch:
matching-strategy: ant_path_matcher
server:
port: 5002
servlet:
context-path: /WeBASE-Front
connection-timeout: 30000
tomcat:
max-threads: 200
max-connections: 10000
sdk:
corePoolSize: 50
maxPoolSize: 100
queueCapacity: 100
ip: 127.0.0.1
channelPort: 20200
certPath: conf # cert path of relative or absolute
logging:
config: classpath:log4j2.xml
level:
com.webank.webase.front: info
constant:
keyServer: 127.0.0.1:5004 # webase-sign服务的IP:Port(单个)
nodePath: /fisco/nodes/127.0.0.1/node0 # node's absolute path to read configuration and monitor node's log
aesKey: EfdsW23D23d3df43
transMaxWait: 30
monitorDisk: /
monitorEnabled: true
http_read_timeOut: 100000
http_connect_timeOut: 100000
# event sync map task (unit: ms)
eventRegisterTaskFixedDelay: 5000
syncEventMapTaskFixedDelay: 60000
# sync stat log data task (unit: ms)
syncStatLogTime: 5000
syncStatLogCountLimit: 10000
statLogEnabled: false
# get event callback wait (s)
eventCallbackWait: 4
这里需要修改的地方稍微多一点
WeBASE-Sign 签名服务地址需要修改到WeBASE-Sign签名服务部署的地址
constant:
keyServer: 192.168.1.100:5004 # webase-sign服务的IP:Port(单个)
本地 FISCO-BCOS 节点连接 WeBASE-Front 需要连接到它本机上的 FISCO BCOS 节点。
sdk:
ip: 127.0.0.1
channelPort: 20200
本地 FISCO-BCOS 节点路径
constant:
nodePath: ~/fisco/nodes/192.168.1.100/node0 # node's absolute path
AES 加密密钥,这个必须要和WeBASE-Sign上面的一致
constant:
aesKey: EfdsW23D23d3df43
WeBASE-Front服务运行的端口是可以修改的这里我就不修改了,使用默认的5002号端口
在修改配置完成后,我尝试启动WeBASE-Front服务,却通过查看status脚本,发现启动失败了
bash start.sh
执行上面启动脚本后可以看到我查询状态得到的却是Port 5002 is not running
orin@ubuntu:~/fisco/webase-deploy/WeBASE-Front/dist$ bash start.sh
===============================================================================================
Server com.webank.webase.front.Application Port 5002 ...PID(27409) [Starting]. Please check message through the log file (default path:./log/).
===============================================================================================
orin@ubuntu:~/fisco/webase-deploy/WeBASE-Front/dist$ ls
apps conf conf_template get_solc_js.sh gradle lib log release_note.txt start.sh static status.sh stop.sh
orin@ubuntu:~/fisco/webase-deploy/WeBASE-Front/dist$ bash status.sh
===============================================================================================
Server com.webank.webase.front.Application Port 5002 is not running
===============================================================================================
根据命令行信息我去看了./log/*
tail -f ./log/*
发现是下面输出
orin@ubuntu:~/fisco/webase-deploy/WeBASE-Front/dist$ tail -f ./log/*
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: org.apache.logging.log4j.LoggingException: log4j-slf4j-impl cannot be present with log4j-to-slf4j
at org.apache.logging.slf4j.Log4jLoggerFactory.validateContext(Log4jLoggerFactory.java:60)
at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:44)
at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:33)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:53)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:33)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:363)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:388)
at com.webank.webase.front.Application.<clinit>(Application.java:41)
这是一个非常经典的 Java 日志库冲突问题。
log4j-slf4j-impl:这个库是告诉 “SLF4J” (一个日志接口):“请把日志交给 Log4j 2 处理”。
log4j-to-slf4j:这个库是告诉 “Log4j 2”:“请把日志交给 SLF4J 处理”。
当这两个库同时存在时,它们会造成一个死循环(SLF4J → Log4j 2 → SLF4J → …),因此程序在启动时会立刻崩溃以避免这个问题。
这不是配置错误,而是 WeBASE-Front 部署包本身的打包问题。
进入lib删除log4j-to-slf4j相关的jar包就好了
cd lib
先查找相关的jar包
ls -l | grep log4j-to-slf4j
删除这些jar包
rm log4j-to-slf4j-*.jar
返回dist,重新执行start.sh,然后执行status.sh查看状态,发现running on,这说明WeBASE-Front服务正常启动起来了。

6、 访问控制台
在浏览器中访问http//ip:port/WeBASE-Front

7、 查看日志
日志是在dist目录下查看的
前置服务全量日志:tail -f log/WeBASE-Front.log
前置服务错误日志:tail -f log/WeBASE-Front-error.log
web3连接日志:tail -f log/web3sdk.log
8、 所有设备都部署
上面的操作我们需要在所有的节点
有时候脚本里面用到的网站是国外的,以及会用到github不稳定,会导致我们编译这一步失败,如果失败了可以看一下报错信息,是不是什么443 、500之类的,多试几次就好了。
chmod +x ./gradlew && ./gradlew build -x test

创建配置文件

复制证书

修改配置文件参考上面的步骤,然后就可以返回dist目录启动WeBASE-Front服务了
bash start.sh
这里又有一个小插曲JAVA_HOME没有配置
update-alternatives --config java
echo export JAVA_HOME=javapath >> ~/.bashrc
当然上面出现的日志冲突问题这里也没有少,解决之后再次启动

三、 节点管理搭建
0、 说明
节点管理服务也是中心化的,只需要在一台机器上面部署就好了,和WeBASE-Sign的部署基本上一样。
这里步骤参考官方文档《节点管理安装说明》
1、 依赖
FISCO-BCOS 2.0+
WeBASE-Front 对应版本
MySQL5.6或以上版本
Java8或以上版本
FISCO-BCOS由于我们已经搭建好了多机区块链网络,所以节点是有的,需要搭建多机区块链网络的可以看这里多机区块链网络搭建
WeBASE-Front我们在上篇博客已经在所有机器上进行了部署,还没有部署的话可以根据这篇博客部署一下
MySQL5.6或以上版本和Java8或以上版本在前两个步骤已经进行了安装和配置。
安装好相关的依赖就可以开始部署WeBASE-Node-Manager了。
2、 拉取代码
接一下前面的内容,我们的WeBASE-Sign、WeBASE-Front都是在~/fisco/webase-deploy目录下,这里我们也把WeBASE-Node-Manager放到这里。
git clone https://gitee.com/WeBank/WeBASE-Node-Manager.git
3、 编译代码
下面进入目录并编译代码
cd WeBASE-Node-Manager
编译代码
chmod +x ./gradlew && ./gradlew build -x test

4、 数据库初始化
由于我们在WeBASE-Sign那一步已经创建了数据库为webase,这里就不需要再重新建数据库了。
修改脚本配置
修改数据库连接信息:这里使用的是sed=find+replace
修改配置文件中数据库名称
sed -i "s/webasenodemanager/${your_db_name}/g" webase.sh
sed -i "s/webasenodemanager/webase/g" webase.sh
修改配置文件中数据库用户名
sed -i "s/defaultAccount/${your_db_account}/g" webase.sh
sed -i "s/defaultAccount/root/g" webase.sh
修改配置文件中的数据库密码
sed -i "s/defaultPassword/${your_db_password}/g" webase.sh
sed -i "s/defaultPassword/1234asdF/g" webase.sh
再说一个sed命令:-i指的是in-place原地操作,
"s/defaultPassword/${}/g"可以拆开看s代表的是替换/是分割符,defaultPassword是我们要搜索的内容,/是分割符,后面${}是linux中的代表shell变量,也是去替换搜索内容的内容,g表示进行全局替换,webase.h是操作的文件
修改完webase.sh脚本后运行这个脚本
bash webase.sh 127.0.0.1 3306

5、 服务配置
回到dist目录
cd ..
拷贝一份模版配置然后在模版配置上进行修改
cp -r conf_template conf

修改服务端口:sed -i "s/5001/${your_server_port}/g" conf/application.yml
修改数据库IP:sed -i "s/127.0.0.1/${your_db_ip}/g" conf/application.yml
修改数据库端口:sed -i "s/3306/${your_db_port}/g" conf/application.yml
修改数据库名称:sed -i "s/webasenodemanager/${your_db_name}/g" conf/application.yml
修改数据库用户:sed -i "s/defaultAccount/${your_db_account}/g" conf/application.yml
修改数据库密码:sed -i "s/defaultPassword/${your_db_password}/g" conf/application.yml
服务端口就不进行修改了,因为WeBASE-Sign使用的是5004端口、WeBASE-Front使用的是5002端口,这里WeBASE-Node-Manger使用5001端口并不冲突。
由于多机数据库就是和WeBASE-Node-Manger部署在同一机器上于是也可以用默认本机地址,数据库端口用的就是默认的3306,只需要修改数据库名称、数据库用户、数据库密码就好了
sed -i "s/webasenodemanager/webase/g" conf/application.yml
sed -i "s/defaultAccount/root/g" conf/application.yml
sed -i "s/defaultPassword/1234asdF/g" conf/application.yml
不放心的话可以打开这个conf/application.ym配置文件检查一下是否修改成功了
可以看到下面图中这里我是修改成功了。

6、 服务启停
在dist目录下执行启动脚本启动WeBASE-Node-Manger服务
bash start.sh

停止服务的话可以执行下面的脚本
bash stop.sh
需要查看目录的话也可以用下面两条命令在dist目录下查看
全量日志:tail -f log/WeBASE-Node-Manager.log
错误日志:tail -f log/WeBASE-Node-Manager-error.log
四、 WeBASE管理平台
0、 说明
WeBASE管理平台是一个基于vue开发的web页面,其主要作用就是和WeBASE-Node-Manager的后端对接起来,提供一个可视化的管理平台,所以这个也是只需要装一个就好了。
1、 依赖
nginx nginx1.6或以上版本
unbuntu安装nginx可以通过apt install直接安装,这里可以看一下apt有什么版本是否满足
apt-cahce show nginx

如果版本满足1.6及以上就可以直接apt安装,执行下面命令就好了,如果不满足的话就自行百度如何下载nginx源码编译配置就好了。
sudo apt install nginx
验证一下是否安装成功
nginx -v

WeBASE-Node-Manager WeBASE-Node-Manager
由于WeBASE-Web是基于vue,需要nginx作为一个服务器
2 、拉取WeBASE-Web源码
这里还是进入到~/fisco/webase-deploy中拉取
cd ~/fisco/webase-deploy
然后拉取代码
git clone https://gitee.com/WeBank/WeBASE-Web.git
并且进入WeBASE-Web目录中
cd WeBASE-Web
执行脚本get_solc_js.sh会自动下载solc-bin
bash ./get_solc_js.sh
3、 拉取移动端代码
WeBASE新增了h5的移动端页面,支持手机浏览器访问。代码和WeBASE-Web放在同级目录
git clone https://gitee.com/WeBank/WeBASE-Web-Mobile.git
4、 修改配置文件
在docs目录下有配置文件nginx.conf,修改完后替换安装的nginx的配置文件nginx.conf(这里nginx安装配置文件在/usr/local/nginx/conf下面,如果这里没找到,可以到/etc下寻找,如有权限问题,请加上sudo)。
可以通过下面两条命令查看你的nginx在哪里
ls /usr/local | grep nginx
ls /etc | grep nginx

先修改docs目录下的nginx配置
可以通过sed命令的方式去进行修改,也可以通过打开编辑器的形式修改。
# 修改服务器ip,也可以使用域名
sed -i "s%127.0.0.1%${your_ip}%g" docs/nginx.conf
# 修改WeBASE-Web服务端口(端口需要开通策略且不能被占用)
sed -i "s%5000%${your_port}%g" docs/nginx.conf
# 修改静态文件路径(文件需要有权限访问)
sed -i "s%/data/WeBASE-Web/dist%${your_file_dir}%g" docs/nginx.conf
# 节点管理服务ip和端口
sed -i "s%10.0.0.1:5001%${your_node_manager}%g" docs/nginx.conf
修改服务器ip
sed -i "s%127.0.0.1%192.168.1.100%g" docs/nginx.conf
由于我这里就是将WeBASE-Web服务部署到我本机了,所以192.168.1.100这个ip和127.0.0.1是相同的
修改端口:由于我的5000端口是空闲的,这里就使用默认的5000端口不进行修改
sed -i "s%5000%5000%g" docs/nginx.conf
修改静态配置文件:
sed -i "s%/data/WeBASE-Web/dist%%g" docs/nginx.conf
找到然后修改为~/fisco/webase-deploy/WeBASE-Web/dist
修改节点管理服务ip和端口:由于这里我是部署在本机,并且WeBASE-Node-Manager在部署的时候我也没有修改默认的5001端口

将刚刚修改好的配置文件方到nginx服务对应的配置那里,让nginx代理这个应用。
cp -rf ./docs/nginx.conf /etc/nginx/nginx.conf
将对应的nginx配置好后,我尝试启动,然后启动后发现,前端验证码一直刷不出来,后来根据官方文档中的内容登录页面的验证码加载不出来
发现是java和mysql的版本过高导致的,按照文档中操作就把这个问题解决了。
登陆上之后我发先后端有问题,我又回到WeBASE-Node-Manager部署的教程中,把数据库删除重新执行了一遍script/webash.shWebase节点管理服务部署WeBASE-Node-Manager

2万+

被折叠的 条评论
为什么被折叠?



