之前用了很久的hyperledger fabric,感觉太难用了,很多配置不符合国人思维,无意间发现fisco bcos,写了段一键docker部署过程,供新手多多学习,提高区块链能力,仅供参考。
一键部署(Docker模式)可以在 同机 快速搭建WeBASE管理台环境,方便用户快速体验WeBASE管理平台。
一键部署(Docker模式)会搭建:节点(FISCO-BCOS)、管理平台(WeBASE-Web)、节点管理子系统(WeBASE-Node-Manager)、节点前置子系统(WeBASE-Front)、签名服务(WeBASE-Sign)。其中,节点的搭建是可选的,可以通过配置来选择使用已有链或者搭建新链。一键部署架构如下:
环境 | 版本 |
---|---|
Docker | 20.10.0及以上 |
Docker-Compose | 1.29.2及以上 |
Python | Python3.6及以上 |
MySQL | MySQL-5.6及以上 (可选) |
推荐使用CentOS 7.2+, Ubuntu 16.04及以上版本(我这里用的是centos 7.9), 一键部署(Docker模式)脚本依赖Docker与Docker-Compose进行容器的编排,将自动安装openssl, curl, wget, git, dos2unix
等相关依赖项。
其余系统可能导致安装依赖失败,可自行安装openssl, curl, wget, git, dos2unix
依赖项后重试
由于WeBASE Docker镜像中自带Java环境,无需在宿主机中配置Java环境;同时支持使用Docker启动一个新的mysql服务
Docker 20.10.0及以上版本
# yum install docker
# docker --version
Docker version 20.10.7, build f0df350
注意:确保Docker免sudo执行,实验环境我用的root用户
# cat /etc/docker/daemon.json
{}
注意:确保Docker免sudo执行,实验环境我用的root用户
以阿里云的镜像源为例
# 若目录不存在
mkdir -p /etc/docker
# 创建/修改daemon.json配置文件
vi /etc/docker/daemon.json
# 配置内容如下:
{
"registry-mirrors": ["https://419bd6w5.mirror.aliyuncs.com"]
}
systemctl daemon-reload
systemctl restart docker.service
Docker-Compose 1.29.2 及以上版本
依赖 curl 进行下载
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
修改执行权限
sudo chmod +x /usr/local/bin/docker-compose
将文件copy到 /usr/bin/目录下
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
检测安装是否成功
$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c
使用Python3.6或以上版本:
$ sudo yum install -y python36
$ sudo yum install -y python36-pip
$ python --version
# python3时
$ python3 --version
此处以CentOS 7(x86_64)安装MariaDB 10.2为例。MariaDB数据库是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可。MariaDB完全兼容 MySQL,包括API和命令行。MariaDB 10.2版本对应Mysql 5.7。
sudo yum install -y mariadb*
即可安装MariaDB 10.3,并跳到下文的 启停 章节即可。使用vi
或vim
创建新文件/etc/yum.repos.d/mariadb.repo
,并写入下文的文件内容
sudo vi /etc/yum.repos.d/mariadb.repo
# MariaDB 10.2 CentOS repository list - created 2021-07-12 07:37 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.2/centos7-amd64
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
yum clean all
yum makecache all
MariaDB 10.2
sudo yum install -y mariadb*
命令安装的MariaDB,其版本默认为5.5版本,对应Mysql版本为5.5。新版本MariaDB无法兼容升级,需要先卸载旧版本的MariaDB,卸载前需要备份数据库内容,卸载命令可参考yum remove mariadb
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:
sudo sed -i 's#//mirrors.ustc.edu.cn#//ipv4.mirrors.ustc.edu.cn#g' /etc/yum.repos.d/mariadb
启动:sudo systemctl start mariadb.service
停止:sudo systemctl stop mariadb.service
sudo systemctl enable mariadb.service
执行以下命令:
sudo mysql_secure_installation
以下根据提示输入:
Enter current password for root (enter for none):<–初次运行直接回车
Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码
Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车
Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车
Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车
Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车
mysql -uroot -p -h localhost -P 3306
mysql > GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql > flush PRIVILEGES;
mysql > GRANT ALL PRIVILEGES ON *.* TO 'test'@localhost IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql > flush PRIVILEGES;
安全温馨提示:
mysql -utest -p123456 -h localhost -P 3306
mysql > create database webasenodemanager;
网络策略检查:
webPort
(默认为5000)在服务器的网络安全组中是否设置为开放。如,云服务厂商如腾讯云,查看安全组设置,为webase-web开放5000端口。若端口未开放,将导致浏览器无法访问WeBASE服务页面frontPort
(默认5002);由于节点前置直连节点,不建议对公网开放节点前置端口,建议按需开放获取部署安装包:
wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/v1.5.3/webase-deploy.zip
解压安装包:
unzip webase-deploy.zip
进入目录:
cd webase-deploy
① 若未安装mysql(已安装可忽略),可在配置文件中启用docker.mysql=1
,并配置Docker中Mysql端口与密码,使用Docker启动Mysql。若使用已安装的Mysql则在配置文件中webase-node-mgr和webase-sign填入对应配置;
② 修改配置文件(vi common.properties
);
③ 一键部署支持使用已有链或者搭建新链。通过参数”if.exist.fisco”配置是否使用已有链,以下配置二选一即可:
fisco.dir
。路径下要存在sdk目录,sdk目录中包含ca.crt, sdk.crt, sdk.key及gm目录,gm目录中包含国密SSL所需证书,包含gmca.crt、gmsdk.crt、gmsdk.key、gmensdk.crt和gmensdk.key 注:使用国密版需要修改设置配置项encrypt.type=1。前置SDK与节点默认使用非国密SSL,如果需要使用国密SSL,需要修改设置配置项encrypt.sslType=1。
④ 服务端口不能小于1024
⑤ 部署时,修改 common.properties
配置文件
# WeBASE子系统的最新版本(v1.1.0或以上版本)
webase.web.version=v1.5.3
webase.mgr.version=v1.5.3
webase.sign.version=v1.5.3
webase.front.version=v1.5.3
#####################################################################
## 使用Docker启用Mysql服务,则需要配置以下值
# 1: enable mysql in docker
# 0: mysql run in host, required fill in the configuration of webase-node-mgr and webase-sign
docker.mysql=1
# if [docker.mysql=1], mysql run in host (only works in [installDockerAll])
# run mysql 5.6 by docker
docker.mysql.port=23306
# default user [root]
docker.mysql.password=123456
#####################################################################
## 不使用Docker启动Mysql,则需要配置以下值
# 节点管理子系统mysql数据库配置
mysql.ip=127.0.0.1
mysql.port=3306
# 下面改为刚设置的用户和密码
mysql.user=dbUsername
mysql.password=dbPassword
mysql.database=webasenodemanager
# 签名服务子系统mysql数据库配置
sign.mysql.ip=localhost
sign.mysql.port=3306
# 下面改为刚设置的用户和密码
sign.mysql.user=dbUsername
sign.mysql.password=dbPassword
sign.mysql.database=webasesign
# 节点前置子系统h2数据库名和所属机构
front.h2.name=webasefront
front.org=fisco
# WeBASE管理平台服务端口
web.port=5000
# 节点管理子系统服务端口
mgr.port=5001
# 节点前置子系统端口
front.port=5002
# 签名服务子系统端口
sign.port=5004
# 节点监听Ip
node.listenIp=127.0.0.1
# 节点p2p端口
node.p2pPort=30300
# 节点链上链下端口
node.channelPort=20200
# 节点rpc端口
node.rpcPort=8545
# 加密类型 (0: ECDSA算法, 1: 国密算法)
encrypt.type=0
# SSL连接加密类型 (0: ECDSA SSL, 1: 国密SSL)
# 只有国密链才能使用国密SSL
encrypt.sslType=0
# 是否使用已有的链(yes/no)
if.exist.fisco=no
# 使用已有链时需配置
# 已有链的路径,start_all.sh脚本所在路径
# 路径下要存在sdk目录(sdk目录中包含了SSL所需的证书,即ca.crt、sdk.crt、sdk.key和gm目录(包含国密SSL证书,gmca.crt、gmsdk.crt、gmsdk.key、gmensdk.crt和gmensdk.key)
fisco.dir=/data/app/nodes/127.0.0.1
# 前置所连接节点,在127.0.0.1目录中的节点中的一个
# 节点路径下要存在conf文件夹,conf里存放节点证书(ca.crt、node.crt和node.key)
node.dir=node0
# 搭建新链时需配置
# FISCO-BCOS版本
fisco.version=2.8.0
# 搭建节点个数(默认两个)
node.counts=nodeCounts
pullDockerAll
命令,部署服务将拉取所需的Docker镜像,包括 fiscoorg/fiscobcos, webasepro/webase-front, webasepro/webase-node-mgr, webasepro/webase-sign, webasepro/webase-web
,并根据配置确认是否拉取 mysql:5.6 的数据库镜像备注:
cat /etc/docker/daemon.json
进行查看docker pull
进行手动拉取,如手动拉取webase-front v1.5.3的镜像为docker pull webasepro/webase-front:v1.5.3
# 拉取时,可输入拉取超时时间,默认为60s
$ python3 deploy.py pullDockerAll
这里我拉取总是失败,最后是手动拉取镜像
docker pull webasepro/webase-front:v1.5.3
docker pull webasepro/webase-node-mgr:v1.5.3
docker pull webasepro/webase-sign:v1.5.3
docker pull webasepro/webase-web:v1.5.3
docker pull fiscoorg/fiscobcos:v2.8.0
installDockerAll
命令,部署服务将使用Docker自动部署并启动 FISCO BCOS节点 与 WeBASE 中间件服务,包括签名服务(sign)、节点前置(front)、节点管理服务(node-mgr)、节点管理前端(web)备注:
sudo python3 deploy.py installDockerAll
(sudo会导致无法获取当前用户的环境变量如JAVA_HOME)# 部署并启动所有服务(重新安装时需要先停止服务再重新安装,避免端口占用)
$ python3 deploy.py installDockerAll
部署完成后可以看到deploy has completed
的日志:
$ python3 deploy.py installDockerAll
...
============================================================
_ _ ______ ___ _____ _____
| | | | | ___ \/ _ \/ ___| ___|
| | | | ___| |_/ / /_\ \ `--.| |__
| |/\| |/ _ | ___ | _ |`--. | __|
\ /\ | __| |_/ | | | /\__/ | |___
\/ \/ \___\____/\_| |_\____/\____/
...
...
============================================================
============== deploy has completed ==============
============================================================
============== webase-web version v1.5.3 ========
============== webase-node-mgr version v1.5.3 ========
============== webase-sign version v1.5.3 ========
============== webase-front version v1.5.3 ========
============================================================
docker-compose -f docker/docker-compose.yaml logs -f
命令查看Docker-Compose运行日志(不同容器会以不同颜色的日志打印)# 可通过Ctrl + C 取消日志打印
$ docker-compose -f docker/docker-compose.yaml logs -f
...
webase-front-5002 | INFO: Starting ProtocolHandler ["http-nio-5002"]
webase-front-5002 | Sep 06, 2021 3:18:23 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
webase-front-5002 | INFO: Using a shared selector for servlet write/read
mysql-webase-23306 exited with code 0
webase-web-5000 | wait-for-it.sh: waiting 30 seconds for 127.0.0.1:5001
webase-web-5000 | wait-for-it.sh: timeout occurred after waiting 30 seconds for 127.0.0.1:5001
webase-web-5000 | start webase-web now...
# 一键部署
部署并启动所有服务 python3 deploy.py installDockerAll
停止一键部署的所有服务 python3 deploy.py stopDockerAll
启动一键部署的所有服务 python3 deploy.py startDockerAll
# 节点的启停
启动所有FISCO-BCOS节点: python3 deploy.py startNode
停止所有FISCO-BCOS节点: python3 deploy.py stopNode
# WeBASE服务的启停
启动所有WeBASE服务: python3 deploy.py dockerStart
停止所有WeBASE服务: python3 deploy.py dockerStop
成功部署后,可以根据以下步骤确认各个子服务是否启动成功
通过docker ps
命令,检查各子系统的容器是否存在
fiscobcos
,节点前置容器webase-front
,节点管理服务容器webase-node-mgr
,节点管理平台容器webase-web
,以及签名服务容器webase-sign
检查方法如下,若无输出,则代表容器未启动,需要到该子系统的日志中检查日志错误信息,并根据错误提示或本文档的常见问题进行排查
WeBASE管理平台:
http://{deployIP}:{webPort}
示例:http://localhost:5000
备注:
部署服务器IP和管理平台服务端口需对应修改,网络策略需开通
WeBASE管理平台使用说明请查看
使用手册
(获取WeBASE管理平台默认账号和密码,并初始化系统配置)
admin
,默认密码为Abcd1234
。首次登陆要求重置密码127.0.0.1
,默认端口为5002
。参考上文中common.properties
的配置项front.port={frontPort}
检查节点前置是否启动,可以通过访问http://{frontIp}:{frontPort}/WeBASE-Front
(默认端口5002);访问前,确保服务端已对本地机器开放端口,如开放front的5002端口。(不建议节点前置的端口对公网开放访问权限,应对部分机器IP按需开放)
详情参考官网