超级账本Fabric的部署和使用(第九章)

文章目录

    • 本地编译安装
    • 安装docker
    • 问题:如何解决docker下载慢的方法
  • Docker 镜像
    • 通过脚本来下载
    • 第二种部署Fabric 的方式
  • 操作部分
    • 错误2
    • 部署fabric 1.4 笔记

标注:如有错误欢迎指正和探讨,共同进步

  1. 四种不同的服务节点
    创新点:对网络中的节点进行解耦,分为四类
  • 背书节点:负责对交易的提案进行检查和背书,计算交易执行的结果。
  • 确认节点:负责接受交易结果前再次检查合法性,接受合法交易对账本的修改,并写入区块链结构。
  • 排序节点::对所有发往网络中的交易进行排序,将排序后的交易按照配置中的约定整理为区块,之后提交给确认节点进行处理。
  • CA证书节点:负责对网络中所有的证书进行管理,提供标准的PKI 服务。

另外,网络中支持多通道的特性使用一条独立的系统通道( system channel )负责管理网络中的各种配置信息,并完成对其他应用通道( application channel ,供用户发送交易使用)的创建

本地编译安装

  • 超级账本 Fabric 基于 Go 语言实现
  1. 操作系统:Ubuntu 16.04 操作系统
  2. 环境配置部分
  • 安装 Go 语言环境
    参考:https://www.cnblogs.com/zhangbao/p/5898208.html

在/root/downloads/下

wget -c https://storage.googleapis.com/golang/go1.7.1.linux-amd64.tar.gz

解压文件至/usr/local

tar -C /usr/local -xzf go1.7.1.linux-amd64.tar.gz

设置环境变量(让命令go有效)

cd ~
vim .profile

在文件最后添加

export PATH=$PATH:/usr/local/go/bin
export GOPATH=/opt/gopath

保存退出,使语句生效

. .profile

测试

go version

输出

go version go1.7.1 linux/amd64

  • 安装依赖包
    编译Fabric 关代码,需要一些依赖包.

$ sudo apt-get update
$ apt-get install -y libsnappy-dev zliblg-dev libbz2 - d ev libltdl-dev btool

Docker简介

Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
$ curl -fsSL https://get.docker.com/ I sh (根据docker的安装脚本进行安装即可)

安装docker

参考文章:http://www.runoob.com/docker/ubuntu-docker-install.html
Fabric 网络目前依赖 Docker 服务作为链码容器的支持,因此即使是本地环境运行。
Fabric 网络,也需要在 Peer 节点上安装 Docker 环境。

补充:如果是 Ubuntu 或者 Debian 操作系统,修改 Docker 的配置文件 etc/ default/ docker,增Docker的socket 绑定,运行在 Docker 中的进程才能通过映射的 socket 调用 Docker的API 执行镜像编译和创建容器

DOCKER_ OPTS=" -s=auf s -r=true --api-cors-header=’*’-H tcp://0.0.0.0:2375 -H
unix:///var/run/docker.sock

重启 Docker 服务让配置生效:

sudo service docker start

问题:如何解决docker下载慢的方法

超级账本Fabric的部署和使用(第九章)_第1张图片
操作方法:

一键配置镜像地址:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

Docker 镜像

可以从源码编译生成,或通过从 DockerHub 仓库下载获取

  • 方法一仓库中获取系统的源码

$git clone http://gerrit.hyperledger.org/r/fabric 获取镜像。
git clone https://github.com/hyperledger/fabric.git(github获取方式)
默认情况下,会下拉获取带有完整历史的仓库,这个过程取决于网络速度,可能需要较长时间。

生成镜像
超级账本Fabric的部署和使用(第九章)_第2张图片

  • 方法二:获取dockerhub 中的fabric 镜像
    超级账本Fabric的部署和使用(第九章)_第3张图片
    超级账本Fabric的部署和使用(第九章)_第4张图片
    下载必须docker 镜像
  1. 建立bash 文件, setup_fabric_1.0.sh.

  2. 添加shell命令

docker pull yeasy/hyperledger-fabric-base:0.8.9 \
&& docker pull yeasy/hyperledger-fabric-peer:0.8.9 \
&& docker pull yeasy/hyperledger-fabric-orderer:0.8.9 \
&& docker pull yeasy/hyperledger-fabric-ca:0.8.9 \
&& docker pull yeasy/blockchain-explorer:latest \
&& docker tag yeasy/hyperledger-fabric-peer:0.8.9hyperledger/fabric-peer \
&& docker tag yeasy/hyperledger-fabric-orderer:0.8.9hyperledger/fabric-orderer \
&& docker tag yeasy/hyperledger-fabric-ca:0.8.9hyperledger/fabric-ca \
&& docker tag yeasy/hyperledger-fabric-base:0.8.9hyperledger/fabric-ccenv:x86_64-1.0.0-preview \
&&docker tag yeasy/hyperledger-fabric-base:0.8.9hyperledger/fabric-baseos:x86_64-1.0.0-preview
  1. 运行bash文件下载镜像。

通过脚本来下载

官方提供的自动化部署脚本。
参考网址:https://www.cnblogs.com/studyzy/p/6973334.html
下载时指定二进制版本号,CA证书的版本号,镜像版本号。 注意涉及的主要内容。

curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh | bash -s 1.2.0 1.2.0 0.4.10

超级账本Fabric的部署和使用(第九章)_第5张图片

参考网址:
Unbuntu 18.04下 Hyperledger Fabric 1.0 的搭建
Fabric0.6/1.0镜像文件拉取
下载官方脚本

问题:什么是Peer节点

首先需要明确的是,Peer节点是一个物理的概念(与之对比,通道是一个逻辑的概念,通道并没有实体),一台服务器可以充当Peer的作用。这台服务器既可以是私有物理机,也可以是云上的资源。Peer是整个Fabric体系的基础设施,下面会解释为什么。Peer节点存储关键的数据,并且执行特定的程序。****存储的数据包括账本、链码(智能合约执行的程序主要包括背书以及链码的执行。所有的账本查询以及账本修改必须通过链码来操作,所有的链码操作必须通过Peer节点在唤起,所以SDK或者应用需要存取账本数据时,必须通过Peer。这就是为什么说Peer是Fabric的基础设施。

第二种部署Fabric 的方式

除了前面讲解的在服务器上手动部署的方式,读者还可以基于容器方式快速部署一套本地的 Fabric 网络进行体验(第一种在分布式服务器上的部署方式参考:区块链的设计与应用的章节九9.4.6之前)

Fabric基于容器的一套Fabric 的快速部署方式 的部署方式

  1. 下载Compose模板文件

git clone https://github.com/yeasy/docker-compose-files

  1. docker 中的镜像的地址
    https://github.com/yeasy/docker-compose-files/tree/master/hyperledger_fabric/latest/scripts

bash download_images.sh

  1. 启动docker 中的网络
    在这里插入图片描述

操作部分

关于fabric的使用操作部分笔记

  1. 下载fabric 制定版本源码
  • git clone -b 分支 地址,github项目仓库 download or clone网址位置
  • git clone -b release-1.0 https://github.com/hyperledger/fabric.git

问题:
遇到问题

  • error: RPC failed; curl 18 transfer closed with outstanding read data remaining
    fatal: The remote end hung up unexpectedly
    fatal: early EOF
    fatal: index-pack failed
  • 解决方法:
    扩展缓存即可:文件大小的上限设置大点
    git config --global http.postBuffer 524288000
  1. 下载fabric 镜像文件

进入fabric /examples/e2e_cli ,执行 ./download-dockerimages.sh
/opt/gopath/fabric/examples/e2e_cli# ./download-dockerimages.sh

此时 fabric 1.0镜像下载完毕。

  1. 执行network_setup.sh
    network_setup.sh 是一件测 试脚本 , 该脚本启动 5 个 Docker 容器 , 其中 4 容器运行 Peer 节点和 1 个容器运行 Orderer 节点,它组成一个 Fabric 网络。另外,还有一个 cli容器用于执行创建 channel 、加入 channel 、 安装和执行 chaincode 等操作 。 测试用的 chaincode定义了两个变量,在实例化的时候会给这两个变量赋予初始值,并通过 invoke 操作可以使两个变量的值发生变化。

错误:

API error (404): {“message”:“network e2ecli_default not found”}
参考:https://www.jianshu.com/p/22c108e0b463

超级账本Fabric的部署和使用(第九章)_第6张图片
参考文章:https://blog.csdn.net/vivian_ll/article/details/79966210

错误2

由于在这里卡了好久,所以重点记一下。不要使用beta版本

Error: Error endorsing query: rpc error: code = Unknown desc = could not find chaincode with name ‘mycc’ - make sure the chaincode mycc has been successfully instantiated and try again -
!!! Query result on peer0 is INVALID !!!
超级账本Fabric的部署和使用(第九章)_第7张图片
操作

  1. 删除下载的原来1.0.0-beta(网上建议不要使用beta 版本镜像)
docker rmi `docker images -q`
  1. 下载新的 原版源码指定 1.0.0 版本。具体内容看download-dockerimages.sh 文件
source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0

重新运行就可以了。1

部署fabric 1.4 笔记

  • 步骤一
# 下载最新的 sample ,二进制可执行文件,镜像文件
curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh|bash -s 
  • 步骤二
# 当以上步骤完成后, 将fabric sample 路徑下
# 前提是配置了go 語言環境
$GOPATH=/opt/gopath 
# /opt/gopath/src/github.com/hyperledger/fabric-samples/
cd fabric-samples/first-network
./byfn.sh generate
./byfn.sh up  (./byfn.sh up -l java , 调用java链码)

./byfn.sh down (关闭 first network )

补充:如何调用raft 排序服务启动网络

./byfn.sh up -o etcdraft

同理

#使用kafka启动kafka 网络
./byfn.sh up -o kafka 

完成后出现这个. 说明fabric 1.4.3 版本 first-network 运行成功。
超级账本Fabric的部署和使用(第九章)_第8张图片
具体参考官方文档:https://hyperledger-fabric.readthedocs.io/en/latest/build_network.html


  1. 参考:https://blog.csdn.net/PistachioGuoGuo/article/details/81008038 ↩︎

你可能感兴趣的:(区块链)