在自己的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版本等。
下图是整个浏览器的文件结构:
官方文档中写了操作步骤这里就不重复了,下面主要看一下配置文件需要修改的地方
- 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之后跳转页面的时候就出问题了,打不开页面,暂时还不知道怎么解决,如果有知道解决办法的小伙伴欢迎交流!
如何修改fabric算法
1.修改对等节点:使用系统加入方法配置网络的参与者节点,该过程将会编写参与者节点的配置文件。2.修改通道配置:使用系统加入方法产生通道配置交易,并由两个或多个参与者签署交易。该过程会在分类帐上创建一个新的通道实例,并将配置,例如智能合约要部署的对象,添加到共识参数和联盟策略中。
3.部署智能合约:使用系统定义资源/链码,该过程将会将链码部署到指定通道上。
4.修改智能合约:使用系统定义资源/链码,该过程将会在已部署的智能合约上修改。
5.更新应用:使用系统定义资源/应用,该过程将会在共识参与者上部署新的应用代码。
6.更新系统/状态:使用系统定义资源/共识,该过程将会在共识参与者上进行更新。 参考技术A 修改Fabric算法需要下载Fabric的源代码,然后定位到对应的算法文件,根据自己所需要的需求进行修改,最后用Fabric提供的API部署新修改过的算法。
以上是关于在自己的Fabric网络中部署Fabric Explorer(踩坑记录)的主要内容,如果未能解决你的问题,请参考以下文章
Hyperledger Fabric(高可用之Raft部署)