一键部署

​ 一键部署可以在 同机 快速搭建WeBASE管理台环境,方便用户快速体验WeBASE管理平台。

​ 一键部署会搭建:节点(FISCO-BCOS 2.0)、管理平台(WeBASE-Web)、节点管理子系统(WeBASE-Node-Manager)、节点前置子系统(WeBASE-Front)。其中,节点的搭建是可选的,可以通过配置来选择使用已有链或者搭建新链。一键部署架构如下:

[]

前提条件

环境版本
JavaJDK8或以上版本
MySQLMySQL-5.6或以上版本
PythonPython3.4+
PyMySQL使用python3时需安装

检查环境

检查Java

JDK8或以上版本:

  1. java -version
  • Java推荐使用OpenJDK ,建议从OpenJDK网站 自行下载(CentOS的yum仓库的OpenJDK缺少JCE(Java Cryptography Extension),导致Web3SDK无法正常连接区块链节点)

检查mysql

MySQL-5.6或以上版本:

  1. mysql --version

检查Python

Python3.4或以上版本:

  1. python --version

PyMySQL部署(Python3.4+)

备注 使用python2.7+时,需安装MySQL-python,推荐参考Mysql-python安装示例的python2指南进行安装;

Python3.4及以上版本,需安装PyMysql依赖包:

  • CentOS

    1. sudo pip3 install PyMySQL

    不支持pip命令的话,可以使用以下方式:

    1. git clone https://github.com/PyMySQL/PyMySQL
    2. cd PyMySQL/
    3. python3 setup.py install
  • Ubuntu

    1. sudo apt-get install -y python3-pip
    2. sudo pip3 install PyMySQL

拉取部署脚本

获取部署安装包:

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

解压安装包:

  1. unzip webase-deploy.zip

进入目录:

  1. cd webase-deploy

修改配置

① mysql数据库需提前安装,已安装直接配置即可,还未安装请参看数据库部署

② 修改配置文件(vi common.properties),没有变化的可以不修改;

③ 一键部署支持使用已有链或者搭建新链。通过参数”if.exist.fisco”配置是否使用已有链,以下配置二选一即可:

  • 当配置”yes”时,需配置已有链的路径
  • 当配置”no”时,需配置节点fisco版本和节点安装个数,搭建的新链默认两个群组

​ 如果不使用一键部署搭建新链,可以参考FISCO BCOS官方文档搭建 FISCO BCOS部署流程

④ 服务端口不能小于1024。

  1. # WeBASE子系统的最新版本(v1.1.0或以上版本)
  2. webase.web.version=v1.2.4
  3. webase.mgr.version=v1.2.4
  4. webase.front.version=v1.2.4
  5. # 节点管理子系统mysql数据库配置
  6. mysql.ip=127.0.0.1
  7. mysql.port=3306
  8. mysql.user=dbUsername
  9. mysql.password=dbPassword
  10. mysql.database=webasenodemanager
  11. # 节点前置子系统h2数据库名
  12. front.h2.name=webasefront
  13. # WeBASE管理平台服务端口
  14. web.port=5000
  15. # 节点管理子系统服务端口
  16. mgr.port=5001
  17. # 节点前置子系统端口
  18. front.port=5002
  19. # 节点监听Ip
  20. node.listenIp=127.0.0.1
  21. # 节点p2p端口
  22. node.p2pPort=30300
  23. # 节点链上链下端口
  24. node.channelPort=20200
  25. # 节点rpc端口
  26. node.rpcPort=8545
  27. # 是否使用国密(0: standard, 1: guomi)
  28. encrypt.type=0
  29. # 是否使用已有的链(yes/no)
  30. if.exist.fisco=no
  31. # 使用已有链时需配置
  32. # 已有链的路径,start_all.sh脚本所在路径
  33. # 路径下要存在sdk目录,sdk里存放sdk证书(ca.crt、node.crt和node.key)
  34. fisco.dir=/data/app/nodes/127.0.0.1
  35. # 前置所连接节点的绝对路径
  36. # 路径下要存在conf文件夹,conf里存放节点证书(ca.crt、node.crt和node.key)
  37. node.path=/data/app/nodes/127.0.0.1/node0
  38. # 搭建新链时需配置
  39. # FISCO-BCOS版本
  40. fisco.version=2.3.0
  41. # 搭建节点个数(默认两个)
  42. node.counts=nodeCounts

部署

部署所有服务:

  1. python deploy.py installAll

停止所有服务:

  1. python deploy.py stopAll

服务部署后,如果需要单独启停,可以使用以下命令:

  1. 启动FISCO-BCOS节点: python deploy.py startNode
  2. 停止FISCO-BCOS节点: python deploy.py stopNode
  3. 启动WeBASE-Web: python deploy.py startWeb
  4. 停止WeBASE-Web: python deploy.py stopWeb
  5. 启动WeBASE-Node-Manager: python deploy.py startManager
  6. 停止WeBASE-Node-Manager: python deploy.py stopManager
  7. 启动WeBASE-Front: python deploy.py startFront
  8. 停止WeBASE-Front: python deploy.py stopFront

备注:

  • 部署脚本会拉取相关安装包进行部署,需保持网络畅通。
  • 首次部署需要下载编译包和初始化数据库,重复部署时可以根据提示不重复操作
  • 部署过程出现问题可以查看常见问题解答

访问

WeBASE管理平台:

  1. http://{deployIP}:{webPort}
  2. 示例:http://localhost:5000

备注:

  • 部署服务器IP和管理平台服务端口需对应修改,网络策略需开通
  • WeBASE管理平台使用说明请查看使用手册(获取WeBASE管理平台默认账号和密码,并初始化系统配置)

日志路径

  1. |-- webase-deploy # 一键部署目录
  2. |--|-- log # 部署日志目录
  3. |--|-- webase-web # 管理平台目录
  4. |--|--|-- log # 管理平台日志目录
  5. |--|-- webase-node-mgr # 节点管理服务目录
  6. |--|--|-- log # 节点管理服务日志目录
  7. |--|-- webase-front # 节点前置服务目录
  8. |--|--|-- log # 节点前置服务日志目录
  9. |--|-- nodes # 一件部署搭链节点目录
  10. |--|--|-- 127.0.0.1
  11. |--|--|--|-- node0 # 具体节点目录
  12. |--|--|--|--|-- log # 节点日志目录

备注: 当前节点日志路径为一件部署搭链的路径,使用已有链请在相关路径查看日志。

附录

1. Java环境部署

此处给出OpenJDK安装简单步骤,供快速查阅。更详细的步骤,请参考官网

① 安装包下载

官网下载对应版本的java安装包,并解压到服务器相关目录

  1. mkdir /software
  2. tar -zxvf openjdkXXX.tar.gz /software/

② 配置环境变量

  • 修改/etc/profile
  1. sudo vi /etc/profile
  • 在/etc/profile末尾添加以下信息
  1. JAVA_HOME=/software/jdk-11
  2. PATH=$PATH:$JAVA_HOME/bin
  3. CLASSPATH==.:$JAVA_HOME/lib
  4. export JAVA_HOME CLASSPATH PATH
  • 重载/etc/profile
  1. source /etc/profile

③ 查看版本

  1. java -version

2. 数据库部署

此处以Centos安装MariaDB为例。MariaDB数据库是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可。MariaDB完全兼容 MySQL,包括API和命令行。其他安装方式请参考MySQL官网

① 安装MariaDB

  • 安装命令
  1. sudo yum install -y mariadb*
  • 启停
  1. 启动:sudo systemctl start mariadb.service
  2. 停止:sudo systemctl stop mariadb.service
  • 设置开机启动
  1. sudo systemctl enable mariadb.service
  • 初始化
  1. 执行以下命令:
  2. sudo mysql_secure_installation
  3. 以下根据提示输入:
  4. Enter current password for root (enter for none):<–初次运行直接回车
  5. Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
  6. New password: <– 设置root用户的密码
  7. Re-enter new password: <– 再输入一次你设置的密码
  8. Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车
  9. Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车
  10. Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车
  11. Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车

② 授权访问和添加用户

  • 使用root用户登录,密码为初始化设置的密码
  1. mysql -uroot -p -h localhost -P 3306
  • 授权root用户远程访问
  1. mysql > GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
  2. mysql > flush PRIVILEGES;
  • 创建test用户并授权本地访问
  1. mysql > GRANT ALL PRIVILEGES ON *.* TO 'test'@localhost IDENTIFIED BY '123456' WITH GRANT OPTION;
  2. mysql > flush PRIVILEGES;

安全温馨提示:

  • 例子中给出的数据库密码(123456)仅为样例,强烈建议设置成复杂密码
  • 例子中root用户的远程授权设置会使数据库在所有网络上都可以访问,请按具体的网络拓扑和权限控制情况,设置网络和权限帐号

③ 测试连接和创建数据库

  • 登录数据库
  1. mysql -utest -p123456 -h localhost -P 3306
  • 创建数据库
  1. mysql > create database webasenodemanager;

3. Python部署

  • CentOS

    1. sudo yum install -y python-requests
  • Ubuntu

    1. sudo apt-get install -y python-requests

4. 安装MySql python依赖包

查看python版本

  1. python --version

python3.4+ 安装Mysql依赖包,可参考 检查环境-PyMysql

4.1 MySQL-python部署(Python2.7)

  • CentOS

    1. sudo yum install -y MySQL-python
  • Ubuntu

    1. sudo apt-get install -y python-pip
    2. sudo pip install MySQL-python

常见问题

1. Python命令出错

  1. File "deploy.py", line 62
  2. print helpMsg
  3. ^
  4. SyntaxError: Missing parentheses in call to "print". Did you mean print(helpMsg)?

答:检查Python版本

2. 使用Python2时找不到MySQLdb

  1. Traceback (most recent call last):
  2. ...
  3. ImportError: No module named MySQLdb

答:需要安装MySQL-python,安装请参看 附录

3. 使用Python3时找不到pymysql

  1. Traceback (most recent call last):
  2. ...
  3. ImportError: No module named 'pymysql'

答:需要安装PyMySQL,安装请参看 pymysql

4. 安装MySQL-python遇到问题

  1. Command "python setup.py egg_info" failed with error code 1

答:运行下面两个命令

  1. pip install --upgrade setuptools
  2. python -m pip install --upgrade pip

5. 部署时某个组件失败,重新部署提示端口被占用问题

答:因为有个别组件是启动成功的,需先执行“python deploy.py stopAll”将其停止,再执行“python deploy.py installAll”部署全部。

6. 管理平台启动时Nginx报错

  1. ...
  2. ============== WeBASE-Web start... ==============
  3. Traceback (most recent call last):
  4. ...
  5. Exception: execute cmd error ,cmd : sudo /usr/local/nginx/sbin/nginx -c /data/app/webase-deploy/comm/nginx.conf, status is 256 ,output is nginx: [emerg] open() "/etc/nginx/mime.types" failed (2: No such file or directory) in /data/app/webase-deploy/comm/nginx.conf:13

答:检查服务器是否安装了nginx,如果未安装,则通过”which nginx”查询nginx文件路径并删除。

7. 部署时数据库访问报错

  1. ...
  2. checking database connection
  3. Traceback (most recent call last):
  4. File "/data/temp/webase-deploy/comm/mysql.py", line 21, in dbConnect
  5. conn = mdb.connect(host=mysql_ip, port=mysql_port, user=mysql_user, passwd=mysql_password, charset='utf8')
  6. File "/usr/lib64/python2.7/site-packages/MySQLdb/__init__.py", line 81, in Connect
  7. return Connection(*args, **kwargs)
  8. File "/usr/lib64/python2.7/site-packages/MySQLdb/connections.py", line 193, in __init__
  9. super(Connection, self).__init__(*args, **kwargs2)
  10. OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")

答:确认数据库用户名和密码

8. 节点sdk目录不存在

  1. ...
  2. ======= FISCO-BCOS sdk dir:/data/app/nodes/127.0.0.1/sdk is not exist. please check! =======

答:确认节点安装目录下有没有sdk目录(企业部署工具搭建的链可能没有),如果没有,需手动创建”mkdir sdk”,并将节点证书(ca.crt、node.crt、node.key)复制到该目录,再重新部署。

9. 前置启动报错“nested exception is javax.net.ssl.SSLException”

  1. ...
  2. nested exception is javax.net.ssl.SSLException: Failed to initialize the client-side SSLContext: Input stream not contain valid certificates.

答:CentOS的yum仓库的OpenJDK缺少JCE(Java Cryptography Extension),导致Web3SDK无法正常连接区块链节点,因此在使用CentOS操作系统时,推荐从OpenJDK网站自行下载。

10.前置启动报错“Processing bcos message timeout”

  1. ...
  2. [main] ERROR SpringApplication() - Application startup failed
  3. org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'contractController': Unsatisfied dependency expressed through field 'contractService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'contractService': Unsatisfied dependency expressed through field 'web3jMap'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'web3j' defined in class path resource [com/webank/webase/front/config/Web3Config.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.HashMap]: Factory method 'web3j' threw exception; nested exception is java.io.IOException: Processing bcos message timeout
  4. ...

答:一些Oracle JDK版本缺少相关包,导致节点连接异常。推荐使用OpenJDK,从OpenJDK网站自行下载。

11. 服务进程起来了,服务不正常

  1. ...
  2. ======= WeBASE-Node-Manager starting . Please check through the log file (default path:./webase-node-mgr/log/). =======

答:查看日志,确认问题原因。确认后修改重启,如果重启提示服务进程在运行,先执行“python deploy.py stopAll”将其停止,再执行“python deploy.py startAll”重启。