快速搭建Fabric测试网络(Docker in Ubantu 18.04 TLS)

这周查阅了大量文档资料,终于在今天把整个网络全部走通,包括通过源代码部署和通过shell脚本一键部署,趟了大量的坑,依然不敢说是全部了解。但也有很多值得注意和以后需要求证的地方,这里写下来备忘。

本文所述的内容是在2019年1月8号开始的,于2019年1月10号结束。在Win10家庭版上装的Ubantu 18.04版本的虚拟机,文档主要参考的是Fabric Release-1.4版本。另外,我喜欢Go,所以接下来关于链码的演示,没有nodejs、python和java什么事,想看这些,可以移步未来我写的文章。Orz...

准备工作(Prerequisites

在开始之前,检查一下你的准备开发或者测试Fabric的平台是否有安装如下软件。哦,对了,由于我极度不喜欢使用安装包,因为下载的安装包总是会随着时间的流逝而过时,所以我喜欢直接用命令来安装,想下载安装包的,可以去各自的官网上找找。

cURL

下载代码以及docker镜像用的。如果你还没装这个,或者在本文中使用curl命令出现了错误,可以考虑下载最新的版本。

$ # 检查你的curl版本 - Check your curl version
$ curl --version
curl 7.58.0 (x86_64-pc-linux-gnu) libcurl/7.58.0 OpenSSL/1.1.0g zlib/1.2.11 libidn2/2.0.4 libpsl/0.19.1 (+libidn2/2.0.4) nghttp2/1.30.0 librtmp/2.3
Release-Date: 2018-01-24
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL

$ # 如果没有就执行下载 - Download if it doesn't exist
$ sudo apt-get update
$ sudo apt install curl
Reading package lists... Done
Building dependency tree       
Reading state information... Done
curl is already the newest version (7.58.0-2ubuntu3.5).
0 upgraded, 0 newly installed, 0 to remove and 26 not upgraded.

Docker and Docker Compose

orderer/peer节点启动,链码安装/实例化/执行/升级等用的。

$ # 检查你的docker版本 - Check your docker version
$ docker --version
Docker version 18.09.0, build 4d60db4
$ docker-compose --version
docker-compose version 1.17.1, build unknown

$ # 如果没有就执行下载 - Download if it doesn't exist
$ 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 | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ 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
$ # 国内用户因为网络、未翻墙或者其他灵异事件可能hello-world执行不了会失败. 不过这不重要。 - It will be failed in China because the God is watching you. But it doesn't matter. :)
$ sudo docker container run hello-world
$ sudo apt install docker-compose

Go

主要是来写链码(chaincode)的。1.4版本的fabric要求go版本在1.11.x以上。

$ # 检查你的go版本 - Check your go version
$ go version
go version go1.11.4 linux/amd64

$ # 如果没有就执行下载 - Download if it doesn't exist
$ sudo add-apt-repository ppa:longsleep/golang-backports
$ sudo apt-get update
$ sudo apt-get install golang-go

$ # 配置环境变量,这个很重要,目前来讲,GOPATH是fabric必须有的。
$ vim ~/.bashrc
$ # 如果没有装vim可能会报错,直接按提示安装就好了 sudo apt install vim
$ # 打开文件后,按 i 进入编辑模式,在文件末尾粘贴(Shift+Insert)上如下内容:
export PATH=$PATH:$(go env GOPATH)/bin
export GOPATH=$(go env GOPATH)
export GOROOT=$(go env GOROOT)
export GOARCH=amd64
export GOOS=linux
$ # 粘贴完后,按Esc推出编辑模式,输入命令:wq! 保存退出后执行source命令让其立即生效
$ source ~/.bashrc
$ 测试是否设置成功 - Check if it is successful
$ echo $GOPATH
/home/wff/go

构建你的第一个网络(Building Your First Network

构建你的第一个网络(byfn)方案提供了一个Hyperledger Fabric示例网络,该网络由两个组织组成,每个组织维护两个peer节点,以及一个基于“solo”模式的orderer节点。

安装镜像

鉴于在国内可能不想翻墙甚至不会翻墙的同志大有人在,我也就直接上不用翻墙的命令了。

$ cd ~
$ mkdir hyperledger-fabric
$ cd hyperledger-fabric
$ curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh | bash -s 1.4.0 1.4.0 0.4.14
$ # 这一步耐心很重要,最好是在晚上睡觉的时候,等第二天醒来就下载好了,这就美滋滋,否则,等几个小时还算你网速是好的吧。

$ # 查看是否下载成功
$ configtxlator version
configtxlator:
 Version: 1.4.0
 Commit SHA: development build
 Go version: go1.11.4
 OS/Arch: linux/amd64

$ # 如果报错找不到这个命令 - configtxlator: command not found,那么可能你需要手动设置全局命令
$ cd ~/hyperledger-fabric/fabric-samples/bin
$ sudo cp * /usr/local/bin

生成网络构件

生成构件的过程中,会生成包括orderer节点组织和peer节点组织的证书,以及创始块,配置交易块等信息,同时检查docker镜像版本。

$ cd ~/hyperledger-fabric/fabric-samples/first-network/
$ ./byfn.sh generate

$ # 如果打印出来的日志包含如下内容,则说明工具版本和docker镜像版本不匹配,需要重新下载镜像
=================== WARNING ===================
  Local fabric binaries and docker images are  
  out of  sync. This may cause problems.       
===============================================
$ # 工具版本
$ configtxlator version | sed -ne 's/ Version: //p'
1.4.0
$ # docker镜像版本
$ docker run --rm hyperledger/fabric-tools:latest peer version | sed -ne 's/ Version: //p' | head -1
1.4.0

$ # 如果不匹配,则删除错误版本的镜像,重新设置版本安装镜像
$ # 删除全部镜像
$ docker images|awk '{printf "%s:%s\n",$1,$2}'|xargs docker rmi
$ # 重新设置版本,比如1.3.0
$ curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh | bash -s 1.3.0 1.3.0 0.4.14

构建网络

如果上一步的generate没有出现任何问题,那么接下来就可以开始构建简易的fabric网络了。

$ # 这里的命令不加-l参数,所以默认是go语言
$ ./byfn.sh up

$ # 如果看到如下内容,说明网络已经构建成功并开始启动了。接下来它会完成一个e2e测试告诉你大致的流程
Starting with channel 'mychannel' and CLI timeout of '10'
Continue? [Y/n]
proceeding ...
Creating network "net_byfn" with the default driver
Creating peer0.org1.example.com
Creating peer1.org1.example.com
Creating peer0.org2.example.com
Creating orderer.example.com
Creating peer1.org2.example.com
Creating cli


 ____    _____      _      ____    _____
/ ___|  |_   _|    / \    |  _ \  |_   _|
\___ \    | |     / _ \   | |_) |   | |
 ___) |   | |    / ___ \  |  _ <    | |
|____/    |_|   /_/   \_\ |_| \_\   |_|

Channel name : mychannel
Creating channel...

$ # 成功执行后,会出现如下内容:
Query Result: 90
2017-05-16 17:08:15.158 UTC [main] main -> INFO 008 Exiting.....
===================== Query successful on peer1.org2 on channel 'mychannel' =====================

===================== All GOOD, BYFN execution completed =====================


 _____   _   _   ____
| ____| | \ | | |  _ \
|  _|   |  \| | | | | |
| |___  | |\  | | |_| |
|_____| |_| \_| |____/

你可以滚动这些日志查看交易的流程,如果你并没有得到上面的结果,可以看看官网的错误说明找找原因。

关闭网络

这个会关闭并删除掉所有docker中与之相关的容器,没啥好说的。

$ ./byfn.sh down

另外,还有个重启命令,可以试试。

$ ./byfn.sh restart

错误记录

这里会放一些我在启动过程中遇到的,或者别人遇到的错误问题,和一些解决方案,不过目前我有点忘了,下次遇见的时候再记录下来。一般来讲,按照教程走,基本没多大问题。

后记

这篇教程对于fabric建立一个简单认知是没有问题的,但如果想深入研究,你会发现你几无所得。所以,接下来,我会深入写一篇关于手动构建fabric网络,包括自己生成组织,证书,启动排序、对等节点,以及手撸链码的日志。等有空再说吧,现在正在给fabric加密类型增加国密算法,可能懒得写了就。

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

推荐阅读更多精彩内容