在自己的Fabric网络中部署Fabric Explorer(踩坑记录)

Posted 0rambot

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在自己的Fabric网络中部署Fabric Explorer(踩坑记录)相关的知识,希望对你有一定的参考价值。

因为需要在自己搭建的fabric 网络中部署区块链浏览器,而官方文档中用的Fabric网络是官方的例子,所以用自己搭建的网络进行部署时配置文件要进行相应的修改。我在部署的时候先用的docker容器部署,然后在一个地方卡了很久,查看容器报错如下:

FabricGateway - Failed to create wallet,pleasse check the configureration, and valide file path:

后面讲到这个地方的时候再细说问题。

一、容器部署fabric explorer

以下内容参考官方文档,链接:官方文档转接
大家在部署之前可以看一下官方文档前面的版本对应说明,浏览器的版本对Fabric各个版本的支持情况,支持的node版本等。

下图是整个浏览器的文件结构:

官方文档中写了操作步骤这里就不重复了,下面主要看一下配置文件需要修改的地方

  1. config.json
    单个组织:

  "network-configs": 
    "first-network": 				//这个“first-network”一般对应下面profile里面的first-network json文件
      "name": "org1-network",		//这个“name”可以自己随便取
      "profile": "./connection-profile/first-network.json"
    
  "license": "Apache-2.0"

如果区块链网络中有多个组织,可以以这样的形式编写:


  "network-configs": 
    "org1-network": 
      "name": "org1-network",
      "profile": "./connection-profile/org1-network.json"
    ,
    "org2-network": 
      "name": "org2-network",
      "profile": "./connection-profile/org2-network.json"
    ,
    "org3-network": 
      "name": "org3-network",
      "profile": "./connection-profile/org3-network.json"
    
  ,
  "license": "Apache-2.0"

  1. first-network.json
    在这个json文件中,我标注的地方都是需要根据自己的fabric网络修改的。

  "name": "first-network",
  "version": "1.0.0",
  "client": 
    "tlsEnable": true,
    "adminCredential": 		//这个是在浏览器登录时需要的用户名和密码
      "id": "admin",
      "password": "adminpw"
    ,
    "enableAuthentication": true,
    "organization": "Org1MSP",
    "connection": 
      "timeout": 
        "peer": 
          "endorser": "300"
        ,
        "orderer": "300"
      
    
  ,
  "channels": 
    "mychannel":    				//如果自己网络中通道名不是“mychannel”,必须得换成自己网络的通道名
      "peers": 
        "peer0.org1.example.com": 		//域名要和自己网络中的对应起来,比如自己网络中是peer0.org1.blockchain.com,这里也要换过来,下面内容涉及到这个域名都要换。
      
    
  ,
  "organizations": 
    "Org1MSP": 
      "mspid": "Org1MSP",			//mspid要和自己fabric网络中的配置文件对应起来,一般都是设置的“Org1MSP”
      "adminPrivateKey": 
        "path": "/tmp/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/priv_sk" //这里的priv_sk需要和自己文件夹中生成的私钥名字对应起来,比如我的私钥名就是一个字符串
      ,
      "peers": ["peer0.org1.example.com"],
      "signedCert": 
        "path": "/tmp/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem"
      
    
  ,
  "peers": 
    "peer0.org1.example.com": 
      "tlsCACerts": 
        "path": "/tmp/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt"
      ,
      "url": "grpcs://peer0.org1.example.com:7051"
    
  

如果是多个组织,这里每个组织需要有一个json的配置文件,配置文件里的内容可以根据first-network中的内容对比修改,都是放在connection-profile文件夹下。

  1. docker-compose.yaml

# SPDX-License-Identifier: Apache-2.0
version: '2.1'

volumes:
  pgdata:
  walletstore:

networks:
  mynetwork.com:
    external:
      name: fixtures_test			//这里的name必须要和自己本地fabric网络中的名字对应起来

services:

  explorerdb.mynetwork.com:      //这部分使用默认的就行
    image: hyperledger/explorer-db:latest
    container_name: explorerdb.mynetwork.com
    hostname: explorerdb.mynetwork.com
    environment:
      - DATABASE_DATABASE=fabricexplorer
      - DATABASE_USERNAME=hppoc
      - DATABASE_PASSWORD=password
    healthcheck:
      test: "pg_isready -h localhost -p 5432 -q -U postgres"
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - pgdata:/var/lib/postgresql/data
    networks:
      - mynetwork.com

  explorer.mynetwork.com:		//这部分需要注意下面volumes部分
    image: hyperledger/explorer:latest
    container_name: explorer.mynetwork.com
    hostname: explorer.mynetwork.com
    environment:
      - DATABASE_HOST=explorerdb.mynetwork.com
      - DATABASE_DATABASE=fabricexplorer
      - DATABASE_USERNAME=hppoc
      - DATABASE_PASSWD=password
      - LOG_LEVEL_APP=debug
      - LOG_LEVEL_DB=debug
      - LOG_LEVEL_CONSOLE=info
      - LOG_CONSOLE_STDOUT=true
      - DISCOVERY_AS_LOCALHOST=false
    volumes:				//这部分的意思就是将本地文件映射到容器中,只要本地文件结构按照官方文档中的设置好了,这里可以不用修改
      - ./config.json:/opt/explorer/app/platform/fabric/config.json
      - ./connection-profile:/opt/explorer/app/platform/fabric/connection-profile
      - ./organizations:/tmp/crypto
      - walletstore:/opt/explorer/wallet
    ports:
      - 8080:8080
    depends_on:
      explorerdb.mynetwork.com:
        condition: service_healthy
    networks:
      - mynetwork.com

等配置文件修改好了之后就可以使用命令 docker-compose up 启动了。
启动之后在浏览器中输入 http:localhost:8080打不开,然后docker ps 查看发现浏览器的容器没启动,查看容器日志,就看到下面的报错。

报错的意思是配置文件中有路径没有设置对,然后我对比了很久,确实没发现什么不对的地方,接着又在first-network.json 文件中修改了"adminPrivateKey"和"signedCert"的路径,最后确认是"signedCert"这个地方的路径报错,但我看了很久,实在是没发现有什么不同的地方。

直到今天和一个小伙伴讨论了很久,然后把他的json文件拿过来根据我的fabric网络进行了修改,内容和我之前的是一样了,然后成功了 !!!!

真的很玄学,完全不知道之前的文件哪有问题。 我猜测是不是我之前的配置文件中哪个地方的格式有什么问题,但是在编译器不会报错之类的没有看出来。遇到这种问题,可以尝试重新复制一下官方文档或者别人成功的内容,再根据自己的修改。

然后再给一个B站UP主的浏览器搭建讲解视频,Fabric Explorer部署教程视频 下面的评论中也有很多小伙伴遇到的问题,可能会是大家在部署过程中会遇到的问题。

二、命令行源码部署

这个过程也是跟着官方文档走的,但是我也遇到问题了:

编译是成功的,但是在执行npm start之后跳转页面的时候就出问题了,打不开页面,暂时还不知道怎么解决,如果有知道解决办法的小伙伴欢迎交流!

如何修改fabric算法

1.修改对等节点:使用系统加入方法配置网络的参与者节点,该过程将会编写参与者节点的配置文件。
2.修改通道配置:使用系统加入方法产生通道配置交易,并由两个或多个参与者签署交易。该过程会在分类帐上创建一个新的通道实例,并将配置,例如智能合约要部署的对象,添加到共识参数和联盟策略中。
3.部署智能合约:使用系统定义资源/链码,该过程将会将链码部署到指定通道上。
4.修改智能合约:使用系统定义资源/链码,该过程将会在已部署的智能合约上修改。
5.更新应用:使用系统定义资源/应用,该过程将会在共识参与者上部署新的应用代码。
6.更新系统/状态:使用系统定义资源/共识,该过程将会在共识参与者上进行更新。
参考技术A 修改Fabric算法需要下载Fabric的源代码,然后定位到对应的算法文件,根据自己所需要的需求进行修改,最后用Fabric提供的API部署新修改过的算法。

以上是关于在自己的Fabric网络中部署Fabric Explorer(踩坑记录)的主要内容,如果未能解决你的问题,请参考以下文章

Hyperledger Fabric(高可用之Raft部署)

如何修改fabric算法

Fabric 学习路线

Service Fabric、Azure Devops 部署失败:指定的网络密码不正确

Fabric手动部署first-network

万字解析——区块链hyperledger fabric2.2部署实战教程