Fabric 2.0 区块浏览器
Fabric使用的版本是V2.0.0,浏览器的版本是v1.1.2,在官网中可以查询到fabric与block-explorer的版本对应
官网地址:https://github.com/hyperledger/blockchain-explorer/blob/v1.1.2/README.md
浏览器版本与fabric版本的对应关系
文章目录
前提
本文基于docker部署, 并以CA组件已经完全实现,并需要对CA有一定的了解,至少能够区分出tls证书和msp证书才可以进行部署.使用的证书,全部是通过CA服务获取的,也就是自定义的证书,当然对于block-explorer我也还有很多没有弄清楚的地方,还需深入学习,然后再完善文档
提示:以下是本篇文章正文内容,下面案例可供参考
一、目标
通过本文,能够以自定义部署的fabric网络为基础, 实现部署单机版浏览器
二、部署步骤
1.镜像准备
区块链浏览器会使用到 hyperledger/explorer镜像和 hyperledger/explorer-db镜像
使用docker获取 hyperledger/explorer 镜像
我的docker源使用的是
https://download.docker.com/linux/centos/docker-ce.repo
# 拉取 hyperledger/explorer 镜像,其中版本需要对应你的fabric版本
docker pull hyperledger/explorer:1.1.2
# 拉取 hyperledger/explorer-db 数据库镜像
docker pull hyperledger/explorer-db:latest
2.文件准备
部署浏览器需要用到一下三个文件
config.json : 多网络配置文件
first-network.json : 网络配置文件,包含身份的指定
docker-compose.yaml : 部署配置
block-explorer源码下载地址
上述的三个文件在源码位置
config.json在源码中的路径为block-explorer/examples/net1/config.json
first-network.json在源码中的路径为block-explorer/examples/net1/connection-profile/first-network.json
docker-compose.yaml在源码中的路径为block-explorer/docker-compose.yaml
建议: 关于配置的说明在block-explorer/README-CONFIG.md文件中有说明,建议先阅读此说明
我在这三个文件中的修改并不多,我会指源文件和修改后的文件
1.config.json
{
"network-configs": {
"first-network": {
# 原配置 "name": "first-network", 此配置为你的docker network 名称
"name": "dev",
# 原配置 "profile": "./connection-profile/first-network.json"
# 指定first-network.json 的具体路径
"profile": "/usr/local/home/explor/first-network.json"
}
},
"license": "Apache-2.0"
}
2.first-network.json
{
# 原配置 "name": "first-network", 指定的docker network名称
"name": "first-network",
"version": "1.0.0",
"client": {
"tlsEnable": true,
"adminCredential": {
# 原配置 "id": "exploreradmin", 登录浏览器的账号
"id": "admin",
# 原配置 "password": "exploreradminpw" 登录浏览器的密码
"password": "admin"
},
# 是否开启免密登录到浏览器 false表示免密访问浏览器
"enableAuthentication": true,
# 身份MSPID 与configtx.yaml中的Organizations:orgx:ID 对应
"organization": "Org1MSP",
"connection": {
"timeout": {
"peer": {
"endorser": "300"
},
"orderer": "300"
}
}
},
"channels": {
# 通道名称
"mychannel": {
"peers": {
# 原配置 "peer0.org1.example.com": {}
"peer1-org1": {}
},
"connection": {
"timeout": {
"peer": {
"endorser": "6000",
"eventHub": "6000",
"eventReg": "6000"
}
}
}
}
},
"organizations": {
# 原配置 "Org1MSP" 身份MSPID
"Org1MSP": {
"mspid": "Org1MSP",
# org1的admin下的msp/keystore/下的证书,证书的名字必须以_sk结尾
"adminPrivateKey": {
"path": "/usr/local/home/org1/admin/msp/keystore/priv_sk"
},
# 原配置 "peers": ["peer0.org1.example.com"], 节点名称
"peers": ["peer1-org1"],
# org1的admin下的msp/signcerts下的证书
"signedCert": {
"path": "/usr/local/home/org1/admin/msp/signcerts/cert.pem"
}
}
},
"peers": {
# 原配置 "peer0.org1.example.com": 节点名称
"peer1-org1": {
# tls证书路径,也就是 tls-ca启动时生成的ca-cert.pem文件
"tlsCACerts": {
"path": "/usr/local/home/tls-ca/crypto/ca-cert.pem"
},
# 节点地址
"url": "grpcs://peer1-org1:7051"
}
}
}
3.docker-compose.yaml
# SPDX-License-Identifier: Apache-2.0
version: '2.1'
volumes:
pgdata:
walletstore:
networks:
byfn:
external:
name: dev
services:
explorerdb.mynetwork.com:
image: hyperledger/explorer-db:latest
container_name: explorerdb.mynetwork.com
hostname: explorerdb.mynetwork.com
environment:
- DATABASE_DATABASE=fabricexplorer
# 账号密码 需要与下面的配置对应
- DATABASE_USERNAME=admin
- DATABASE_PASSWORD=admin
healthcheck:
test: "pg_isready -h localhost -p 5432 -q -U postgres"
interval: 30s
timeout: 10s
retries: 5
volumes:
- pgdata:/var/lib/postgresql/data
networks:
- byfn
explorer.mynetwork.com:
image: hyperledger/explorer:1.1.2
container_name: explorer.mynetwork.com
hostname: explorer.mynetwork.com
environment:
- DATABASE_HOST=explorerdb.mynetwork.com
- DATABASE_DATABASE=fabricexplorer
# 账号密码 需要与上面的配置对应
- DATABASE_USERNAME=admin
- DATABASE_PASSWD=admin
- LOG_LEVEL_APP=debug
- LOG_LEVEL_DB=debug
- LOG_LEVEL_CONSOLE=debug
- LOG_CONSOLE_STDOUT=true
# 浏览器是否开启远程访问, true表示只有部署的机器可以访问
- DISCOVERY_AS_LOCALHOST=false
volumes:
- /usr/local/home/explor:/usr/local/home/explor
# config.json配置文件挂载进容器
- /usr/local/home/explor/config.json:/opt/explorer/app/platform/fabric/config.json
- /usr/local/home/explor/:/opt/explorer/app/platform/fabric/
# 我证书的根目录
- /usr/local/home/:/usr/local/home
- walletstore:/opt/wallet
command: sh -c "node /opt/explorer/main.js && tail -f /dev/null"
ports:
- 8080:8080
depends_on:
explorerdb.mynetwork.com:
condition: service_healthy
networks:
- byfn
3.部署
启动浏览器
docker-compose -f docker-compose.yaml up -d
关闭浏览器
docker-compose -f node4.yaml down --volumes --remove-orphans
注意: 删除容器一定要用 docker-compose命令关闭或删除容器,因为数据库会外挂文件,如果使用docker rm -f 删除 则不会删除外挂文件,引起其他很多问题,所以一定要通过docker-compose关闭服务
4.访问
需要开放服务器的8080端口用于访问区块浏览器
network = config.json中的name
user = first-network.json中的 client:adminCredential:id
passwork = first-network.json中的 client:adminCredential:passwork
总结
使用docker部署整体感觉来说还不算复杂,但是需要对证书有很好的的理解,另外经过亲测,启动浏览器后新增通道并部署新的链码,浏览器也会自动加载,至于浏览器加载数据的机制还不知道,后续在研究
待完成
1.浏览器源码剖析
2.浏览器数据同步机制
3.浏览器集群部署