前言

最近有一个供应链金融的需求,需求做一个区块链网络,经过前期技能调研,终究挑选了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装置

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

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装置

# 设置阿里云署理 
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

 # 创立操作目录
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

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

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

将装备文件的auth_check设置为true,运转一下指令(国密版别)

# 下载文件脚本文件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

Fisco Bcos3.0物理机结构建立

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

3.2.装置和发动Tars

3.2.1修正tars-framework装备并发动服务

假如现已装置了tars出产版别就不用再处理了

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

翻开装备文件docker-compose.yml,修正 装备文件位

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
 # 创立并发动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 文档

案例:

[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

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

布置过程中生成的RPC服务相关的装备位于generated/rpc/${chainID}目录

5.2.网关

 # 布置并发动Gateway服务  python3 build_chain.py chain -o deploy -t gateway

5.3.node节点服务

 # 布置并发动区块链节点服务
python3 build_chain.py chain -o deploy -t node

5.4.tars办理台作用

Fisco Bcos3.0物理机结构建立

5.5.目录树

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上(需求上述三个节点布置完成后,在进行布置)

 # 布置并发动区块链节点服务
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
      
  2. 装置 Ansible:

    1. 装置好 EPEL 库房后,运用以下指令装置 Ansible:
    2. sudo dnf install ansible
      
  3. 验证装置:

    1. 装置完成后,你能够经过运转 ansible --version 来验证 Ansible 是否已成功装置。

6.2.装备监控

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

Fisco Bcos3.0物理机结构建立

  1. 添加数据源Prometheus

Fisco Bcos3.0物理机结构建立

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

7. 下载、装备并运用控制台

7.1.下载控制台

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.装备控制台

[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.发动控制台

cd ~/fisco/console/
./start.sh 
./start.sh group0 accountId

番外篇:BocsBuilder指令介绍

  1. download_binary 下载网关、rpc、node、监控等二进制文件
python3 build_chain.py download_binary -t cdn
  1. create-subnet 创立虚拟网段(docker虚拟网段 docker network ls
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: 停止服务。