一键部署

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

    平台要求

    推荐使用CentOS 7.2+, Ubuntu 16.04及以上版本, 一键部署脚本将自动安装相关依赖项。

    其余系统可能导致安装依赖失败,可自行安装openssl, curl, wget, git, nginx依赖项后重试

    检查Java

    推荐JDK8-JDK13版本,使用OracleJDK安装指引

    注意:CentOS的yum仓库的OpenJDK缺少JCE(Java Cryptography Extension),会导致JavaSDK无法正常连接区块链节点。

    检查mysql

    MySQL-5.6或以上版本:

    1. mysql --version

    检查Python

    使用Python3.5或以上版本:

    1. python --version

    如已安装python3,也可通过python3 --version查看,在运行脚本时,使用python3命令即可

    PyMySQL部署(Python3.5+)

    Python3.5及以上版本,需安装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.4.1/webase-deploy.zip

    解压安装包:

    1. unzip webase-deploy.zip

    进入目录:

    1. cd webase-deploy

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

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

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

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

    ④ 服务端口不能小于1024。

    ⑤ 部署时,支持一键部署或者可视化部署两种方式,二者选择其一即可

    下面分别介绍一键部署和可视化部署的两种配置示例:

    1. 采用一键部署,则根据说明修改 common.properties 文件中的配置;
    2. 采用可视化部署,则根据说明修改 visual-deploy.properties 文件中的配置;
    • 一键部署方式时,修改 common.properties 配置文件
    1. # WeBASE子系统的最新版本(v1.1.0或以上版本)
    2. webase.web.version=v1.4.1
    3. webase.mgr.version=v1.4.1
    4. webase.sign.version=v1.4.1
    5. webase.front.version=v1.4.1
    6. # 节点管理子系统mysql数据库配置
    7. mysql.ip=127.0.0.1
    8. mysql.port=3306
    9. mysql.user=dbUsername
    10. mysql.password=dbPassword
    11. mysql.database=webasenodemanager
    12. # 签名服务子系统mysql数据库配置
    13. sign.mysql.ip=localhost
    14. sign.mysql.port=3306
    15. sign.mysql.user=dbUsername
    16. sign.mysql.password=dbPassword
    17. sign.mysql.database=webasesign
    18. # 节点前置子系统h2数据库名和所属机构
    19. front.h2.name=webasefront
    20. front.org=fisco
    21. # WeBASE管理平台服务端口
    22. web.port=5000
    23. # 节点管理子系统服务端口
    24. mgr.port=5001
    25. # 节点前置子系统端口
    26. front.port=5002
    27. # 签名服务子系统端口
    28. sign.port=5004
    29. # 节点监听Ip
    30. node.listenIp=127.0.0.1
    31. # 节点p2p端口
    32. node.p2pPort=30300
    33. # 节点链上链下端口
    34. node.channelPort=20200
    35. # 节点rpc端口
    36. node.rpcPort=8545
    37. # 是否使用国密(0: standard, 1: guomi)
    38. encrypt.type=0
    39. # 是否使用已有的链(yes/no)
    40. if.exist.fisco=no
    41. # 使用已有链时需配置
    42. # 路径下要存在sdk目录,sdk里存放sdk证书(ca.crt、node.crt和node.key)
    43. fisco.dir=/data/app/nodes/127.0.0.1
    44. # 前置所连接节点的绝对路径
    45. # 路径下要存在conf文件夹,conf里存放节点证书(ca.crt、node.crt和node.key)
    46. node.dir=/data/app/nodes/127.0.0.1/node0
    47. # 搭建新链时需配置
    48. # FISCO-BCOS版本
    49. fisco.version=2.6.0
    50. # 搭建节点个数(默认两个)
    51. node.counts=nodeCounts
    • 可视化方式时,修改 visual-deploy.properties 文件。

    重要

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

    1. # WeBASE子系统的最新版本(v1.1.0或以上版本)
    2. webase.web.version=v1.4.1
    3. webase.mgr.version=v1.4.1
    4. fisco.webase.docker.cdn.version=v1.4.1
    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. # 签名服务子系统mysql数据库配置
    12. sign.mysql.ip=localhost
    13. sign.mysql.port=3306
    14. sign.mysql.user=dbUsername
    15. sign.mysql.password=dbPassword
    16. sign.mysql.database=webasesign
    17. # WeBASE管理平台服务端口
    18. web.port=5000
    19. # 节点管理子系统服务端口
    20. mgr.port=5001
    21. # 签名服务子系统端口
    22. sign.port=5004
    23. # 是否使用国密(0: standard, 1: guomi)
    24. encrypt.type=0
    25. # WeBASE-Sign 对外提供服务的访问 IP 地址
    26. # 部署在其它主机的节点,需要使用此 IP 访问 WeBASE-Sign 服务
    27. # 不能是 127.0.0.1 或者 localhost
    28. sign.ip=
    29. # SSH 免密登录账号
    30. mgr.ssh.user=root
    31. # SSH 访问端口
    32. mgr.ssh.port=22
    33. # 部署节点服务的主机,存放链数据的目录
    34. mgr.ssh.rootDirOnHost=/opt/fisco

    部署

    • 部署服务

    部署方式:

    部署方式参数说明
    一键部署installAll部署 WeBASE 中间件服务,包括底层节点
    可视化部署installWeBASE部署 WeBASE 中间件服务,
    然后通过界面操作的方式部署底层节点,参考文档 可视化部署

    根据上文已选择的部署方式完成配置文件的修改后,执行下面对应的部署、停止、启动命令即可

    • 一键部署方式,则执行:
    1. # 1. 部署并启动所有服务
    2. python deploy.py installAll
    3. # 2. 停止一键部署的所有服务
    4. python deploy.py stopAll
    5. # 3. 启动一键部署的所有服务
    6. python deploy.py startAll
    • 可视化部署方式,则执行:
    1. # 1. 部署并启动可视化部署的所有服务
    2. python deploy.py installWeBASE
    3. # 2. 停止可视化部署的所有服务
    4. python deploy.py stopWeBASE
    5. # 3. 启动可视化部署的所有服务
    6. python deploy.py startWeBASE
    • 服务部署后,如果需要单独启停,可以使用以下命令:

    备注:

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

    WeBASE管理平台:

    • 一键部署完成后,打开浏览器访问
    1. http://{deployIP}:{webPort}
    2. 示例:http://localhost:5000

    备注:

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

      • 默认账号为admin,默认密码为Abcd1234。首次登陆要求重置密码
      • 添加节点前置WeBASE-Front到WeBASE管理平台;一键部署时,节点前置与节点管理服务默认是同机部署,添加前置则填写IP为127.0.0.1,默认端口为5002。参考上文中common.properties的配置项front.port={frontPort}
    • 若选择 可视化部署

      • 请参见 ,部署底层节点

    日志路径

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

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

    1. Java环境部署

    CentOS环境安装Java

    注意:CentOS下OpenJDK无法正常工作,需要安装OracleJDK。

    1. # 创建新的文件夹,安装Java 8或以上的版本,推荐JDK8-JDK13版本,将下载的jdk放在software目录
    2. # 从Oracle官网(https://www.oracle.com/technetwork/java/javase/downloads/index.html)选择Java 8或以上的版本下载,例如下载jdk-8u201-linux-x64.tar.gz
    3. # 解压jdk
    4. $ tar -zxvf jdk-8u201-linux-x64.tar.gz
    5. $ vim /etc/profile
    6. # 打开以后将下面三句输入到文件里面并保存退出
    7. export JAVA_HOME=/software/jdk-8u201 #这是一个文件目录,非文件
    8. export PATH=$JAVA_HOME/bin:$PATH
    9. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    10. # 生效profile
    11. $ source /etc/profile
    12. # 查询Java版本,出现的版本是自己下载的版本,则安装成功。
    13. java -version

    Ubuntu环境安装Java

    1. # 安装默认Java版本(Java 8或以上)
    2. sudo apt install -y default-jdk
    3. # 查询Java版本
    4. 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
    • 创建数据库

    3. Python部署

    python版本要求使用python3.x, 推荐使用python3.5及以上版本

    • CentOS

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

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

    常见问题

    1. Python命令出错

    • SyntaxError报错
    1. File "deploy.py", line 62
    2. print helpMsg
    3. ^
    4. SyntaxError: Missing parentheses in call to "print". Did you mean print(helpMsg)?
    • 找不到fallback关键字
    1. File "/home/ubuntu/webase-deploy/comm/utils.py", line 127, in getCommProperties
    2. value = cf.get('common', paramsKey,fallback=None)
    3. TypeError: get() got an unexpected keyword argument 'fallback'

    答:检查,推荐使用python3.5及以上版本

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

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

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

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

    4. 管理平台启动时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

    答:缺少/etc/nginx/mime.types文件,建议重装nginx。

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

    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)")

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

    6. 节点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)复制到该目录,再重新部署。

    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操作系统时,推荐使用。

    8.前置启动报错“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. ...

    答:一些OpenJDK版本缺少相关包,导致节点连接异常。推荐使用。

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

    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”重启。

    10. WeBASE-Web登录页面的验证码加载不出来

    答:检查WeBASE-Node-Manager后台服务是否已启动成功。若启动成功,检查后台日志:

    • 进入 webase-node-mgr 目录下,执行 bash status.sh 检查服务是否启动,如果服务没有启动,运行 bash start.sh 启动服务;

    • 如果服务已经启动,按照如下修改日志级别

      • webase-node-mgr/conf/application.yml
      1. #log config
      2. logging:
      3. level:
      4. com.webank.webase.node.mgr: debug
      • webase-node-mgr/conf/log/log4j2.xml
    • 修改日志level后,重启服务 bash stop.sh && bash start.sh

    11. WeBASE 国内镜像与CDN加速服务