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 环境
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 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 ~/fiscoNote : 若网速太慢,可尝试如下命令下载部署脚本 : curl - 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/propython3 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
将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 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 ] chain_id="chain0" rpc_sm_ssl=true gateway_sm_ssl=true [[group ]] group_id="group0" vm_type="evm" sm_crypto=true auth_check=true init_auth_address="0x4268b117b53ef5cba6469c7a1fbe3dedc098ad07" leader_period = 5 block_tx_count_limit = 1000 consensus_type = "pbft" gas_limit = "3000000000" compatibility_version="3.5.0" [[agency ]] name = "agencyA" enable_storage_security = false [agency.rpc ] deploy_ip=["10.10.141.57"] listen_ip="0.0.0.0" listen_port=20200 thread_count=4 [agency.gateway ] deploy_ip=["10.10.141.57"] listen_ip="0.0.0.0" listen_port=30300 peers=["10.10.141.57:30300"] [[agency.group ]] group_id = "group0" [[agency.group.node ]] node_name = "nodeCompanyA" deploy_ip = "10.10.141.57" enable_storage_security = false monitor_listen_port = "3902" monitor_log_path = "" enable_hsm=false
5.启动区块链的节点、RPC、网关服务
5.1.RPC
1 2 3 4 cd ~/fisco/BcosBuilder/propython3 build_chain.py chain -o deploy -t rpc
部署过程中生成的 RPC 服务相关的配置位于generated/rpc/${chainID}
目录
5.2.网关
1 2 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 管理台效果
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`
,解决方案:
启用 EPEL 仓库:
EPEL(Extra Packages for Enterprise Linux)是一个由 Fedora 社区维护的仓库,提供额外的软件包,包括 Ansible。
使用以下命令来安装 EPEL 仓库:
sudo dnf install epel-release
1 2 3 4 5 6 1. 安装 Ansible: 1. 安装好 EPEL 仓库后,使用以下命令安装 Ansible: 1. ``` sudo dnf install ansible
验证安装:
安装完成后,你可以通过运行 ansible --version
来验证 Ansible 是否已成功安装。
6.2.配置监控
进入 Grafanahttp://10.10.141.57:3001/profile将语言设置中文。
导入仪表盘(github 源码 )
添加数据源 Prometheus
选择 Prometheus->设置 Prometheus 的地址和认证方式
7. 下载、配置并使用控制台
7.1.下载控制台
1 2 3 4 5 6 cd ~/fisco && curl - bash download_console.sh cp -n console/conf/config-example.toml console/conf/config.tomlcp -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 命令介绍
download_binary 下载网关、rpc、node、监控等二进制文件
1 python3 build_chain.py download_binary -t cdn
create-subnet 创建虚拟网段(docker 虚拟网段 docker network ls
)
1 python3 build_chain.py create-subnet -n tars-network -s 172.25.0.0/16
chain 链操作
python3 build_chain.py chain -o deploy -t rpc
-t, --type
选项:
rpc : 指定操作的服务类型为 RPC 服务。
gateway : 指定操作的服务类型为 Gateway 服务。
node : 指定操作的服务类型为区块链节点服务。
-o, --op
选项
gen-config
: 产生配置文件。
upload
: 在已经存在服务配置的场景下,上传并发布服务,一般和gen-config
配合使用,先通过gen-config
产生配置文件,然后通过upload
指令上传并发布服务配置。
deploy
: 部署服务,包括服务配置生成、服务发布两个步骤。
undeploy
: 下线服务。
upgrade
: 升级服务,用于升级服务的二进制。
expand
: 扩容服务。
start
: 启动服务。
stop
: 停止服务。