踩坑无数,网上文章良莠不齐,很多文件都是错的。
参考:
【hyperledger-fabric 【13】部署 Hyperledger Explorer 区块链浏览器】 https://www.bilibili.com/video/BV1GR4y1G7aW
【hyperledger fabric explorer 超级账本区块链浏览器搭建】 https://www.bilibili.com/video/BV1yQ4y1Z7sJ
1、准备环境
fabric版本为2.4。
首先根据视频能够启动Fabric-Sample 的test-network
该网络有两个组织Org1\Org2,每个组织下有一个节点。
我的目录结构参考上一篇文章。
2、在test-network下启动test-network并创建通道
./network up
./network createChannel
3、在explorer目录下载好3个文件
4、在explorer目录下创建文件夹connection-profile
将文件test-network放入connection-profile中,并复制一份,重命名
因为我们的网络有2个组织,因此需要两个json文件。多个组织需要编写多个文件对应。
5、修改test-network1.json如下
{
"name": "test-network",
"version": "1.0.0",
"client": {
"tlsEnable": true,
"adminCredential": { //此处为登录浏览器的账户密码
"id": "exploreradmin",
"password": "exploreradminpw"
},
"enableAuthentication": true,
"organization": "Org1MSP", //注意
"connection": {
"timeout": {
"peer": {
"endorser": "300"
},
"orderer": "300"
}
}
},
"channels": {
"mychannel": { //注意channel名称
"peers": {
"peer0.org1.example.com": {} //注意
}
}
},
"organizations": {
"Org1MSP": {
"mspid": "Org1MSP",
"adminPrivateKey": {
"path": "/tmp/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/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" //注意
}
}
}
特别注意两个地方:signedCert、adminPrivateKey。这两处和原始下载文件不一样。
6、修改test-network2.json如下
{
"name": "test-network",
"version": "1.0.0",
"client": {
"tlsEnable": true,
"adminCredential": {
"id": "exploreradmin",
"password": "exploreradminpw"
},
"enableAuthentication": true,
"organization": "Org2MSP",
"connection": {
"timeout": {
"peer": {
"endorser": "300"
},
"orderer": "300"
}
}
},
"channels": {
"mychannel": { //注意channel名称
"peers": {
"peer0.org2.example.com": {}
}
}
},
"organizations": {
"Org2MSP": {
"mspid": "Org2MSP",
"adminPrivateKey": {
"path": "/tmp/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/priv_sk" //注意
},
"peers": ["peer0.org2.example.com"],
"signedCert": {
"path": "/tmp/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem" //注意
}
}
},
"peers": {
"peer0.org2.example.com": {
"tlsCACerts": {
"path": "/tmp/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt"
},
"url": "grpcs://peer0.org2.example.com:9051" //注意
}
}
}
本质上需要将Org1改为Org2 、org1改为org2。再修改url端口为test-network Org2peer0的docker镜像端口,也就是9051。容易出问题:使用替代快捷键导致错误。需仔细检查。
7、在explorer目录下修改config.json如下
{
"network-configs": {
"test-network1": {
"name": "Test Network1",
"profile": "./connection-profile/test-network1.json"
},
"test-network2": {
"name": "Test Network2",
"profile": "./connection-profile/test-network2.json"
}
},
"license": "Apache-2.0"
}
9、复制test-network文件夹的organizations到explorer目录下
注意:需要启动好网络再复制,否则缺少文件。
必须创建好chennel。
10、编辑docker-compose.yaml变为如下:
# SPDX-License-Identifier: Apache-2.0
version: '2.1'
volumes:
pgdata:
walletstore:
networks:
mynetwork.com:
name: fabric_test #注意此处名称和启动的网络名称一致
services:
explorerdb.mynetwork.com:
image: ghcr.io/hyperledger-labs/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:
image: ghcr.io/hyperledger-labs/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=info
- LOG_LEVEL_DB=info
- LOG_LEVEL_CONSOLE=debug
- LOG_CONSOLE_STDOUT=true
- DISCOVERY_AS_LOCALHOST=false
- PORT=${PORT:-8080}
volumes: #注意此处是将本地文件挂载到docker镜像上,左边是指上文配置好的文件,右边是挂载到docker-compose的目录
- ./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:
- ${PORT:-8080}:${PORT:-8080}
depends_on:
explorerdb.mynetwork.com:
condition: service_healthy
networks:
- mynetwork.com
11、此时explorer目录下文件结构如下
注意:如果不一致则重头开始,自行排查问题。
12、使用docker启动浏览器
docker-compose -f docker-compose.yaml up -d
如果第一次启动,则会下载docker镜像,需要注意网络通畅。
关闭浏览器:
docker-compose down -v
查看docker启动的容器
docker ps
找到hyperledger/explorer:latest 容器的id XZXXXX,查看日志
docker logs XZXXXX
没有报错则启动成功,在浏览器访问localhost:8080,打不开查看是否被其他进程占用。
账户密码见上文test-network1.json/test-network2.json
注意每次启动test-network,先删除旧的organizations,重新复制一份过去。
13、常见问题:
(1)报错无法生成wallet,一般是配置文件test-network、docker-compose.yaml中的文件路径有问题。
可以进入启动的容器,看看是否挂载上了。根据报错信息查看文件是否存在。如果文件都挂载存在,则排查路径是否正确,看看视频2中的路径。
docker exec -it XZXXXX sh
也有可能是json文件有问题,可以自行去官网下载再修改。
本人修改好的文件附上下载地址:
链接: https://pan.baidu.com/s/1DJV0oT9qHyN_y47Tj8UQqQ 提取码: 125s
(2)第二次启动报错无法访问channel
原因是没有容器没有删除挂载的文件,可能是上一次退出存在问题。
解决办法:
1)先退出
docker-compose down -v
2)删除文件
docker volume rm explorer_pgdata
docker volume rm explorer_walletstore
再启动