Fisco Bcos3.0物理机框架搭建

前言

最近有一个供应链金融的需求,需要做一个区块链网络,经过前期技术调研,最终选择了Fisco Bcos3.0。本章主要讲解区块链的网络搭建。如果有时间,后期应该会发文章讲解fisco的结构和各种概念,以及console的使用。本文章阅读成本较高,需要熟悉对Fisco和区块链的概念有基本的了解,后期我可能会补足相关的文档便于大家对区块链的理解。见谅!见谅!

假设

假如我们的局域网环境中,有两台物理机:10.10.141.57、10.10.145.76

我们需要在10.10.141.57做的事:搭建创世节点、RPC服务、gateway服务、monitor监控服务、tars服务、安装通过Fisco javaSDK编写的console控制台

我们需要在10.10.145.76做的事:搭建扩容节点服务、tars-node服务、console控制台

环境搭建

1.CentOS环境

fisco-bcos-doc.readthedocs.io/zh-cn/lates...

1.1.基础环境安装

复制代码
sudo yum install -y curlpython3 python3-devel wget

1.2.docker安装

bash 复制代码
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce
systemctl start docker
# 开机自动启动docker
systemctl enable docker

1.3安装docker-compose

bash 复制代码
sudo curl -L " https://github.com/docker/compose/releases/download/1.24.0/ docker-compose -  $(  uname -s  )  -  $(  uname -m  )  " -o /usr/local/bin/ docker-compose  sudo chmod +x /usr/local/bin/docker-compose

如果无法使用curl下载,使用pip3安装

ruby 复制代码
# 设置阿里云代理 
pip3 install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/
sudo pip3 install docker-compose 

2.下载区块链构建工具BcosBuilder及相关资源

部署工具BcosBuilder目标是让用户最快的部署和使用FISCO BCOS Pro/max版本区块链,其功能包括:部署/启动/关闭/更新/扩容RPC服务、Gateway服务以及区块链节点服务。

2.1.下载BcosBuilder

bash 复制代码
 # 创建操作目录
mkdir -p ~/fisco && cd ~/fisco
Note : 若网速太慢,可尝试如下命令下载部署脚本 :
curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/releases/v3.5.0/BcosBuilder.tgz 
tar -xvf BcosBuilder.tgz

# 安装构建工具依赖包
cd BcosBuilder && pip3 install -r requirements.txt

2.2.下载node、 RPC gateway 、mtail四个服务资源(二进制资源)

该操作会在对应的pro目录下产生binary文件夹,该文件夹内的内容是关于网关和RPC对应的二进制文件,可部署到tarsnode

bash 复制代码
 # 进入操作目录
cd ~/fisco/BcosBuilder/pro
运行build_chain.py脚本下载二进制,二进制包默认下载到binary目录
python3 build_chain.py download_binary -t cdn

3. 区块链文件配置

3.1 开启权限治理

先将pro/config/config-deploy-example.toml的文件copy到pro下,

bash 复制代码
cd ~/fisco/BcosBuilder/pro
cp conf/config-deploy-example.toml config.toml

将配置文件的auth_check设置为true,运行一下命令(国密版本)

bash 复制代码
# 下载文件脚本文件get_gm_account.sh
curl -#LO https : //osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/tools/get_gm_account.sh
# 给文件所有者添加可执行权限
chmod u+x get_gm_account.sh
# 执行文件获取Account Address
bash get_gm_account.sh

Account Address值在配置文件中设置到[[group]].init_auth_address

3.2.安装和启动Tars

3.2.1修改tars-framework配置并启动服务

如果已经安装了tars生产版本就不用再处理了

bash 复制代码
cd /root/fisco/BcosBuilder/docker/host/linux/framework

打开配置文件docker-compose.yml,修改 配置文件位

yaml 复制代码
version: "3"
services:

  tars-mysql:
    image: mysql:5.6
    network_mode: "host"
    environment:
      MYSQL_ROOT_PASSWORD: "FISCO"
      MYSQL_TCP_PORT: 3310
    restart: always
    volumes:
      - ~/app/tars/framework-mysql:/var/lib/mysql
      - /etc/localtime:/etc/localtime

  tars-framework:
    image: tarscloud/framework:v3.0.1
    network_mode: "host"
    environment:
      MYSQL_HOST: "10.10.141.57"
      MYSQL_ROOT_PASSWORD: "FISCO"
      MYSQL_PORT: 3310
      TZ: "Asia/Shanghai"  # 设置容器内时区为亚洲/上海时区
      REBUILD: "false"
      INET: enp2s0
      SLAVE: "false"
    restart: always
    volumes:
      - ~/app/tars/framework:/data/tars
      - /etc/localtime:/etc/localtime
    depends_on:
      - tars-mysql
bash 复制代码
 # 创建并启动tars管理服务
docker-compose up -d
docker-compose start

注意:需要给tars-framework加上environment. TZ: "Asia/Shanghai"将时区改成上海

MYSQL_HOST地址需要改成实体机地址

MYSQL_ROOT_PASSWORD密码需保证一致 INET需要改成网卡名称

启动完成后,可访问10.10.141.57:3000进入管理台设置密码

3.3.配置token(/root/fisco/BcosBuilder/pro/config.toml)

进入{ip}:3000->用户中心->token管理中获取临时token写入[[tars]].tars_url和[[tars]].tars_token

4.修改配置文件

部署工具BcosBuilder ‒ FISCO BCOS 3.0 v3.3.0 文档

案例:

ini 复制代码
[tars]
tars_url = "http://10.10.141.57:3000/"
tars_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJhZG1pbiIsImlhdCI6MTcwMDU0OTA0MSwiZXhwIjoxNzAwNjM1NDQxfQ.7l3MMWTyciPDEhVlOAKqP6T2jvjkyZKer4lNOAybKZY"
tars_pkg_dir = "binary/"

[chain]
# 区块链服务所属的链的ID
chain_id="chain0"
#  RPC服务与SDK客户端之间采用的SSL连接类型,若设置为false,表明采用RSA加密连接;若设置为true,表明采用国密SSL连接,默认为false;
rpc_sm_ssl=true
#  Gateway服务之间的SSL连接类型,设置为false表明采用RSA加密连接;设置为true表明采用国密SSL连接,默认为false;
gateway_sm_ssl=true
# RPC服务的CA证书路径,若该路径下有完整的CA证书、CA私钥,BcosBuilder部署工具基于该路径下的CA证书生成RPC服务SSL连接证书;否则BcosBuilder部署工具会生成CA证书,并基于生成的CA证书为RPC服务颁发SSL连接证书
#rpc_ca_cert_path=""
# Gateway服务的CA证书路径,若该路径下有完整的CA证书、CA私钥,BcosBuilder部署工具基于该路径下的CA证书生成Gateway服务SSL连接证书;否则BcosBuilder部署工具会生成CA证书,并基于生成的CA证书为Gateway服务颁发SSL连接证书
#gateway_ca_cert_path="

[[group]]
group_id="group0"
# 扩容节点的创世块配置路径。如果未配置,将生成新的生成配置
# genesis_config_path = ""
# 区块链节点运行的虚拟机类型,目前支持evm和wasm两种类型,且一个群组仅可运行一种类型的虚拟机,不可以部分节点运行EVM虚拟机、部分节点运行WASM虚拟机
vm_type="evm"
# 节点账本是否采用国密类型签名、验签、哈希、加密算法
sm_crypto=true
# 是否开启权限治理模式,https://fisco-bcos-doc.readthedocs.io/zh-cn/latest/docs/develop/committee_usage.html
auth_check=true
# 开启权限治理时,指定的初始化治理委员账号地址 https://fisco-bcos-doc.readthedocs.io/zh-cn/latest/docs/develop/committee_usage.html
init_auth_address="0x4268b117b53ef5cba6469c7a1fbe3dedc098ad07"

# Genesis配置
# 每个leader可以连续打包的区块数目,默认为5 意思:某个时刻,领导节点可提交5次打包数据到广播,次数用尽,重新选举
leader_period = 5
# 每个区块中可包含的最大交易数目,默认为1000。
block_tx_count_limit = 1000
# 共识算法类型,目前仅支持pbft共识算法。
consensus_type = "pbft"
#  每笔交易运行时消耗的gas上限,默认为300000000。
gas_limit = "3000000000"
# 数据兼容版本号,默认为3.0.0,可通过控制台setSystemConfigByKey命令运行时升级数据兼容版本 *若不需要使用权限,且链版本小于3.3,那么可以跳过本节。
# 这里不要使用3.3以下的版本 控制台的启动会出现错误
compatibility_version="3.5.0"

[[agency]]
name = "agencyA"
# 是否开启落盘加密,默认为false
enable_storage_security = false
# 若开启了落盘加密,这里可配置key-manager的url和密钥
# key_center_url =
# cipher_data_key =

    [agency.rpc]
    # RPC服务的部署IP,若配置多个,则会在多台机器上部署RPC服务,达到平行扩展的目标。
    deploy_ip=["10.10.141.57"]
    # RPC服务的监听IP,默认为0.0.0.0
    listen_ip="0.0.0.0"
    #  RPC服务的监听端口,默认为20200
    listen_port=20200
    # RPC服务进程内的工作线程数目,默认为4
    thread_count=4

    [agency.gateway]
    # Gateway服务的部署IP,若配置多个,则会在多台机器上部署Gateway服务,达到平行扩展的目标
    deploy_ip=["10.10.141.57"]
    # Gateway服务的监听IP,默认为0.0.0.0
    listen_ip="0.0.0.0"
    # Gateway服务的监听端口,默认为20200
    listen_port=30300
    # 所有Gateway服务的连接信息
    peers=["10.10.141.57:30300"]
    
    # 区块链节点服务配置项:部署配置
    [[agency.group]]
           # 区块链节点所属的群组ID,默认为group。
        group_id = "group0"
        
        # 区块链节点服务部署配置项
        [[agency.group.node]]
        # 节点服务名,在服务部署的场景下可不配置,若配置了该选项,须确保不同节点服务的服务名不重复。
       node_name = "nodeCompanyA"
        # 节点服务部署ip
        deploy_ip = "10.10.141.57"
        # 是否开启落盘加密,默认为false
        enable_storage_security = false
        # 若开启了落盘加密,这里可配置key-manager的url https://github.com/FISCO-BCOS/key-manager
        # key_center_url =
        # 若开启了落盘加密,这里配置数据加密密钥
        # cipher_data_key =
        # 监控服务的监听端口,默认为3902
        monitor_listen_port = "3902"
        # 需要监控的区块链节点日志所在路径 example:"/home/fisco/tars/framework/app_log/"
        monitor_log_path = ""
        enable_hsm=false
        # hsm_lib_path=
        # hsm_key_index=
        # hsm_password=
        # hsm_public_key_file_path=

5.启动区块链的节点、RPC、网关服务

5.1.RPC

bash 复制代码
 #进入操作目录
cd ~/fisco/BcosBuilder/pro
#启动RPC服务
python3 build_chain.py chain -o deploy -t rpc

部署过程中生成的RPC服务相关的配置位于generated/rpc/${chainID}目录

5.2.网关

bash 复制代码
 # 部署并启动Gateway服务  python3 build_chain.py chain -o deploy -t gateway

5.3.node节点服务

bash 复制代码
 # 部署并启动区块链节点服务
python3 build_chain.py chain -o deploy -t node

5.4.tars管理台效果

5.5.目录树

bash 复制代码
generated/
├── chain0 # 链
│   ├── group0 # 群组
│   │   ├── 172.25.0.3 # 本机的eth0 ip地址
│   │   │   ├── agencyAgroup0node0BcosNodeService # 区块链节点配置目录
│   │   │   │   ├── config.genesis # 创世块配置文件
│   │   │   │   ├── config.ini # 配置文件
│   │   │   │   ├── node.nodeid # 节点id
│   │   │   │   ├── node.pem # 节点私钥,用于共识模块签名
├── gateway # 网关
│   ├── chain # 链
│   │   ├── 172.25.0.3 # 本机的eth0 ip地址
│   │   │   ├── agencyABcosGatewayService # 网关配置目录
│   │   │   │   ├── ssl
│   │   │   │   │   ├── ca.crt # CA证书
│   │   │   │   │   ├── cert.cnf # 证书配置
│   │   │   │   │   ├── ssl.crt # ssl 证书
│   │   │   │   │   ├── ssl.key # ssl 私钥
│   │   │   │   ├── config.ini # 配置文件
│   │   │   │   ├── nodes.json # 节点连接信息,{"nodes": ["172.25.0.30:30300", "172.25.0.3:30301"]}
│   │   ├── ca # CA 证书
│   │   │   ├── ca.crt # CA 证书
│   │   │   ├── ca.key # CA 私钥
│   │   │   ├── cert.cnf # 证书私钥
├── rpc
│   ├── chain
│   │   ├── 172.25.0.30 # 本机的eth0 ip地址
│   │   │   ├── agencyABcosRpcService # RPC服务配置路径
│   │   │   │   ├── ssl       
│   │   │   │   │   ├── ca.crt # CA证书
│   │   │   │   │   ├── cert.cnf # 证书配置
│   │   │   │   │   ├── ssl.crt # ssl 证书
│   │   │   │   │   ├── ssl.key # ssl 私钥
│   │   │   │   ├── sdk        # SDK证书目录
│   │   │   │   │   ├── ca.crt # CA证书
│   │   │   │   │   ├── cert.cnf # 证书配置
│   │   │   │   │   ├── sdk.crt # sdk 证书
│   │   │   │   │   ├── sdk.key # sdk 私钥
│   │   │   │   ├── config.ini.tmp # 配置文件
│   │   │   ├── agencyBBcosRpcService # RpcService B
│   │   │   │.....
│   │   ├── ca # CA 证书
│   │   │   ├── ca.crt # CA 证书
│   │   │   ├── ca.key # CA 私钥
│   │   │   ├── cert.cnf # 证书私钥
├── agencyABcosGatewayService.tgz # 生成的网关服务A的tgz包
├── agencyABcosRpcService.tgz # 生成的RPC服务A的tgz包
├── agencyBBcosGatewayService.tgz # 生成的网关服务B的tgz包
├── agencyBBcosRpcService.tgz # 生成的RPC服务B的tgz包
├── node.nodeid # 节点id
├── node.pem # 节点pem格式私钥

6.安装节点监控服务

6.1安装monitor监控服务

该服务部署后在docker上(需要上述三个节点部署完成后,在进行部署)

bash 复制代码
 # 部署并启动区块链节点服务
python3 build_chain.py chain -o deploy -t monitor

安装完成后,/root/app/tars/framework/app_log是日志文件。并且会产生两个平台Grafana和Prometheus。Grafana是一款流行的开源数据可视化和监控平台;Prometheus是一种开源的监控和警报工具

Grafana与Prometheus等数据源集成,允许用户创建动态且具有各种图表、图形和仪表盘的监控界面。

Grafana:{ip}:3001

Prometheus:{ip}:9090

注释: "安装可能会报错没有ansible: 未找到命令:代表需要安装ansible:如果无法使用sudo yum install ansible,解决方案:

  1. 启用 EPEL 仓库:

    1. EPEL(Extra Packages for Enterprise Linux)是一个由 Fedora 社区维护的仓库,提供额外的软件包,包括 Ansible。
    2. 使用以下命令来安装 EPEL 仓库:
    arduino 复制代码
    sudo dnf install epel-release
  2. 安装 Ansible:

    1. 安装好 EPEL 仓库后,使用以下命令安装 Ansible:
    复制代码
       sudo dnf install ansible
  3. 验证安装:

    1. 安装完成后,你可以通过运行 ansible --version 来验证 Ansible 是否已成功安装。

6.2.配置监控

  1. 进入Grafanahttp://10.10.141.57:3001/profile将语言设置中文。
  2. 导入仪表盘(github源码
  1. 添加数据源Prometheus

选择Prometheus->设置Prometheus的地址和认证方式

7. 下载、配置并使用控制台

7.1.下载控制台

bash 复制代码
cd ~/fisco && curl - #LO https://gitee.com/FISCO-BCOS/console/raw/master/tools/download_console.sh 
bash download_console.sh
# 拷贝配置文件 修改证书内容:如果是国密需要将参数useSMCrypto = "true"
cp -n console/conf/config-example.toml console/conf/config.toml
# 复制rpc证书到控制台console/conf文件夹下,sm_是国密证书文件 agencyABcosRpcService和agencyBBcosRpcService下的证书是一样的
cp -r pro/generated/rpc/chain/agencyBBcosRpcService/10.10.141.57/sdk/* console/conf

注释:如果报错没有group0 就进入配置文件修改group_id:group。获取启动的时候指定ID bash start.sh group

7.2.配置控制台

ini 复制代码
[cryptoMaterial]

certPath = "conf"                           # The certification path
disableSsl = "false"                        # Communication with nodes without SSL
useSMCrypto = "true"                       # RPC SM crypto type

# The following configurations take the certPath by default if commented
# caCert = "conf/ca.crt"                    # CA cert file path
# sslCert = "conf/sdk.crt"                  # SSL cert file path
# sslKey = "conf/sdk.key"                   # SSL key file path

# The following configurations take the sm certPath by default if commented
# caCert = "conf/sm_ca.crt"                    # SM CA cert file path
# sslCert = "conf/sm_sdk.crt"                  # SM SSL cert file path
# sslKey = "conf/sm_sdk.key"                    # SM SSL key file path
# enSslCert = "conf/sm_ensdk.crt"               # SM encryption cert file path
# enSslKey = "conf/sm_ensdk.key"                # SM ssl cert file path

[network]
messageTimeout = "10000"
defaultGroup="group0"                            # Console default group to connect
peers=["10.10.141.57:20200"]    # The peer list to connect

[account]
keyStoreDir = "account"         # The directory to load/store the account file, default is "account"
# accountFilePath = ""          # The account file path (default load from the path specified by the keyStoreDir)
accountFileFormat = "pem"       # The storage format of account file (Default is "pem", "p12" as an option)

# accountAddress = ""           # The transactions sending account address
                                # Default is a randomly generated account
                                # The randomly generated account is stored in the path specified by the keyStoreDir

# password = ""                 # The password used to load the account file

[threadPool]
# threadPoolSize = "16"         # The size of the thread pool to process message callback
                                            # Default is the number of cpu cores

7.3.配置控制台账户

此时已经可以直接启动控制台,但是由于控制台没有账户,会自动创建账户进入,和我们之前配置的初始委员会地址init_auth_address不是同一个账户了。所以我们应该将先前创建的账户移动到控制台账户目录'accounts_gm/gm'

7.4.启动控制台

bash 复制代码
cd ~/fisco/console/
./start.sh 
./start.sh group0 accountId

番外篇:BocsBuilder命令介绍

  1. download_binary 下载网关、rpc、node、监控等二进制文件

    python3 build_chain.py download_binary -t cdn

  2. create-subnet 创建虚拟网段(docker虚拟网段 docker network ls

lua 复制代码
python3 build_chain.py create-subnet -n tars-network -s 172.25.0.0/16
  1. chain链操作

    复制代码
       python3 build_chain.py chain -o deploy -t rpc
    1. -t, --type 选项:

      1. rpc: 指定操作的服务类型为RPC服务。
      2. gateway: 指定操作的服务类型为Gateway服务。
      3. node: 指定操作的服务类型为区块链节点服务。
    2. -o, --op 选项

      1. gen-config: 产生配置文件。
      2. upload: 在已经存在服务配置的场景下,上传并发布服务,一般和gen-config配合使用,先通过gen-config产生配置文件,然后通过upload指令上传并发布服务配置。
      3. deploy: 部署服务,包括服务配置生成、服务发布两个步骤。
      4. undeploy: 下线服务。
      5. upgrade: 升级服务,用于升级服务的二进制。
      6. expand: 扩容服务。
      7. start: 启动服务。
      8. stop: 停止服务。
相关推荐
全干engineer8 小时前
Web3-代币ERC20/ERC721以及合约安全溢出和下溢的研究
安全·web3·区块链·智能合约·solidity
全干engineer2 天前
Web3-Web3.js核心操作:Metamask、合约调用、事件订阅全指南
开发语言·javascript·web3·区块链·智能合约
Magnum Lehar2 天前
区块链web3的SimpleStorage.sol编写和实现
web3·区块链
新讯网2 天前
PRUD币将于6月16日正式上线欧易Web3交易所,市场热度持续飙升
人工智能·web3·区块链
全干engineer3 天前
web3-区块链的技术安全/经济安全以及去杠杆螺旋(经济稳定)
安全·web3·去中心化·区块链·智能合约
寻月隐君3 天前
Solana 开发进阶:在 Devnet 上实现链上程序部署、调用与更新
后端·web3·区块链
AWS官方合作商3 天前
基于AWS无服务器架构的区块链API集成:零基础设施运维实践
架构·serverless·web3·区块链·aws
Blossom.1184 天前
基于区块链的去中心化身份验证系统:原理、实现与应用
运维·服务器·网络·人工智能·机器学习·去中心化·区块链
数据与人工智能律师4 天前
当机床开始“思考”,传统“制造”到“智造”升级路上的法律暗礁
大数据·网络·算法·云计算·区块链