在自己的Fabric网络中部署Fabric Explorer(踩坑记录)
在自己的Fabric网络中部署Fabric Explorer(踩坑记录)因为需要,所以要在自己搭建的fabric 网络中部署区块链浏览器,官方文档中用的Fabric网络是官方的例子,所以用自己搭建的网络进行部署时配置文件要进行相应的修改。我在部署的时候先用的docker容器部署,然后在一个地方卡了很久,查看容器报错如下:FabricGateway - Failed to create wallet
因为需要在自己搭建的fabric 网络中部署区块链浏览器,而官方文档中用的Fabric网络是官方的例子,所以用自己搭建的网络进行部署时配置文件要进行相应的修改。我在部署的时候先用的docker容器部署,然后在一个地方卡了很久,查看容器报错如下:
FabricGateway - Failed to create wallet,pleasse check the configureration, and valide file path:{}
后面讲到这个地方的时候再细说问题。
一、容器部署fabric explorer
以下内容参考官方文档,链接:官方文档转接
大家在部署之前可以看一下官方文档前面的版本对应说明,浏览器的版本对Fabric各个版本的支持情况,支持的node版本等。
下图是整个浏览器的文件结构:
官方文档中写了操作步骤这里就不重复了,下面主要看一下配置文件需要修改的地方
- 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"
}
- 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文件夹下。
- 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之后跳转页面的时候就出问题了,打不开页面,暂时还不知道怎么解决,如果有知道解决办法的小伙伴欢迎交流!
更多推荐
所有评论(0)