【学习笔记】基于Ubuntu构建Hyperledger Fabric网络

前言

本人参考连接搭建Fabric网络,遇到了一些坑,故此有了本篇文章。

准备好机器环境

我的系统版本:Ubuntu 18.04.1 LTS

安装GO语言环境

$ cd ~
$ mkdir go

对于新手来说,不推荐使用apt的方式安装GO。

$ wget https://dl.google.com/go/go1.10.2.linux-amd64.tar.gz  
$ sudo tar -C usr/local -xzf go1.10.2.linux-amd64.tar.gz  
$ vim ~/.profile  

添加如下内容:

export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin

:wq保存后使用如下命令将立即刷新

$ source ~/.profile
$ go version
go version go1.10 linux/amd64

安装Docker

这里使用的Docker官方文档来安装docker

  • 如果系统中有旧版本的Docker,需要先使用如下命令卸载
  • 更新apt包索引
  • 安装软件包以允许apt通过HTTPS使用远程库
  • 添加Docker的官方GPG密钥
  • 通过搜索指纹的最后8个字符,确认您现在拥有指纹识别码9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
  • 置稳定版本的远程库
  • 再次更新apt包索引
  • 使用apt安装docker-ce
$ sudo apt-get remove docker docker-engine docker.io
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL [https://download.docker.com/linux/ubuntu/gpg](https://download.docker.com/linux/ubuntu/gpg) | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]
$ sudo add-apt-repository  "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce

  • 查看docker版本,测试环境配置是否成功
$ docker version
Client:
 Version:           18.06.1-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        e68fc7a
 Built:             Tue Aug 21 17:24:56 2018
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.1-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       e68fc7a
  Built:            Tue Aug 21 17:23:21 2018
  OS/Arch:          linux/amd64
  Experimental:     false
  • 安装完成之后,需要将当前用户添加到docker用户组,然后为该用户添加sudo权限,
  • 若没有创建docker用户组,可以使用如下命令创建一个GID999,组名为docker的用户组
  • 将当前用户(ubuntu)添加到docker用户组并分配sudo权限
$ sudo groupadd –g 999 docker
$ sudo usermod -aG docker ubuntu

安装Docker-Compose

  • Docker-Compose是支持通过模板脚本批量创建的一个组件
  • 在安装 Docker-Compose之前,需要安装python-pip
  • 下载 Docker-Compose,这里使用的是国内的DaoClound加速器进行下载
  • Docker-Compose文件夹移动到/usr/local/bin目录下
  • Docker-Compose附上可执行权限
$ sudo apt-get python-pip
$ curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
$ sudo mv ~/docker-compose /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose

下载Fabric源码

  • 先在GOPATH下创建对应的目录
  • 切换到对应目录
  • 使用Git命令将fabric的源码从github上克隆下来
  • 由于Fabric一直在更新,而我们并不需要使用最新的源码,所有将版本切换到v1.0.0
$ mkdir -p ~/go/src/github.com/hyperledger
$ cd ~/go/src/github.com/hyperledger
$ git clone [https://github.com/hyperledger/fabric.git](https://github.com/hyperledger/fabric.git)
$ cd ~/go/src/github.com/hyperledger/fabric
$ git checkout -b v1.0.0

下载Fabric Docker镜像

由于刚才设置了Docker Hub镜像的地址,并且官方文件中也提供了批量下载的脚本,所有我们只需运行下面命令即可

$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
$ source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0

由于刚才设置的是国内的镜像站,在本地网速还不错的情况下下载数度还是很快的。当下载完成后,使用如下命令检查镜像列表

$ docker images
REPOSITORY                              TAG                IMAGE ID            CREATED            SIZE
dev-peer0.org1.example.com-marbles-v4  latest              089d43e100c9        5 hours ago        173MB
dev-peer0.org1.example.com-fabcar-1.0  latest              6047921ee993        7 hours ago        173MB
hyperledger/fabric-tools                latest              0403fd1c72c7        10 months ago      1.32GB
hyperledger/fabric-tools                x86_64-1.0.0        0403fd1c72c7        10 months ago      1.32GB
hyperledger/fabric-couchdb              latest              2fbdbf3ab945        10 months ago      1.48GB
hyperledger/fabric-couchdb              x86_64-1.0.0        2fbdbf3ab945        10 months ago      1.48GB
hyperledger/fabric-kafka                latest              dbd3f94de4b5        10 months ago      1.3GB
hyperledger/fabric-kafka                x86_64-1.0.0        dbd3f94de4b5        10 months ago      1.3GB
hyperledger/fabric-zookeeper            latest              e545dbf1c6af        10 months ago      1.31GB
hyperledger/fabric-zookeeper            x86_64-1.0.0        e545dbf1c6af        10 months ago      1.31GB
hyperledger/fabric-orderer              latest              e317ca5638ba        10 months ago      179MB
hyperledger/fabric-orderer              x86_64-1.0.0        e317ca5638ba        10 months ago      179MB
hyperledger/fabric-peer                latest              6830dcd7b9b5        10 months ago      182MB
hyperledger/fabric-peer                x86_64-1.0.0        6830dcd7b9b5        10 months ago      182MB
hyperledger/fabric-javaenv              latest              8948126f0935        10 months ago      1.42GB
hyperledger/fabric-javaenv              x86_64-1.0.0        8948126f0935        10 months ago      1.42GB
hyperledger/fabric-ccenv                latest              7182c260a5ca        10 months ago      1.29GB
hyperledger/fabric-ccenv                x86_64-1.0.0        7182c260a5ca        10 months ago      1.29GB
hyperledger/fabric-ca                  latest              a15c59ecda5b        10 months ago      238MB
hyperledger/fabric-ca                  x86_64-1.0.0        a15c59ecda5b        10 months ago      238MB
hyperledger/fabric-baseos              x86_64-0.3.1        4b0cab202084        12 months ago      157MB

出现以上结果说明镜像已经下载成功

启动Fabric网络并运行e2e_cli项目

  • 进入e2e_cli目录,并执行启动命令
$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
$ ./network_setup.sh up

这个过程做了如下操作:

  • 编译生成Fabric公私钥,证书的程序,程序在目录:fabric/release/linux-amd64/bin下
  • 基于configtx.yaml生成创世区块和通道相关信息,并保存到channel-artifacts文件夹中
  • 基于crypto-config.yaml生成公私钥和证书信息,并保存在crypto-config文件夹中
  • 基于docker-compose-cli.yaml启动1 Orderer + 4 Peer + 1 CLI的Fabric容器
  • 在CLI启动的时候,会运行srcipt/script.sh文件,这个脚本文件包含了创建Channel,加入Channel,安装Example02,运行Example02等功能

最后运行完成,我们会看到如下截图,说明网络启动成功了
mark

HYPERLEDGER FABRIC网络搭建之network e2ecli_default not found
原因是:e2e_cli目录是固定的,启动后会创建一个docker network以此为名字,这里是e2e_cli。如果修改该目录,要修改/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/base目录下的peer-base.yaml将网络名改成如下名称即可- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2e_cli_default

手动测试一下Fabric网络

我们以安装好的Example02进行测试,在官方例子中,channel的名字是mychannel,链码的名字是mycc,我们首先重新打开一个命令行,然后进入CLI

  • 输入以下命令即可
  • 运行命令查询a账户的余额,可以看到a账户的余额现在是90
  • 运行命令查询b账户的余额,可以看到b账户的余额现在是210
  • 现在将b账户的余额转100给a账户
  • 再次查询a账户的余额,可以看到a账户的余额现在是190,比之前多了100
  • 再次查询b账户的余额,可以看到b账户的余额现在是110,比之前少了100

root@60dc5766fa4d:/opt/gopath/src/github.com/hyperledger/fabric/peer# 简写为 root***peer#

$ docker exec -it cli bash
root***peer# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
root***peer# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'
root***peer# peer chaincode invoke -o orderer.example.com:7050  --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem  -C mychannel -n mycc -c '{"Args":["invoke","b","a","100"]}'
root***peer# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
root***peer# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'

查询结果如下图所示
mark

查询结果如下图所示
mark

执行结果如下图所示
mark

查询结果如下图所示
mark

查询结果如下图所示
mark

关闭区块链网络

  • 退出CLI容器
  • 关闭Fabric网络
root@60dc5766fa4d:/opt/gopath/src/github.com/hyperledger/fabric/peer#  exit
$ cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
$ ./network_setup.sh down

最后出现如下图说明关闭区块链网络成功
mark
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容