码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • FISCO BCOS离线部署问题记录并解决


    FISCO BCOS离线部署问题记录并解决

    • 前言
    • 步骤一:底层链的部署安装
    • 步骤二:配置并使用控制台
    • 步骤三:部署及调用HelloWorld合约
    • 步骤四:webase 搭建
    • 步骤五:合约编译
    • 步骤六:分布式存储数据--链下mysql同步链上数据(世界状态库)
      • 踩坑1:mysql 版本选择
      • 踩坑2:group.1.ini配置文件修改
    • 步骤七:数据导出系统组件--链下mysql同步链上数据(历史状态库)
      • 踩坑1:脚本执行中需要下载安装gradle
      • 踩坑2:配置文件环境更改
      • 踩坑2:配置合约
    • 附功能提示
      • 1:端口检查
      • 2.docker启动 mysql 时区选择
      • 3.其他博文参考

    前言

    因项目需求团队要求,部署的服务器都不能访问外网,所以自己尝试了区块链底层网络节点、控制台、Webase 等离线部署,当然也遇到遇到坑,由此记录下来。

    步骤一:底层链的部署安装

    借鉴参考这个博文思路完成的底层链部署安装,即在一台有网络的服务器先在线安装好,然后将提前预设好的无网络服务器 ip 信息提前设置好,再移动节点信息到无网络的离线服务器上。
    没有什么坑,一路还算顺畅。
    FISCO BCOS离线无网络部署安装系列教程之底层链的部署安装(思路一)

    步骤二:配置并使用控制台

    这里参考FISCO BCOS官网步骤即可,受步骤1启发,提前下载好download_console.sh脚本文件,安装官方下载路径即可。

    配置并使用控制台

    步骤三:部署及调用HelloWorld合约

    这里依然参考官网步骤即可。
    部署及调用HelloWorld合约

    步骤四:webase 搭建

    参考官网,需要提前装好 jdk 环境(建议1.8)
    webase 搭建
    也可以参考这个更全面复杂版本,因我们项目不需要如此复杂的功能,即采用官网版本即可
    FISCO BCOS离线无网络部署安装系列教程之区块链浏览器fisco-bcos-browser v2.2.1的部署安装

    步骤五:合约编译

    当 webase 搭建好后,将项目所需合约文件(即.sol 文件)放到页面(http://x.x.x.x:5002/WeBASE-Front)合约管理页面功能-合约 IDE 中,将主合约编译、部署,即可在合约列表中看到。
    在这里插入图片描述
    合约列表中可看到编译部署后的合约,可通过调用合约测试合约方法是否生效
    在这里插入图片描述

    期间需要先创建一个测试用户才行,后续也会用到这个用户的.pem 文件
    在这里插入图片描述

    步骤六:分布式存储数据–链下mysql同步链上数据(世界状态库)

    因项目查询速率需求,我们做了链下 mysql 同步链上数据的扩展需求,分别拉取了世界状态库数据和历史状态库数据,这步为同步世界状态库数据。
    参考官网步骤分布式存储

    踩坑1:mysql 版本选择

    前提需先离线安装 mysql(建议5.7版本)一个小坑,我离线部署时使用 docker 的mysql8版本镜像试过,不能实现分布式存储数据同步,所以建议还是采用官网使用的5.7版本为好。

    踩坑2:group.1.ini配置文件修改

    根据官网步骤操作到修改group.1.ini配置文件时,除了官方所说的数据库名称、用户名、密码、ip、端口号需要修改的同事,还要注意一个小细节也要修改,就是在storage 下有一个 type 类型,默认的是 rocksdb,但是因为我们项目采用的是 mysql 所以这里也要同步改成 type=mysql 才行,这个真是隐藏的大坑呀,官网教程也是用的 mysql 却一点没有提及修改此处。
    在这里插入图片描述

    步骤七:数据导出系统组件–链下mysql同步链上数据(历史状态库)

    除了世界状态库,区块链更多需要溯源、检索等需求的时候就需要查询历史状态了,所以还需要同步历史状态库,同理也是参考官网部署方式数据导出系统组件
    基本也是安装官网,将所需的脚本先下载好,再移动到离线服务器上,再通过修改一些配置文件等操作达到目的。

    踩坑1:脚本执行中需要下载安装gradle

    但是这次的脚本不能直接在离线服务器上运行,因为脚本中涉及到下载gradle wrapper,但是在离线服务器中是没有办法连接外网的,所以此行不通,我也有尝试在服务器中自己安装,但是执行脚本的时候还是会有依赖包等问题,总之就是此行不通了。
    解决方式:也是借鉴步骤1的思路,在一个可联网的环境下先执行脚本运行完成,生成脚本运行后的 Data-Export*.jar 包,再移动到离线服务器中即可。

    踩坑2:配置文件环境更改

    在application.properties文件修改中的 ip应该修改为离线服务器的 ip,替换掉127.0.0.1,不然运行 jar 本会访问底层链不通

    踩坑2:配置合约

    遇到运行 jar 包后出现合约方法和事件数据没有导出的情况,最终还是根据官方提示,删除config/solidity/下已配置的未成功导出数据的合约,并将config/solidity/bin/(非国密目录/ecc/、国密目录为/sm/)下bin文件的内容替换为合约部署位置(如WeBase)编译得到的binary,然后清理数据库表重新启动即可
    在这里插入图片描述

    附功能提示

    1:端口检查

    因离线服务器,所有的端口都没有默认开启,所以上述操作中遇到用到的一些常用端口需要自己手动打开防火墙,比如(3306、20200、30300、8485、5002)等

    firewall-cmd --list-ports	#查看已经开放的端口
    firewall-cmd --zone=public --add-port=3306/tcp --permanent #开放端口3306
    firewall-cmd --reload		#重启firewall
    firewall-cmd --list-ports	#检查3306是否开放
    
    • 1
    • 2
    • 3
    • 4

    2.docker启动 mysql 时区选择

    因我后续更改为 docker 启动 mysql5.7版本,服务器的时区检查(date 命令)后显示是 CST,但是通过 docker启动的 mysql 版本默认时区是 UTC,所以就出现时区不一致,当时启动历史版本库的 jar 包的时候一直创建不了 data-export 库我以为是这个时区的问题,好折腾了一翻,也记录一下吧。
    在docker 创建容器时给设置时区如下命令:

    docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -e TZ=Asia/Shanghai -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0
    
    • 1

    修改Docker容器中的mysql时区的三种方式
    mysql 怎么修改时区

    3.其他博文参考

    CentOS7.5离线安装jdk1.8
    centos7下离线安装MySQL5.7

  • 相关阅读:
    探索APP流量变现的新途径
    智慧灯杆网关智慧交通应用
    怎么批量添加事件(事件委托)?
    ORA-38824无法手工修改存储过程的问题
    【数学模型】灰色关联分析
    Linux性能优化--使用性能工具发现问题
    C++中的解释器模式
    利用easy poi做文件导出
    牛客—— JZ36 二叉搜索树与双向链表
    Distantly Supervised Named Entity Recognition via Confidence-Based Multi-Class Positive and Unlabele
  • 原文地址:https://blog.csdn.net/ic_xcc/article/details/126599227
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号