Fisco Bcos3.0物理机框架搭建区块链网络

Fisco Bcos3.0物理机框架搭建区块链网络

兰涛 lands

前言

最近有一个供应链金融的需求,需要做一个区块链网络,经过前期技术调研,最终选择了 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 环境

https://fisco-bcos-doc.readthedocs.io/zh-cn/latest/docs/tutorial/pro/installation.html

1.1.基础环境安装

1
sudo yum install -y curlpython3 python3-devel wget

1.2.docker 安装

1
2
3
4
5
6
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

docker-compose
1
2
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 安装

docker-compose
1
2
3
# 设置阿里云代理
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

1
2
3
4
5
6
7
8
 # 创建操作目录
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

1
2
3
4
 # 进入操作目录
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 下,

1
2
cd ~/fisco/BcosBuilder/pro
cp conf/config-deploy-example.toml config.toml

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

1
2
3
4
5
6
# 下载文件脚本文件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

image.png

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

3.2.安装和启动 Tars

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

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

1
cd /root/fisco/BcosBuilder/docker/host/linux/framework

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
1
2
3
 # 创建并启动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 文档

案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
[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

1
2
3
4
 #进入操作目录
cd ~/fisco/BcosBuilder/pro
#启动RPC服务
python3 build_chain.py chain -o deploy -t rpc

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

5.2.网关

1
2
# 部署并启动Gateway服务
python3 build_chain.py chain -o deploy -t gateway

5.3.node 节点服务

1
2
 # 部署并启动区块链节点服务
python3 build_chain.py chain -o deploy -t node

5.4.tars 管理台效果

image.png

5.5.目录树

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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 上(需要上述三个节点部署完成后,在进行部署)

1
2
 # 部署并启动区块链节点服务
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 仓库:
    3. sudo dnf install epel-release
      
      1
      2
      3
      4
      5
      6

      1. 安装 Ansible:

      1. 安装好 EPEL 仓库后,使用以下命令安装 Ansible:
      1. ```
      sudo dnf install ansible
  2. 验证安装:

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

6.2.配置监控

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

image.png

  1. 添加数据源 Prometheus

image.png

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

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

7.1.下载控制台

1
2
3
4
5
6
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.配置控制台

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[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.启动控制台

1
2
3
cd ~/fisco/console/
./start.sh
./start.sh group0 accountId

番外篇:BocsBuilder 命令介绍

  1. download_binary 下载网关、rpc、node、监控等二进制文件
1
python3 build_chain.py download_binary -t cdn
  1. create-subnet 创建虚拟网段(docker 虚拟网段 docker network ls
1
python3 build_chain.py create-subnet -n tars-network -s 172.25.0.0/16
  1. chain 链操作

    1. python3 build_chain.py chain -o deploy -t rpc
      
    2. -t, --type 选项:

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

      1. gen-config: 产生配置文件。
      2. upload: 在已经存在服务配置的场景下,上传并发布服务,一般和gen-config配合使用,先通过gen-config产生配置文件,然后通过upload指令上传并发布服务配置。
      3. deploy: 部署服务,包括服务配置生成、服务发布两个步骤。
      4. undeploy: 下线服务。
      5. upgrade: 升级服务,用于升级服务的二进制。
      6. expand: 扩容服务。
      7. start: 启动服务。
      8. stop: 停止服务。
  • 标题: Fisco Bcos3.0物理机框架搭建区块链网络
  • 作者: 兰涛
  • 创建于 : 2023-11-24 16:37:16
  • 更新于 : 2024-03-22 15:47:40
  • 链接: https://lands.work/20231124/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论