【fisco-bcos底层链】WeBASE管理平台各组件分别打包成镜像部署到k8s上亲测完成
前言
因公司项目规划需要,需要将区块链项目所用到的环境用 docker打包成镜像部署运行到 k8s 环境上,其中最复杂的就是区块链底层环境和管理平台的各类子组件直接的配置依赖和打包关系最为复杂,以下为我亲测打包镜像并成功部署的经验总结。(这套管理工具主要由:节点前置,签名服务,节点管理,WeBASE管理平台四个WeBASE子系统构成。WeBASE四个服务的部署架构如下图:节点前置需要和区块链节点部署在同一台机器;节点管理和WeBASE管理平台可以同机部署,也可以分开部署。)以下为子服务之间的架构关系
第一步、docker 打包dockerfile书写
我前一篇博文详细描述了如何将项目需要利用 docker 进行打包,其中的 dockerfile文件的书写原则可以等同借鉴用到区块链底层打包中使用,主要可参考博文mac环境把go项目打包成docker镜像推送至阿里云镜像仓库
第二步、fisco-bcos 三节点的底层链
1. 更改数据库连接信息
更改数据库配置信息,文件位置位于 nodes下 node0的 conf 中的 group.1.ini 中关于数据库相关的配置即可
具体修改位置如下图位置,更改为自己的数据库信息即可
2.删除节点中运行预语句中最后的的&符号
# 原始为
nohup ${fisco_bcos} -c config.ini >>nohup.out 2>&1 &
# 更改后
nohup ${fisco_bcos} -c config.ini >>nohup.out 2>&1
3. 具体编译的dockerfile
# 基础镜像
FROM fiscoorg/fiscobcos:v2.8.0
WORKDIR /fiscobcos/nodes
COPY nodes /fiscobcos/nodes/
# 暴露端口
# 区块链节点的访问端口
EXPOSE 20200 20201 20202
# 启动所有区块链节点
ENTRYPOINT ["bash","/fiscobcos/nodes/start_all.sh"]
# 启动命令
# docker run -d -p 20200:20200 --name fiscobcos fiscobcos:v1.0
4. 编译dockerfile生成 fisco-bcos 镜像
docker build -f Dockerfile -t fisco-bcos:v1.0 .
5. 查看镜像、运行镜像等本地检查
- 注:端口设置预留为20200
docker run -d -p 20200:20200 -it --privileged=true fisco-bcos:v1.0
6. tag打包–推送至镜像仓库–从k8s 拉取镜像仓库中所需镜像运行
docker tag [ImageId] [镜像仓库地址ip]/[区分空间名]/[镜像名]:[镜像版本号]
docker push [镜像仓库地址ip]/[区分空间名]/[镜像名]:[镜像版本号]
7. k8s 中部署运行镜像
7.1创建保密字典
在拉取服务前先配置好镜像仓库地址,即创建保密字典,这样后续才能在服务创建的时候找到拉取镜像的仓库
7.2在 k8s工作台选择创建无状态服务
7.3从dcoker仓库中选择需要的镜像拉取
7.4并配置容器端口
7.5高级设置中选择访问模式为对外访问,下拉中选取nodeport模式
7.6创建完成并运行
创建成功后即可看到如下所示页面,服务状态为运行中,容器端口变成对外暴露的端口为nodeport 代替,如需要对外访问,即可利用 k8s 服务所在 ip:nodeport访问到该镜像服务
第三步、webase-sign 签名服务
1. 官方参考文档
webase-sign签名服务部署说明文档
端口预留:5004
2. 创建数据库
拉取完代码后除环境外配置完就需要创建一个签名服务的数据库可自定义名字(例如 webasesign)
3. 创建用户表 tb_user 用于存放后续需要的用户用于签名
- 注:步骤中未提示,需要自己创建
CREATE TABLE `tb_user` (
`user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户编号',
`sign_user_id` varchar(64) NOT NULL COMMENT '用户唯一的业务编号',
`app_id` varchar(64) NOT NULL COMMENT '用户对应的应用编号',
`address` varchar(64) NOT NULL COMMENT '用户地址',
`public_key` varchar(256) NOT NULL COMMENT '公钥',
`private_key` varchar(256) NOT NULL COMMENT '私钥',
`description` varchar(128) DEFAULT NULL COMMENT '描述',
`encrypt_type` int(11) NOT NULL COMMENT '加密类型,1:国密;0:ECDSA',
`gmt_create` datetime DEFAULT NULL COMMENT '创建时间',
`gmt_modify` datetime DEFAULT NULL COMMENT '修改时间',
`status` char(1) NOT NULL DEFAULT '1' COMMENT '状态: 1 有效 0 无效',
PRIMARY KEY (`user_id`),
UNIQUE KEY `unique_uuid` (`sign_user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=100002 DEFAULT CHARSET=utf8 COMMENT='用户信息表';
4. 修改配置
修改conf/application.yml中的数据库配置信息,修改信息如下图所示
- 注:配置中的constant:下的aesKey,在各互联的子系统的加密key需保持一致
5. dockerfile 文件
- 注意:因环境需要 jdk1.8,所以在webase-sign文件夹同层预留了一个 jdk 环境,需要拷贝到镜像中
# 基础镜像
FROM fiscoorg/fiscobcos:v2.8.0
WORKDIR /WeBASE-Sign/dist
ADD jdk-8u181-linux-x64.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_181
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
COPY WeBASE-Sign /WeBASE-Sign
# 暴露端口
EXPOSE 5004
# 入口,jar文件的启动命令 # 这里app.jar就是我的jar文件
ENTRYPOINT ["bash","/WeBASE-Sign/dist/start.sh"]
6. 编译dockerfile 打包成 webase-sign 镜像
docker build -f Dockerfile -t webase-sign:v1.0 .
7. 查看镜像、运行镜像等本地检查
docker run -d -p 5400:5400 -it --privileged=true webase-sign:v1.0
8. tag打包–推送至镜像仓库–从k8s 拉取镜像仓库中所需镜像运行
docker tag [ImageId] [镜像仓库地址ip]/[区分空间名]/[镜像名]:[镜像版本号]
docker push [镜像仓库地址ip]/[区分空间名]/[镜像名]:[镜像版本号]
同上述相同方式在 k8s 上运行镜像服务
第四步、webase-front 区块链节点前置服务
1. 官方参考文档
webase-front 区块链节点前置服务部署说明
注:端口预留5002
2. 拉取代码后修改配置
打开 dist/conf/application.yml文件,修改位置如下图所示
- 1、需要修改 sdk 下的 ip和channelPort,这为第一步 fisco-bcos 链部署到 k8s 后对应的 ip 和对外的端口(即nodeport)
- 2、需要修改constant下的keyServer以及确保aesKey与 webase-sign 中的一致
3. dockerfile文件
同理运用到了jdk1.8的环境
# 基础镜像
FROM fiscoorg/fiscobcos:v2.8.0
WORKDIR /WeBASE-Front/dist
ADD jdk-8u181-linux-x64.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_181
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
COPY dist /WeBASE-Front/dist
# 暴露端口
EXPOSE 5002
# 入口,jar文件的启动命令 # 这里app.jar就是我的jar文件
ENTRYPOINT ["bash","/WeBASE-Front/dist/start.sh"]
4. 编译dockerfile 打包成 webase-front 镜像
docker build -f Dockerfile -t webase-front:v1.0 .
其他打包推送镜像至镜像仓库,以及部署至 k8s 上的步骤类似上文,部署完成后可通过 k8s 对应的 ip 和端口查看到前置服务关于链和节点信息等
第五步、webase-node-manager 区块链节点管理服务
1. 官方部署文档
webase-node-manager 区块链节点管理服务部署说明
- 注:预留端口5001
2. 新建数据库
拉取完代码后除环境外配置完就需要创建一个节点管理服务的数据库可自定义名字(例如 node_manager),该处无需创建表,会同步拉取链上的数据
#登录MySQL:
mysql -u ${your_db_account} -p${your_db_password} 例如:mysql -u root -p123456
#新建数据库:
CREATE DATABASE IF NOT EXISTS {your_db_name} DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
3. 修改脚本配置文件
进入数据库脚本目录/dist/script,修改数据库连接信息,更改webase.sh文件中关于数据库 ip、用户名、密码、数据库名等信息并重新执行脚本文件
4. 修改服务配置
修改路径/dist/conf/application.yml 中的application.yml
- 修改数据库连接信息
- 修改 webase-sign 的 k8s 配置后信息
- 注:一定是部署到 k8s 后的 ip 以及对外映射的端口(nodeport)
5. dockerfile 文件
同理运用到了jdk1.8的环境
# 基础镜像
FROM fiscoorg/fiscobcos:v2.8.0
WORKDIR /WeBASE-Node-Manager/dist
ADD jdk-8u181-linux-x64.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_181
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
COPY WeBASE-Node-Manager/dist /WeBASE-Node-Manager/dist/
# 暴露端口
EXPOSE 5001
# 入口,jar文件的启动命令 # 这里app.jar就是我的jar文件
ENTRYPOINT ["bash","/WeBASE-Node-Manager/dist/start.sh"]
6. 编译dockerfile 打包成 webase-node-manager 镜像
docker build -f Dockerfile -t webase-node-manager:v1.0 .
其他打包推送镜像至镜像仓库,以及部署至 k8s 上的步骤类似上文
第六步、webase-web 管理平台
1. 官方部署文档
webase-web 管理平台部署文档
注:预留端口5000
2. 下载solc-bin
拉取完代码后进去WeBASE-Web目录,执行脚本get_solc_js.sh,会自动下载solc-bin,即下面v0.4.25.js等文件
bash ./get_solc_js.sh
执行完后检查dist/static/js是否下载完这些js文件
3. 修改配置
在docs目录下有配置文件nginx.conf,修改相关信息
注意点:错误日志文件存放拉取下来的代码没有对应文件,需要自行创建一个,例如我创建在/data/WeBASE-Web/dist/log/下的三个文件
然后在nginx.conf中写上对应在镜像里的存放位置
修改对应的 server 信息,主要修改upstream node_mgr_serve,对应 k8s 中节点管理服务运行的 ip 和对外端口,前端展示的 dist 路径在镜像的位置,端口预留5000
4. dockerfile 文件
# 基础镜像
FROM nginx:latest
WORKDIR /data/WeBASE-Web
COPY WeBASE-Web /data/WeBASE-Web/
# 注意本机目录不能使用绝对路径,只能从当前目录开始
COPY WeBASE-Web/docs/nginx.conf /etc/nginx/nginx.conf
# 暴露端口
# 区块链节点的访问端口
EXPOSE 5000
# 启动
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
5. 编译dockerfile 打包成 webase-web镜像
docker build -f Dockerfile -t webase-web:v1.0 .
其他打包推送镜像至镜像仓库,以及部署至 k8s 上的步骤类似上文
第七步、前端页面操作用户私钥和合约等步骤
1. 登录wabase-web页面
通过部署完成 wabase-web 到 k8s 上之后,通过 ip 和对外端口可看到这样一个登录页面,初次登录的账户密码是admin/Abcd1234,登录后会要求修改,入验证码有问题那就是你的节点管理服务没有配置好,可以检查一下是否启动或者webase-web的节点服务配置问题
2.关联前置节点服务
登录进入会会要求你关联节点前置服务的 ip 和端口。即更改成你在 k8s 上部署成功的 ip 和对外端口,成功绑定后会出现如下所示的链信息和节点信息等,表示绑定前置服务成功
3.私钥管理创建用户
3.1私钥管理新增用户
3.2导出对应账户私钥,类型为 p12
3.3导出pem 格式私钥
在前面提过的前置服务中导入刚刚从 web 导出的用户私钥,再点击导出格式为 pem 类型,用于后续放在上链服务中获取上链用户私钥
4.编译测试合约
新建合约-保存-编译-部署。之后在合约列表即可查看到对应的合约地址等信息用于后续上链修改配置信息。
导出合约获得编译后的合约 bin 文件和 abi文件,后续扩展服务会用到
第八步、data-export 数据导出系统服务
1. 官方部署文档
data-export 数据导出系统服务部署说明
该服务是为了同步链上数据的所有历史操作,便于快速溯源数据操作历史动作等,增加检索效率,根据自身业务选择是否配置
2. 创建数据库存放历史数据
创建一个历史数据库,用于同步拉取链上行为的历史数据
3. 修改配置
找到路径tools/config/solidity/下包括了abi和bin两个文件夹,用于配置合约信息,将上述中导出的只能合约中的主合约入口的 abi和 bin 文件放于该路径下
修改tools/config/application.properties文件中关于fisco-bcos节点在 k8s运行的IP和端口 以及同步历史库的数据库信息
4. dockerfile 文件
# 基础镜像
FROM fiscoorg/fiscobcos:v2.8.0
ADD jdk-8u181-linux-x64.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_181
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
COPY Data-Export /Data-Export/
WORKDIR /Data-Export/tools
# 入口,jar文件的启动命令 # 这里app.jar就是我的jar文件
ENTRYPOINT ["bash","/Data-Export/tools/start.sh"]
5. 编译dockerfile 打包成 data-export镜像
docker build -f Dockerfile -t data-export:v1.0 .
- 注:该服务不需要对外访问,所以创建k8s对外访问的时候可以不用向上述服务一样选择对外访问
其他打包推送镜像至镜像仓库,以及部署至 k8s 上的步骤类似上文
最后在 k8s 上部署的服务总和如下图所示
- 注意:最好按照我上述服务部署顺序进行,以为他们服务直接有依赖关系,特别是配置文件中可能互有依赖,如何顺序打乱可能就会有一些七七八八的问题,90%都可能是配置出错之类的,总之按需调整!