美文网首页联盟链之Fabric
快速搭建Fabric测试网络(Docker in Ubantu

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

作者: 天地一小儒 | 来源:发表于2019-01-11 16:23 被阅读0次

    这周查阅了大量文档资料,终于在今天把整个网络全部走通,包括通过源代码部署和通过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加密类型增加国密算法,可能懒得写了就。

    相关文章

      网友评论

        本文标题:快速搭建Fabric测试网络(Docker in Ubantu

        本文链接:https://www.haomeiwen.com/subject/cvjarqtx.html