部署fabric测试网络

Fabric 2.0做了一些大的修改,本文通过fabric-samples部署测试网络

Posted by Arain on February 13, 2020

部署测试fabric 2.0

测试环境配置如下:

  • Fabric version: 2.0.0
  • Centos 7
  • Docker 18.03+
  • Golang 1.13.7+

环境准备

安装Golang

  1. 下载golang 进入golang官网下载所需版本的文件。例如go1.13.8.linux-amd64.tar.gz
     wget https://dl.google.com/go/go1.13.8.linux-amd64.tar.gz
    
  2. 解压至/usr/local文件夹
     tar -C /usr/local -xzf go1.13.8.linux-amd64.tar.gz
    
  3. 创建go代码工作空间目录:$HOME/go
  4. 配置环境变量vim /etc/profile
     export GOROOT=/usr/local/go #设置为go安装的路径
     export GOPATH=$HOME/go #默认安装包的路径
     export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
    
  5. source /etc/profile使修改生效.
  6. 控制台输入命令go验证golang环境

安装docker

  1. 下载安装 建议下载18.03.1-ce及以上版本
    官方地址:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
    执行以下命令下载安装docker,过安装过程中出现依赖缺失异常可按照“安装依赖”进行补充。
     # 下载docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm
     curl -L "https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm" -o docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm
     # 安装docker ce
     rpm -ivh docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm
    
  2. 安装依赖 首次安装docker环境的Centos 7环境或多或少会缺少一些docker的环境依赖。在实际安装过程中建议先尝试安装docker rpm包,当提示中缺少哪些依赖时针对性补充。其中多数依赖可通过yum进行安装,若安装环境无网络可根据以下列表下载依赖包后上传。

    以下九个依赖是安装container-selinux所需要的,如果yum源中有这些依赖的话可以直接通过yum安装。

  3. 启动
     systemctl start docker
    
  4. 测试
    docker version
    

    安装docker-compose

  5. 下载可执行文件
     sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    
  6. 上传 如果是没有网络环境的话可以将下载好的docker-compose可以指文件上传至/usr/local/bin/目录下,然后配置权限。
     sudo chmod +x /usr/local/bin/docker-compose
     sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    
  7. 测试
     $ docker-compose --version
     docker-compose version 1.25.0, build 1110ad01
    

编译fabric

  1. 下载Fabric源码
    创建目录”$GOPATH/src/github.com/hyperledger”并在该目录下执行以下命令克隆fabric代码。
     git clone -b master --depth=1 https://github.com/hyperledger/fabric.git && cd fabric
    
  2. 编译二进制文件 Fabric 2.0版本可以编译peer、orderer、configtxgen、configtxlator、cryptogen、idemixgen和discover种二进制文件。当需要编译某种二进制文件时执行”make 文件类型”即可,例如:make cryptogen。若需要编译全部二进制文件则执行”make all”命令。Make命令编译后的文件被输出到$GOPATH/src/github.com/hyperledger/fabric/build/bin目录下。

    首次编译fabric时会因为网络原因无法下载goalng.org/x/下的一系列包,虽然有一些解决办法但是过程太过复杂不便叙述,以后仔细研究后再完善。

  3. 编译docker镜像 执行“docker ps”确认当前用户有权限使用docker后执行命令make docker即可编译docker镜像。或者执行make all命令即可
  4. Make all和make release make allmake release命令会编译fabric的全部二进制文件和docker镜像。但是这两个命令编译后二进制文件的输出目录不同,make all输出到build文件夹,make release输出到release文件夹。

部署fabric节点

  1. 下载fabric-samples
     git clone --depth=1 https://github.com/hyperledger/fabric-samples.git & cd fabric-samples
    
  2. 下载依赖文件 在fabric-samples父目录下执行以下命令,下载配置文件,二进制文件和docker镜像。
     # Fetch bootstrap.sh from fabric repository using
     curl -sS https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh -o ./scripts/bootstrap.sh
     # Change file mode to executable
     chmod +x ./scripts/bootstrap.sh
     # Download binaries and docker images
     ./scripts/bootstrap.sh 2.0.0 1.4.4 0.4.18
    

    bootstrap.sh脚本执行后fabric-samples目录下会多出bin和config两个文件夹,其内容如下:

     fabric-samples
         bin
             configtxgen
             configtxlator
             cryptogen
             discover
             fabric-ca-client
             fabric-ca-server
             idemixgen
             orderer
             peer
         config
             configtx.yaml
             core.yaml
             orderer.yaml 
    

    阅读bootstrap.sh脚本后不难发现,bootstrap.sh脚本做了以下内容:

    1. 下载fabric-samples代码;
    2. 下载fabric和fabric-ca编译后的二进制文件到fabric-samples/bin目录;
    3. 下载fabric默认配置文件到fabric-samples/config目录;
    4. 下载fabric的docker镜像。

    执行bootstrap.sh时候发现国内网络下载docker镜像和二进制文件非常慢。所以建议使用源代码自行编译二进制文件和docker镜像。config目录下的配置文件在fabric源码文件中可以找到。

  3. 部署fabric测试网络 在fabric-samples/test-network目录下执行./network.sh up命令即可部署一个简单的fabric网络。节点配置如下:
     [holmes@iZwz97nz3217dqqunx8zmcZ test-network]$ docker ps -a
     CONTAINER ID        IMAGE                               COMMAND             CREATED             STATUS              PORTS                              NAMES
     281d0e65a3de        hyperledger/fabric-orderer:latest   "orderer"           About an hour ago   Up About an hour    0.0.0.0:7050->7050/tcp             orderer.example.com
     472708ce8376        hyperledger/fabric-peer:latest      "peer node start"   About an hour ago   Up About an hour    7051/tcp, 0.0.0.0:9051->9051/tcp   peer0.org2.example.com
     9aa96ccb85a6        hyperledger/fabric-peer:latest      "peer node start"   About an hour ago   Up About an hour    0.0.0.0:7051->7051/tcp             peer0.org1.example.com
    

测试Fabric网络

  1. 创建通道 在fabric-samples/test-network目录下执行./network.sh createChannel -c mychannel创建名为mychannel的通道。
  2. 安装合约 在fabric-samples/test-network目录下执行./network.sh deployCC部署和调用测试示例中的合约。
  3. 调用合约

Fabric 2.0新特性测试

  1. 去中心化chaincode管理模式
  2. Chaincode不再依赖docker守护进程,可以作为外部服务独立运行
  3. 私有数据增强
  4. Couchdb增加缓存,提升couchdb性能
  5. 发布alpine版本docker镜像