Webase管理平台搭建多机手动搭建版

ModelEngine·创作计划征文活动 10w+人浏览 1.4k人参与

零、 总览

先看一下Webase管理平台一共有几部分:

  1. 节点前置
  2. 签名服务
  3. 节点管理 (WeBASE-Node-Manager)
  4. 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不稳定,会导致我们编译这一步失败,如果失败了可以看一下报错信息,是不是什么443500之类的,多试几次就好了。

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-SignWeBASE-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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值