可视化部署,主要是为了部署多节点的webase平台
可视化部署是指通过 WeBASE 管理平台(WeBASE-Web + WeBASE-Node-Manager),在 多台 主机上快速部署 FISCO-BCOS 底层节点和 WeBASE-Front 前置 以及 对底层节点的扩容操作。
可视化部署,需要先部署依赖服务,包括管理平台(WeBASE-Web)、节点管理子系统(WeBASE-Node-Manager)、签名服务(WeBASE-Sign)。
然后通过 WeBASE 管理平台(WeBASE-Web)的界面在填入的主机中部署节点(FISCO-BCOS 2.5.0+,暂未支持FISCO-BCOS 3.0系列)和节点前置子系统(WeBASE-Front 1.4.0+)。
一、基础环境的部署安装
配置系统依赖分成宿主机(Node-Manager所在主机)与节点主机(节点所在主机)两种:
- 宿主机:安装WeBASE-Node-Manager的主机,配置Ansible、配置Ansible免密登录节点机
- 节点主机:用于安装节点的主机,配置docker及docker用户组、配置Ansible用户的sudo权限、安装FISCO BOCS节点依赖
1、关闭防火墙(宿主机、节点机都关闭)
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
2、安装依赖基础环境(宿主机、节点机都安装)
yum install -y openssl curl wget git nginx dos2unix
如果安装不成功,这个时候需要把系统的yum源更新一下
//首先对我们原来的源进行备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup//阿里云 CentOS 7 源(推荐)
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo//清理yum缓存,生成新的缓存
yum clean all
yum makecache//更新yum源检查是否生效
sudo yum update
3、安装python3.6或者以上版本(宿主机、节点机都安装)
sudo yum install -y epel-release sudo yum install -y python36
4、安装jdk(宿主机、节点机都安装)
首先卸载openjdk
rpm -qa | grep javarpm -e --nodeps javapackages-tools-3.4.1-11.el7.noarch java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64 tzdata-java-2024a-1.el7.noarch java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64 java-1.7.0-openjdk-headless-1.7.0.261-2.6.22.2.el7_8.x86_64 java-1.8.0-openjdk-headless-1.8.0.412.b08-1.el7_9.x86_64
上传jdk安装包,并解压
配置jdk环境变量
//编辑环境变量文件
vim /etc/profile#java
export JAVA_HOME=/opt/software/jdk1.8.0_141
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin//使环境变量生效
source /etc/profile
5、安装docker服务,docker-compose服务(宿主机、节点机都安装)
docker的离线安装参考:
docker-compose安装参考:
6、部署一个mysql数据库,这个不要求宿主机还是节点机,这样保证能访问到就可以了,我这里就直接部署在宿主机
通过docker-compose部署一个mysql
这个时候先更新一下docker的镜像源
sudo mkdir -p /etc/docker //创建目录vim /etc/docker/daemon.json //修改配置文件
{
"registry-mirrors": ["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc"]
}
重载守护进程文件,重启 docker
sudo systemctl daemon-reload
sudo systemctl restart docker
docker-compse.yml文件
[root@webaseMaster mysql]# cat docker-compose.yml
version: '3.5'services:mysql:restart: alwaysimage: mysql:5.7.36container_name: mysql_5.7.36environment:MYSQL_ROOT_PASSWORD: "123456WEDCF"volumes:- ./conf/my.cnf:/etc/my.cnf- ./conf/mysql:/etc/mysql- ./data/:/var/lib/mysqlports:- 3306:3306
配置文件my.cnf
[root@webaseMaster conf]# cat my.cnf
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
innodb_force_recovery=0
max_connections = 2000
sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
skip-name-resolve
#skip-grant-tables
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
手动创建conf、data目录
启动docker-compose
docker-compose up -d
二、配置Ansible
Ansible配置包括以下三步:
- 宿主机安装Ansible配置Ansible host列表
- 仅在宿主机安装节点时,则仅需安装Ansible,无需完成下面两步host与免密配置
- 配置Ansible免密登录到节点主机
yum install epel-release -y
yum install ansible –y
安装完后,通过
ansible --version
验证安装是否成功
配置Ansible host_key_checking
vim /etc/ansible/ansible.cfg# 找到host_key_checking选项
···
host_key_checking = False
三、免密登录配置
执行命令 ssh-keygen -t rsa -m PEM
,然后直接两次回车即可生成(提示输入密码时,直接回车)
ssh-keygen -t rsa -m PEM
公钥文件上传到需要免密登录的主机(替换 [IP] 为节点主机的 IP 地址),然后输入远程主机的登录密码
ssh-copy-id -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa.pub root@[IP]
输出结果出现 Number of key(s) added: 1
结果,表示免密登录配置成功
检查从部署 WeBASE-Node-Manager 服务的主机是否能成功免密登录部署节点的主机(替换 [IP] 为主机的 IP 地址)
ssh -o StrictHostKeyChecking=no root@[IP]
四、配置Ansible Hosts与免密登录
在/etc/ansible/hosts
文件中添加IP组webase
,并配置节点主机的IP、免密登录账号和私钥路径、SSH端口
添加以下内容:此处为我的ip地址,大家根据自己的情况修改成自己的ip地址,免密登录账户为root,且id_rsa
免密私钥的路径为/root/.ssh/id_rsa
,ssh端口使用22端口,添加名为webase
的IP组
vim /etc/ansible/hosts[webase]
192.168.38.120 ansible_ssh_private_key_file=/root/.ssh/id_rsa ansible_ssh_user=root ansible_ssh_port=22
192.168.38.121 ansible_ssh_private_key_file=/root/.ssh/id_rsa ansible_ssh_user=root ansible_ssh_port=22
测试Ansible
ansible webase --list-hosts
对ansible中的webase ip组进行ping检测
ansible webase -m ping
五、拉取 Docker 镜像
若需要手动配置镜像,可以通过以下方法配置
可视化部署需要使用FISCO BCOS + WeBASE-Front
组成的节点与前置Docker镜像(推荐通过CDN加速服务拉取):
# 从 CDN 拉取镜像 tar 文件
# 非国密
wget https://github.com/WeBankBlockchain/WeBASELargeFiles/releases/download/v1.5.5/docker-fisco-webase.tar# 解压镜像 tar 文件
docker load -i docker-fisco-webase.tar
我这里两台机器都加载了镜像,根据需要部署FISCO BCOS + WeBASE-Front的服务,把镜像都加载好六、部署依赖
可视化部署需要依赖 WeBASE 的中间件服务,包括管理平台(WeBASE-Web)、节点管理子系统(WeBASE-Node-Manager)、签名服务(WeBASE-Sign)。
拉取部署脚本
wget https://github.com/WeBankFinTech/WeBASELargeFiles/releases/download/v1.5.5/webase-deploy.zip
解压安装包
unzip webase-deploy.zip
进入目录
cd webase-deploy
- 配置可视化部署配置文件时,选择
visual-deploy.properties
进行配置 - 选择部署方式时,选择 可视化部署 方式,即执行
deploy.py
脚本时,执行python3 deploy.py installWeBASE
配置文件说明
# WeBASE子系统的最新版本(v1.1.0或以上版本)
webase.web.version=v1.5.5
webase.mgr.version=v1.5.5
webase.sign.version=v1.5.5
fisco.webase.docker.cdn.version=v1.5.5# 节点管理子系统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# WeBASE管理平台服务端口
web.port=5000
# 启用移动端管理平台 (0: disable, 1: enable)
web.h5.enable=1# 节点管理子系统服务端口
mgr.port=5001# 签名服务子系统端口
sign.port=5004# WeBASE-Sign 对外提供服务的访问 IP 地址
# 部署在其它主机的节点前置,需要使用此 IP 访问 WeBASE-Sign 服务
# 不能是 127.0.0.1 或者 localhost
sign.ip=# 是否使用国密(0: standard, 1: guomi)
# 此配置决定可视化部署搭建国密或非国密的链
encrypt.type=0
我自己的配置文件:
[common]# Webase Subsystem Version (v1.1.0 or above)
webase.web.version=v1.5.5
webase.mgr.version=v1.5.5
webase.sign.version=v1.5.5
fisco.webase.docker.cdn.version=v1.5.5# Mysql database configuration of WeBASE-Node-Manager
mysql.ip=192.168.38.120
mysql.port=3306
mysql.user=root
mysql.password=123456WEDCF
mysql.database=webasenodemanager# Mysql database configuration of WeBASE-Sign
sign.mysql.ip=192.168.38.120
sign.mysql.port=3306
sign.mysql.user=root
sign.mysql.password=123456WEDCF
sign.mysql.database=webasesign# WeBASE-Web service port
web.port=5000
# enable WeBASE-Web overview pages for mobile phone
# (0: disable, 1: enable)
web.h5.enable=1# WeBASE-Node-Manager service port
mgr.port=5001# WeBASE-Sign service ip
# 在[可视化部署中],不能使用127.0.0.1或localhost
sign.ip=192.168.38.120
# WeBASE-Sign service port
sign.port=5004# Encrypt type (0: standard, 1: guomi)
encrypt.type=0# Load node+front image from cdn, required docker installed and active
# if [yes], auto pull image of [cdn.version] from cdn and load in docker
if.load.image=yes
执行脚本,报错,缺少一个包,缺什么环境,我们安装上就可以了
个人建议先把镜像tar包放在webase-deploy目录下,不然会重新下载,特别慢
执行的时候会识别到,然后输入n
我这里很多包我是提前下载好的,所为我这里遇到下载的地方,我都输入n,不提前下载好,网络太差了
服务部署后,需要对各服务进行启停操作,可以使用以下命令:
# 可视化部署
部署并启动可视化部署的所有服务 python3 deploy.py installWeBASE
停止可视化部署的所有服务 python3 deploy.py stopWeBASE
启动可视化部署的所有服务 python3 deploy.py startWeBASE
# 各子服务启停
启动WeBASE-Node-Manager: python3 deploy.py startManager
停止WeBASE-Node-Manager: python3 deploy.py stopManager
启动WeBASE-Web: python3 deploy.py startWeb
停止WeBASE-Web: python3 deploy.py stopWeb
启动WeBASE-Sign: python3 deploy.py startSign
停止WeBASE-Sign: python3 deploy.py stopSign
在部署完依赖服务后,使用浏览器,访问节点管理平台页面:
# 默认端口 5000
http://{deployIP}:{webPort}
admin
Abcd1234,首次登录后,需要修改密码
七、部署节点
FISCO BCOS + WeBASE-Front
添加主机时,需要填入主机的IP与部署节点的目录
- 仅在宿主机(即节点管理服务所在主机)部署节点时,则添加主机必须为127.0.0.1,否则填写公网IP或内网IP需要配置Ansible host
- 添加主机时,将检查该IP是否可以连通,同时将检查该主机的路径是否可访问,并自动创建该目录
2、添加节点信息
我这里添加失败,可以看看下面的日志,查看失败的原因
我这里的内存太低了,那我们就清理一下服务器的内存
echo 3 > /proc/sys/vm/drop_caches
再点一下检测
同样的方法,把另外一台机器也添加进来
检查主要干的事情如下:
- 检查主机的可用内存是否支持当前的节点数
- 检测机器的端口是否已被占用
- 检测Docker服务是否已启用,并通过hello-world的镜像进行测试
检测失败的信息将在操作日志中显示,只有添加的节点信息全部通过才可以开始下一步“初始化”
- 如果提示内存不足(Free memory too low),则可以释放主机内存,一节点至少 1G 可用内存(Free memory)
- 如果提示端口被占用,可根据提示的端口号,在主机释放端口或删除填入的节点信息,修改后重新填入
- 如果提示Docker相关错误,需要到主机确认已安装Docker并已启用,是否已配置Docker组,确保能拉取并运行hello-world镜像
- 部分虚拟机缺少bc依赖(bc command not found),需要手动安装bc
3、初始化主机
点击“初始化”按钮进行主机初始化,将自动完成以下操作,初始化成功后才能进行下一步的部署操作,“初始化”按钮将变成“部署”按钮
- 自动检测并安装相关系统依赖,如
netstat
,wget
等 - 加载节点镜像:根据选中的镜像加载方式进行加载(若手动加载则检测镜像已存在于节点主机)
- 自动加载镜像时,会在节点主机指定目录中创建
download
目录,并下载镜像的tar包保存于此;若已存在同名tar包将不重复下载,直接使用已有tar包(docker-fisco-webase.tar)
4、部署
添加的主机状态都为“初始化成功”后,点击“部署”按钮后,将自动完成以下操作
- 根据填入的节点信息自动生成链配置与证书
- 通过SCP将节点与前置的配置文件、证书传输到各个主机的指定目录下
等几分钟这样,部署完成