因为需要在自己搭建的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之后跳转页面的时候就出问题了,打不开页面,暂时还不知道怎么解决,如果有知道解决办法的小伙伴欢迎交流!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐