6.Fabric区块浏览器的部署

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.浏览器集群部署

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值