一键Docker部署

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

    平台要求

    推荐使用CentOS 7.2+, Ubuntu 16.04及以上版本, 一键部署(Docker模式)脚本依赖Docker与Docker-Compose进行容器的编排,将自动安装等相关依赖项。

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

    由于WeBASE Docker镜像中自带Java环境,无需在宿主机中配置Java环境;同时支持使用Docker启动一个新的mysql服务

    检查Docker

    Docker 20.10.0及以上版本,如需安装,参考Docker安装

    注意:确保Docker免sudo执行,参考

    配置Docker国内镜像源

    由于部分网络直接访问DockerHub官方镜像源拉取镜像的速度较慢,为提高部署的成功率,需要配置Docker的镜像源为国内的镜像源。

    查看镜像源配置
    1. cat /etc/docker/daemon.json
    2. {}

    若提示“目录不存在”、“该文件不存在”或“文件内容为空”属于正常现象,则说明未配置过Docker镜像源

    新建/修改Docker镜像源配置

    以中科大的镜像源为例(若提示权限不足(Permission Denied),则在命令前加上sudo)

    1. # 若目录不存在
    2. mkdir -p /etc/docker
    3. # 创建/修改daemon.json配置文件
    4. vi /etc/docker/daemon.json
    5. # 配置内容如下:
    6. {
    7. "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
    8. }
    重新加载配置文件,重启docker服务
    1. systemctl daemon-reload
    2. systemctl restart docker.service

    检查Docker-Compose

    Docker-Compose 1.29.2 及以上版本,如需安装,参考

    1. $ docker-compose --version
    2. docker-compose version 1.29.2, build 5becea4c

    注意:确保Docker免sudo执行,参考Docker用户组配置

    检查Python

    使用Python3.6或以上版本:

    1. python --version
    2. # python3时
    3. python3 --version

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

    PyMySQL部署(Python3.6+)

    Python3.6及以上版本,需安装PyMySQL依赖包

    • CentOS

      1. sudo yum -y install python36-pip
      2. sudo pip3 install PyMySQL
    • Ubuntu

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

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

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

    检查服务器网络策略

    网络策略检查:

    • 开放WeBASE管理平台端口:检查webase-web管理平台页面的端口webPort(默认为5000)在服务器的网络安全组中是否设置为开放。如,云服务厂商如腾讯云,查看安全组设置,为webase-web开放5000端口。若端口未开放,将导致浏览器无法访问WeBASE服务页面
    • 开放节点前置端口:如果希望通过浏览器直接访问webase-front节点前置的页面,则需要开放节点前置端口frontPort(默认5002);由于节点前置直连节点,不建议对公网开放节点前置端口,建议按需开放

    拉取部署脚本

    获取部署安装包:

    1. wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/v1.5.4/webase-deploy.zip

    解压安装包:

    1. unzip webase-deploy.zip

    进入目录:

    1. cd webase-deploy

    修改配置

    ① 若未安装mysql,可在配置文件中启用docker.mysql=1,并配置Docker中Mysql端口与密码,使用Docker启动Mysql。若使用已安装的Mysql则在配置文件中webase-node-mgr和webase-sign填入对应配置;

    ② 修改配置文件(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版本和节点安装个数,搭建的新链默认两个群组

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

    注:使用国密版需要修改设置配置项encrypt.type=1。前置SDK与节点默认使用非国密SSL,如果需要使用国密SSL,需要修改设置配置项encrypt.sslType=1

    ⑤ 部署时,修改 common.properties 配置文件

    1. # WeBASE子系统的最新版本(v1.1.0或以上版本)
    2. webase.web.version=v1.5.4
    3. webase.mgr.version=v1.5.4
    4. webase.sign.version=v1.5.3
    5. webase.front.version=v1.5.4
    6. #####################################################################
    7. ## 使用Docker启用Mysql服务,则需要配置以下值
    8. # 1: enable mysql in docker
    9. # 0: mysql run in host, required fill in the configuration of webase-node-mgr and webase-sign
    10. docker.mysql=1
    11. # if [docker.mysql=1], mysql run in host (only works in [installDockerAll])
    12. # run mysql 5.6 by docker
    13. docker.mysql.port=23306
    14. # default user [root]
    15. docker.mysql.password=123456
    16. #####################################################################
    17. ## 不使用Docker启动Mysql,则需要配置以下值
    18. # 节点管理子系统mysql数据库配置
    19. mysql.ip=127.0.0.1
    20. mysql.port=3306
    21. mysql.user=dbUsername
    22. mysql.password=dbPassword
    23. mysql.database=webasenodemanager
    24. # 签名服务子系统mysql数据库配置
    25. sign.mysql.ip=localhost
    26. sign.mysql.port=3306
    27. sign.mysql.user=dbUsername
    28. sign.mysql.password=dbPassword
    29. sign.mysql.database=webasesign
    30. # 节点前置子系统h2数据库名和所属机构
    31. front.h2.name=webasefront
    32. front.org=fisco
    33. # WeBASE管理平台服务端口
    34. web.port=5000
    35. # 节点管理子系统服务端口
    36. mgr.port=5001
    37. # 节点前置子系统端口
    38. front.port=5002
    39. # 签名服务子系统端口
    40. sign.port=5004
    41. # 节点监听Ip
    42. node.listenIp=127.0.0.1
    43. # 节点p2p端口
    44. node.p2pPort=30300
    45. # 节点链上链下端口
    46. node.channelPort=20200
    47. # 节点rpc端口
    48. node.rpcPort=8545
    49. # 加密类型 (0: ECDSA算法, 1: 国密算法)
    50. encrypt.type=0
    51. # SSL连接加密类型 (0: ECDSA SSL, 1: 国密SSL)
    52. # 只有国密链才能使用国密SSL
    53. encrypt.sslType=0
    54. # 是否使用已有的链(yes/no)
    55. if.exist.fisco=no
    56. # 使用已有链时需配置
    57. # 已有链的路径,start_all.sh脚本所在路径
    58. # 路径下要存在sdk目录(sdk目录中包含了SSL所需的证书,即ca.crt、sdk.crt、sdk.key和gm目录(包含国密SSL证书,gmca.crt、gmsdk.crt、gmsdk.key、gmensdk.crt和gmensdk.key)
    59. fisco.dir=/data/app/nodes/127.0.0.1
    60. # 前置所连接节点,在127.0.0.1目录中的节点中的一个
    61. # 节点路径下要存在conf文件夹,conf里存放节点证书(ca.crt、node.crt和node.key)
    62. node.dir=node0
    63. # 搭建新链时需配置
    64. # FISCO-BCOS版本
    65. fisco.version=2.8.0
    66. # 搭建节点个数(默认两个)
    67. node.counts=nodeCounts
    • 在上文已配置Docker镜像源为国内镜像源后,我们执行pullDockerAll命令,部署服务将拉取所需的Docker镜像,包括 fiscoorg/fiscobcos, webasepro/webase-front, webasepro/webase-node-mgr, webasepro/webase-sign, webasepro/webase-web,并根据配置确认是否拉取 mysql:5.6 的数据库镜像

    备注:

    • 请确认已配置Docker镜像源为国内镜像源,以提高拉取镜像的速度。可通过cat /etc/docker/daemon.json进行查看
    • 拉取镜像开始前需要输入一个拉取超时时间,如60,即60s拉取未完成则提示超时
    • 超时拉取的镜像,可通过docker pull进行手动拉取,如手动拉取webase-front v1.5.3的镜像为docker pull webasepro/webase-front:v1.5.3
    1. # 拉取时,可输入拉取超时时间,默认为60s

    部署

    • 执行installDockerAll命令,部署服务将使用Docker自动部署并启动 FISCO BCOS节点 与 WeBASE 中间件服务,包括签名服务(sign)、节点前置(front)、节点管理服务(node-mgr)、节点管理前端(web)

    备注:

    • 部署脚本会拉取相关Docker镜像进行部署,需保持网络畅通
    • 首次部署需要初始化数据库,重复部署时可以根据提示不重复操作
    • 部署过程中出现报错时,可根据错误提示进行操作,或根据本文档中的进行排查
    • 不要用sudo执行脚本,例如sudo python3 deploy.py installDockerAll(sudo会导致无法获取当前用户的环境变量如JAVA_HOME)
    • 确保已安装Docker与Docker-Compose、配置Docker国内镜像源并配置Docker用户组
    1. # 部署并启动所有服务(重新安装时需要先停止服务再重新安装,避免端口占用)
    2. $ python3 deploy.py installDockerAll

    部署完成后可以看到deploy has completed的日志:

    1. $ python3 deploy.py installDockerAll
    2. ...
    3. ============================================================
    4. _ _ ______ ___ _____ _____
    5. | | | | | ___ \/ _ \/ ___| ___|
    6. | | | | ___| |_/ / /_\ \ `--.| |__
    7. | |/\| |/ _ | ___ | _ |`--. | __|
    8. \ /\ | __| |_/ | | | /\__/ | |___
    9. \/ \/ \___\____/\_| |_\____/\____/
    10. ...
    11. ...
    12. ============================================================
    13. ============== deploy has completed ==============
    14. ============================================================
    15. ============== webase-web version v1.5.3 ========
    16. ============== webase-node-mgr version v1.5.3 ========
    17. ============== webase-sign version v1.5.3 ========
    18. ============== webase-front version v1.5.3 ========
    19. ============================================================
    • 服务启动后,通过docker-compose -f docker/docker-compose.yaml logs -f命令查看Docker-Compose运行日志(不同容器会以不同颜色的日志打印)
    1. # 可通过Ctrl + C 取消日志打印
    2. $ docker-compose -f docker/docker-compose.yaml logs -f
    3. ...
    4. webase-front-5002 | INFO: Starting ProtocolHandler ["http-nio-5002"]
    5. webase-front-5002 | Sep 06, 2021 3:18:23 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
    6. webase-front-5002 | INFO: Using a shared selector for servlet write/read
    7. mysql-webase-23306 exited with code 0
    8. webase-web-5000 | wait-for-it.sh: waiting 30 seconds for 127.0.0.1:5001
    9. webase-web-5000 | wait-for-it.sh: timeout occurred after waiting 30 seconds for 127.0.0.1:5001
    10. webase-web-5000 | start webase-web now...
    • 服务部署后,需要对各服务进行启停操作,可以使用以下命令:
    1. # 一键部署
    2. 部署并启动所有服务 python3 deploy.py installDockerAll
    3. 停止一键部署的所有服务 python3 deploy.py stopDockerAll
    4. 启动一键部署的所有服务 python3 deploy.py startDockerAll
    5. # 节点的启停
    6. 启动所有FISCO-BCOS节点: python3 deploy.py startNode
    7. 停止所有FISCO-BCOS节点: python3 deploy.py stopNode
    8. # WeBASE服务的启停
    9. 启动所有WeBASE服务: python3 deploy.py dockerStart
    10. 停止所有WeBASE服务: python3 deploy.py dockerStop

    状态检查

    成功部署后,可以根据以下步骤确认各个子服务是否启动成功

    检查各子系统容器

    通过docker ps命令,检查各子系统的容器是否存在

    • 包含:节点容器fiscobcos,节点前置容器webase-front,节点管理服务容器webase-node-mgr,节点管理平台容器webase-web,以及签名服务容器webase-sign

    检查方法如下,若无输出,则代表容器未启动,需要到该子系统的日志中检查日志错误信息,并根据错误提示或本文档的进行排查

    • 检查节点容器,此处部署了两个节点node0, node1
    1. $ docker ps | grep fiscobcos

    输出如下

    1. 8fc863019565 fiscoorg/fiscobcos:v2.7.2 "/usr/local/bin/fisc…" About a minute ago Up About a minute datahomedeploynodes127.0.0.1node1
    2. 87978ae7050c fiscoorg/fiscobcos:v2.7.2 "/usr/local/bin/fisc…" About a minute ago Up About a minute datahomedeploynodes127.0.0.1node0
    • 检查节点前置webase-front的容器
    1. $ docker ps | grep webase-front

    输出如下

    1. 26a131040e58 webasepro/webase-front:v1.5.3 "/wait-for-it.sh 127…" 37 seconds ago Up 36 seconds webase-front-5002
    • 检查节点管理服务webase-node-manager的容器
    1. $ docker ps | grep webase-node.mgr

    输出如下

    1. cc6bbce73a85 webasepro/webase-node-mgr:v1.5.3 "/wait-for-it.sh 127…" 37 seconds ago Up 36 seconds webase-node-mgr-5001
    • 检查webase-web对应的nginx容器
    1. $ docker ps | grep webase-web

    输出如下

    • 检查签名服务webase-sign的容器
    1. $ docker ps | grep webase-sign

    输出如下

    1. 49d0650ae904 webasepro/webase-sign:v1.5.3 "/wait-for-it.sh 127…" 37 seconds ago Up 37 seconds webase-sign-5004

    检查容器端口

    通过netstat命令,检查各子系统容器的端口监听情况。

    检查方法如下,若无输出,则代表容器端口监听异常,需要到该子系统的日志中,并根据错误提示或本文档的常见问题进行排查

    • 检查节点channel端口(默认为20200)是否已监听
    1. $ netstat -anlp | grep 20200

    输出如下

    1. tcp 0 0 0.0.0.0:20200 0.0.0.0:* LISTEN 29069/fisco-bcos
    • 检查webase-front端口(默认为5002)是否已监听
    1. $ netstat -anlp | grep 5002

    输出如下

    1. tcp6 0 0 :::5002 :::* LISTEN 2909/java
    • 检查webase-node-mgr端口(默认为5001)是否已监听
    1. $ netstat -anlp | grep 5001

    输出如下

    1. tcp6 0 0 :::5001 :::* LISTEN 14049/java
    • 检查webase-web端口(默认为5000)在nginx是否已监听
    1. $ netstat -anlp | grep 5000

    输出如下

    1. tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 3498/nginx: master
    • 检查webase-sign端口(默认为5004)是否已监听
    1. $ netstat -anlp | grep 5004

    输出如下

    1. tcp6 0 0 :::5004 :::* LISTEN 25271/java

    检查服务日志

    各子服务的日志路径如下:

    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 # 节点日志目录

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

    日志目录中包含{XXX}.log全量日志文件和{XXX}-error.log错误日志文件

    • 通过日志定位错误问题时,可以结合.log全量日志和-error.log错误日志两种日志信息进行排查。,如查询WeBASE-Front日志,则打开WeBASE-Front-error.log可以快速找到错误信息,根据错误查看WeBASE-Front.log的相关内容,可以看到错误日志前后的普通日志信息

    检查服务日志有无错误信息

    • 如果各个子服务的容器已启用且端口已监听,可直接访问下一章节访问WeBASE
    • 如果上述检查步骤出现异常,如检查不到容器或端口监听,则需要按进入异常子服务的日志目录,检查该服务的日志
    • 如果检查步骤均无异常,但服务仍无法访问,可以分别检查部署日志deployLog,节点前置日志frontLog, 节点管理服务日志nodeMgrLog进行排查:
      • 检查webase-deploy/log中的部署日志,是否在部署时出现错误
      • 检查webase-deploy/webase-front/log中的节点前置日志,如果最后出现application run success字样则代表运行成功
      • 检查webase-deploy/webase-node-mgr/log或webase-deploy/webase-sign/log中的日志
      • 检查webase-deploy/nodes/127.0.0.1/nodeXXX/log中的节点日志

    搜索日志

    通过查看日志可以检查服务的运行状态,我们可以进入各子服务的日志路径,通过grep检查日志文件,以此判断服务是否正常运行

    • 查看运行成功日志:WeBASE子服务运行成功后均会打印日志main run success,可以通过搜索此关键字来确认服务正常运行。

    如,检查webase-front日志,其他WeBASE服务可进行类似操作

    1. $ cd webase-front
    2. $ grep -B 3 "main run success" log/WeBASE-Front.log

    输出如下:

    1. 2020-12-09 15:47:25.355 [main] INFO ScheduledAnnotationBeanPostProcessor() - No TaskScheduler/ScheduledExecutorService bean found for scheduled processing
    2. 2020-12-09 15:47:25.378 [main] INFO TomcatEmbeddedServletContainer() - Tomcat started on port(s): 5002 (http)
    3. 2020-12-09 15:47:25.383 [main] INFO Application() - Started Application in 6.983 seconds (JVM running for 7.768)
    4. 2020-12-09 15:47:25.383 [main] INFO Application() - main run success...
    • 查看报错日志:出现异常时,可以搜索关键字ERROR进行检查

    如,检查webase-front错误日志,其他WeBASE服务可进行类似操作

    1. $ cd webase-front
    2. $ grep "ERROR" log/WeBASE-Front.log

    输出如下

    1. 2020-12-09 09:10:42.138 [http-nio-5002-exec-1] ERROR ExceptionsHandler() - catch frontException: no active connection available network exception requset send failed! please check the log file content for reasons.
    2. 2020-12-09 09:10:42.145 [http-nio-5002-exec-4] ERROR Web3ApiService() - getBlockNumber fail.

    如果出现错误日志,根据错误提示或本文档的进行排查

    • 提交Issue或讨论问题时,可以在issue中配上自己的环境配置,操作步骤,错误现象,错误日志等信息,方便社区用户快速定位问题

    WeBASE管理平台:

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

    备注:

    • 部署服务器IP和管理平台服务端口需对应修改,网络策略需开通
      • 使用云服务厂商的服务器时,需要开通网络安全组的对应端口。如开放WeBASE管理台使用的5000端口
    • 检查节点前置是否启动,可以通过访问http://{frontIp}:{frontPort}/WeBASE-Front(默认端口5002);访问前,确保服务端已对本地机器开放端口,如开放front的5002端口。(不建议节点前置的端口对公网开放访问权限,应对部分机器IP按需开放)

    附录

    在 Debian/Ubuntu/CentOS/RHEL,直接执行命令:

    1. # 该脚本是 Docker 官方提供的 Linux 自动安装脚本
    2. bash <(curl -s -L get.docker.com)

    在 CentOS/RHEL 8.x 中,使用上面的自动脚本安装时,会出现下面的错误:

    1. Last metadata expiration check: 0:37:43 ago on Sat 22 Feb 2020 07:40:15 PM CST.
    2. Error:
    3. Problem: package docker-ce-3:19.03.6-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
    4. - cannot install the best candidate for the job
    5. - package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
    6. - package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
    7. - package containerd.io-1.2.2-3.el7.x86_64 is excluded
    8. - package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
    9. - package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
    10. (try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

    要解决这个问题,需要手动安装 containerd.io后,在执行自动安装脚本

    1. # 下载最新的 containerd.io 安装包
    2. wget https://download.docker.com/linux/centos/8/x86_64/stable/Packages/containerd.io-1.2.13-3.2.el7.x86_64.rpm
    3. # 手动安装 containerd.io
    4. yum localinstall containerd.io-1.2.13-3.2.el7.x86_64.rpm

    Docker-Compose安装

    获取Docker-Compose的github仓库提供的二进制文件,其中版本号1.29.2可切换到更新版本,-o则输出到指定位置

    依赖 curl 进行下载

    1. sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

    修改执行权限

    1. sudo chmod +x /usr/local/bin/docker-compose

    检测安装是否成功

    1. $ docker-compose --version
    2. docker-compose version 1.29.2, build 5becea4c

    Python部署

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

    • CentOS

    • Ubuntu

      1. // 添加仓库,回车继续
      2. sudo add-apt-repository ppa:deadsnakes/ppa
      3. // 安装python 3.6
      4. sudo apt-get install -y python3.6
      5. sudo apt-get install -y python3-pip

    数据库部署

    ① CentOS安装MariaDB

    此处以CentOS 7(x86_64)安装MariaDB 10.2为例。MariaDB数据库是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可。MariaDB完全兼容 MySQL,包括API和命令行。MariaDB 10.2版本对应Mysql 5.7。其他安装方式请参考。

    • CentOS 7 默认MariaDB为5.5版本,安装10.2版本需要按下文进行10.2版本的配置。
    • 若使用CentOS 8则直接使用sudo yum install -y mariadb*即可安装MariaDB 10.3,并跳到下文的 启停 章节即可。

    使用vivim创建新文件/etc/yum.repos.d/mariadb.repo,并写入下文的文件内容(参考MariaDB中科大镜像源修改进行配置)

    • 创建repo文件
    1. sudo vi /etc/yum.repos.d/mariadb.repo
    • 文件内容,此处使用的是中科大镜像源
    1. # MariaDB 10.2 CentOS repository list - created 2021-07-12 07:37 UTC
    2. # http://downloads.mariadb.org/mariadb/repositories/
    3. [mariadb]
    4. name = MariaDB
    5. baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.2/centos7-amd64
    6. gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
    7. gpgcheck=1
    • 更新yum源缓存数据
    1. yum clean all
    2. yum makecache all
    • 安装MariaDB 10.2
    • 如果已存在使用sudo yum install -y mariadb*命令安装的MariaDB,其版本默认为5.5版本,对应Mysql版本为5.5。新版本MariaDB无法兼容升级,需要先卸载旧版本的MariaDB,卸载前需要备份数据库内容,卸载命令可参考yum remove mariadb
    1. sudo yum install MariaDB-server MariaDB-client -y

    若安装时遇到错误“Failed to connect to 2001:da8:d800:95::110: Network is unreachable”,将源地址中的 mirrors.ustc.edu.cn 替换为 ipv4.mirrors.ustc.edu.cn 以强制使用 IPv4:

    1. sudo sed -i 's#//mirrors.ustc.edu.cn#//ipv4.mirrors.ustc.edu.cn#g' /etc/yum.repos.d/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;

    常见问题

    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.6及以上版本

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

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

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

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

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

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

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

    5. 节点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、sdk.key、sdk.crt、node.crt、node.key)复制到该sdk目录,再重新部署。如果是国密链,并且sdk和节点使用国密ssl连接时,需在sdk目录里创建gm目录,gm目录存放国密sdk证书(gmca.crt、gmsdk.crt、gmsdk.key、gmensdk.crt和gmensdk.key)。

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

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

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

    答:可以在root用户下配置环境变量如JAVA_HOME等,或者通过下面操作,尝试创建docker用户组

    1. # 创建docker用户组
    2. sudo groupadd docker
    3. # 将当前用户添加到docker用户组
    4. sudo usermod -aG docker $USER
    5. # 重启docker服务
    6. sudo systemctl restart docker
    7. # 切换或者退出当前账户,重新ssh登入
    8. exit

    8. 如何使用启动Docker镜像

    答:使用docker run命令启动的配置方法,可以参考WeBASE一键部署工具WeBASE/deploy/docker目录中的docker-compose配置文件docker-compose-template.yaml

    docker-compose-template.yaml中的WeBASE-Front为例,启动容器时会用到docker启动时专用的application-docker.yml配置文件,可以通过配置docker容器的环境变量以替换application-docker.yml中的默认变量:

    1. webase-front:
    2. image: webasepro/webase-front:v1.5.3
    3. container_name: webase-front-5002
    4. network_mode: "host"
    5. environment:
    6. SPRING_PROFILES_ACTIVE: docker
    7. SERVER_PORT: 5002
    8. SDK_IP: 127.0.0.1
    9. SDK_CHANNEL_PORT: 20200
    10. KEY_SERVER: "127.0.0.1:5004"
    11. volumes:
    12. - /webase-deploy/nodes/127.0.0.1/sdk:/dist/sdk
    13. - /webase-deploy/webase-front/log:/dist/log
    14. - /webase-deploy/webase-front/h2:/h2

    如,在application-docker.yml中替换sdk连接节点的配置SDK_CHANNEL_IP:

    • 在容器启动时通过-e SPRING_PROFILES_ACTIVE=docker指定spring的配置文件为docker的yml,并通过-e SDK_CHANNEL_PORT=20201指定channel连接的端口,
    1. sdk:
    2. corePoolSize: 50
    3. maxPoolSize: 100
    4. queueCapacity: 100
    5. ip: ${SDK_IP:127.0.0.1}
    6. channelPort: ${SDK_CHANNEL_PORT:20200}
    7. certPath: conf

    综上所述,以下为启动WeBASE-Front容器的完整docker run命令示例

    • 将sdk证书挂载到容器的/dist/sdk
    • 将容器中的h2数据库目录和日志目录挂载到宿主机中
    • 将一个application-docker.yml挂载到容器中,覆盖容器中默认的yml配置,并配置SPRING环境变量以启用-docker结尾的yml配置文件

    欢迎给WeBASE的文档提交 Pull Request 补充更多的 Q&A