在CentOS 7.2下安装Hyperledger fabric 1.0.0 preview版本的solo模式

在CentOS 7.2下安装Hyperledger fabric 1.0.0 preview版本的solo模式

一. 安装centos和docker 等组件

A. 安装centos x86-64 Minimal(IP:192.168.2.10)

内核版本需要3.10 以上。centos 7 完全支持.

查看内核信息
$ uname -a
Linux localhost.localdomain 3.10.0-514.6.1.el7.x86_64

B. 安装docker, 版本1.12.5(略过)

$ docker -v
Docker version 1.12.5, build 047e51b/1.12.5

C. 安装python-pip(可选)

  • 安装epel扩展
$ yum -y install epel-release
  • 然后安装python-pip
$ yum -y install python-pip
# 更新到最新版本
$ pip install --upgrade pip
  • 确认安装成功和确定版本
$ pip -V

d. 安装docker-compose

docker-compose是docker集群管理工具,可自定义一键启动多个docker container。

官网二进制发布:

https://github.com/docker/compose/releases

安装手册见网站 :

https://docs.docker.com/compose/install/

安装命令如下:

$ curl -L https://github.com/docker/compose/releases/download/1.11.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ docker-compose -v

或者通过 pip 安装

$ pip install -U docker-compose

二. 搭建Fabric 1.0.0 演示环境( solo共识方式,带自定义channel)

杨宝华的项目主页

https://github.com/yeasy/blockchain_guide/blob/master/hyperledger/1.0.md

A.下载所需组件

1. 安装操作系统和docker (略)

2. 安装python pip(略)

3. 安装 docker-compose 最新发布版本

pip install docker-compose 

4.获取docker的 image,并更新镜像别名。

注意:这里一定要用tag来更新别名,要和docker-compose.yml 中的匹配

2017年02月16日,杨宝华mail确定:

The latest tag is auto-building by triggered from code change.

While those number tag (e.g., 0.8) is stable and manually set.

所以, 我们使用:

最新的版本的pull命令如下:

以root用户运行以下命令

ARCH=x86_64
BASE_VERSION=1.0.0-preview
PROJECT_VERSION=1.0.0-preview
IMG_VERSION=0.8.4
docker pull yeasy/hyperledger-fabric-base:$IMG_VERSION \
  && docker pull yeasy/hyperledger-fabric-peer:$IMG_VERSION \
  && docker pull yeasy/hyperledger-fabric-orderer:$IMG_VERSION \
  && docker pull yeasy/hyperledger-fabric-ca:$IMG_VERSION \
  && docker pull yeasy/blockchain-explorer:latest \
  && docker tag yeasy/hyperledger-fabric-peer:$IMG_VERSION hyperledger/fabric-peer \
  && docker tag yeasy/hyperledger-fabric-orderer:$IMG_VERSION hyperledger/fabric-orderer \
  && docker tag yeasy/hyperledger-fabric-ca:$IMG_VERSION hyperledger/fabric-ca \
  && docker tag yeasy/hyperledger-fabric-base:$IMG_VERSION hyperledger/fabric-baseimage \
  && docker tag yeasy/hyperledger-fabric-base:$IMG_VERSION hyperledger/fabric-ccenv:$ARCH-$BASE_VERSION \
  && docker tag yeasy/hyperledger-fabric-base:$IMG_VERSION hyperledger/fabric-baseos:$ARCH-$BASE_VERSION

5.设置网络

$ docker network create fabric_noops
$ docker network create fabric_pbft

6.启动 Fabric 1.0

a. 下载 Compose 模板文件。
$ cd ~
$ git clone https://github.com/yeasy/docker-compose-files
b. 进入hyperledger 1.0 模板目录
$ cd /root/docker-compose-files/hyperledger/1.0
c. 查看包括若干模板文件,功能如下。

peers.yml: 包含 peer 节点的服务模板。

docker-compose.yml: 启动 1 个 最小化的环境,包括 1 个 peer 节点、1 个 Orderer 节点、1 个 CA 节点。

d. 修改成3个peer的方式。

docker-compose.yml 里面增加如下代码

  peer1:
    extends:
      file: peer.yml
      service: peer
    container_name: fabric-peer1
    hostname: peer1
    environment:
      - CORE_PEER_ID=peer1
      - CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050
    links:
      - ca
      - orderer
    ports:
      - 8052:7051
    depends_on:
      - ca
      - orderer

  peer2:
    extends:
      file: peer.yml
      service: peer
    container_name: fabric-peer2
    hostname: peer2
    environment:
      - CORE_PEER_ID=peer2
      - CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050
    links:
      - ca
      - orderer
    ports:
      - 8053:7051
    depends_on:
      - ca
      - orderer
e. 部署和启动 Fabric 1.0
$ docker-compose -f docker-compose.yml up -d

7. 查看容器信息

应该有5个启动的容器,分别是
    1. fabric-peer0
    2. fabric-peer1
    3. fabric-peer2
    4. fabric-orderer
    5. fabric-ca
$ docker  ps
# 或者
$ docker-compose ps 

8. 建立一个channel 名字是myc1

进入任何一个peer容器内均可

docker exec -it fabric-peer2 bash

CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer channel create -c myc1

# 确认myc1.block文件产生了。说明channel的创世纪块建立成功
ls *.block

9. 把相应的peer(0,1,2)节点加入myc1

在建立channel 的容器里面,进行下面操作。

CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer0:7051 peer channel join -b myc1.block

CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer1:7051 peer channel join -b myc1.block

CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer2:7051 peer channel join -b myc1.block

10. 部署和实例化chaincode

  • 有几个peer需要运行这个chaincode,那就需要在这几个peer上都peer chaincode install。
  • 但是只需要在任意一个peer上peer chaincode instantiate 一次。
  • 如果在其他peer上再做 instantiate ,就会出现错误。
  • 修改CORE_PEER_ADDRESS参数值即可指定在哪个peer上 install 和 instantiate。
$ docker exec -it fabric-peer0 bash

# 部署一个chaincode
CORE_PEER_ADDRESS=peer2:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=fabric-orderer:7050 peer chaincode install  -C myc1 -n mycc -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02   -c ‘{}‘  -v 1.1.0    

# 实例化一个chaincode
CORE_PEER_ADDRESS=peer2:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=fabric-orderer:7050  peer chaincode instantiate -C myc1 -n mycc -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c ‘{"Args":["init","a","100","b","200"]}‘  -v 1.1.0

注意:

* 在docker宿主机器上,使用docker ps 命令可以看到,在第一次指定一个peer(由CORE_PEER_ADDRESS指定),成功install 并且instantiate一个chaincode后,就会产生,并且up起来一个以这个peer和chaincode ,版本号为名字的容器。

* 接下来在其他peer上install这个相同的chaincode的时候,不会产生容器。(这个时候,由于已经有第一个peer进行了这个chaincode的instantiate,再在其他容器上instantiate 就会出错的,错误信息是chaincode已经存在)

* 当指定peer进行业务操作的时候,就会产生,并且up起来一个以这个指定的peer和chaincode ,版本号为名字的容器。

docker ps
dev-peer0-mycc-1.1.0 

7. 查询chaincode

部署完成后,等待几秒,或者查看log。确定部署完成,然后进行查询

CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=fabric-orderer:7050   peer chaincode query  -C myc1 -n mycc  -c ‘{"Args":["query","a"]}‘

#返回结果是:
Query Result: 100
2017-03-15 08:05:17.429 UTC [main] main -> INFO 002 Exiting.....

#或者 

CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=fabric-orderer:7050  peer chaincode invoke  -C myc1  -n mycc -c ‘{"Args":["invoke","a","b","10"]}‘ peer chaincode invoke -n mycc -c ‘{"Args":["query","a"]}‘

返回结果是:
[chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Invoke result: version:1 response:<status:200 message:"OK" payload:"100" > payload:"\n \...
[main] main -> INFO 002 Exiting.....
  1. 调用chaincode

    模拟转账业务

CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=fabric-orderer:7050  peer chaincode invoke  -C myc1  -n mycc -c ‘{"Args":["invoke","a","b","10"]}‘

正确的返回内容:

[chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Invoke result: version:1 response:<status:200 message:"OK" > payload:...
[main] main -> INFO 002 Exiting.....
注意最终结果状态正常 response:<status:200 message:"OK" >

过几秒后再调用查询业务,确认转账成功

CORE_PEER_ADDRESS=peer0:7051 peer chaincode query   -C myc1  -n mycc  -c ‘{"Args":["query","a"]}‘

返回的正确内容,b账号里面多了转账的金额。

  1. 查看日志

    在docker server上执行如下命令:

$ cd ~/docker-compose-files/hyperledger/1.0
$ docker-compose logs -f

三. 搭建Fabric 0.6 演示环境(noops 模式)

A.下载组件

  1. hyperledger Fabric使用的 docker-compose.yml

    Docker Compose 配置文件 yaml 参数简单介绍

    http://debugo.com/docker-compose/

    使用HyperLedger github上的样例

    curl -o docker-compose.yml https://raw.githubusercontent.com/hyperledger/fabric/master/examples/sdk/node/docker-compose.yml
  2. 下载membersrvc和peer 的Docker image
    $ docker pull hyperledger/fabric-membersrvc:latest
    $ docker pull hyperledger/fabric-peer:latest
    
    #查看images 信息
    
    $ docker images

B. build客户端镜像

1. 下载Fabric样例Dockerfile

$ cd ~
$ curl -o Dockerfile https://raw.githubusercontent.com/hyperledger/fabric/master/examples/sdk/node/Dockerfile

2. build image

docker build -t hyperledger/fabric-starter-kit:latest .

3. 检查images是否正确构建

docker images

C. 运行Fabric开发环境

1. 启动Cluster

docker-compose -f docker-compose.yml up -d

2. 进入Docker

部署为开发模式,直接进入peer

docker exec -it peer bash

3. 登陆

官方Image默认打开权限,需要先登陆用户,使用内置用户登陆。

  • CLI
peer network login jim
# 缺省密码 6avZQLwcUe9b
  • REST API

    也可以使用REST API方式:

POST http://127.0.0.1:7050/
registrar
{
    "enrollId": "jim",
    "enrollSecret": "6avZQLwcUe9b"
}

Note: 为了使用REST,你需要在docker-compose.yml文件的peer部分中加入端口映射:

    $ vim docker-compose.yml

    #增加端口映射在peer部分
    ports:
       - "0.0.0.0:7050:7050"
    #退出 vim

    #建议删除原有的3个container
    $ docker rm -f  peer starter membersrvc
    #然后重新生成容器
    $ docker-compose -f docker-compose.yml up -d
    # 查看进程
    $ docker-compose ps
    # 如果有错误 , 查看docker 日志
    $ docker-compose logs

4. 部署Chaincode

  • CLI
    # 进入  peer容器
    $docker  exec -it peer bash

    #部署一个命名为 mycc的chaincode
    $CORE_PEER_ADDRESS=127.0.0.1:7051
    $peer chaincode deploy -n mycc -c ‘{"Function": "init", "Args": ["roamer", "100", "she", "5000"]}‘ -u jim

注意: 在这里 只能用 mycc 作为 chiancode的名字。在0.6.1 preview版本中如果使用 hyperledger-demo-1 这类的名字,会抛出 sending init failed(handler not found for chaincode roamer-test) 错误!

Note: 部署返回成功仅仅意味着提交的指令已被接收,不代表指令执行完成。如果要查看是否部署成功,需要新开一个终端,在docker 服务器上(不是当前容器),运行查看日志命令,确保没有错误信息。

$ docker logs -f peer
#或者
$ docker-compse logs -f peer
  • REST API
POST http://192.168.2.10:7050/chaincode

request 参数

    {
    "jsonrpc": "2.0",
    "method": "deploy",
    "params": {
        "type": 1,
        "chaincodeID": {
            "name": "mycc"
        },
        "ctorMsg": {
            "function": "init",
            "args": ["roamer", "100", "she", "5000"]
        },
        "secureContext": "jim"
    },
    "id": 1
}

5. 查询

  • CLI
    peer chaincode query -u jim  -n mycc -c ‘{"Function": "query", "Args": ["roamer"]}‘

返回结果应该是

Query Result: 100
06:41:08.619 [main] main -> INFO 004 Exiting.....
  • REST API
http://192.168.2.10:7050/chaincode

request参数

    {
    "jsonrpc": "2.0",
    "method": "query",
    "params": {
        "type": 1,
        "chaincodeID": {
            "name": "mycc"
        },
        "ctorMsg": {
            "function": "query",
            "args": ["roamer"]
        },
        "secureContext": "jim"
    },
    "id": 5
}

返回结果是:

    {
        "jsonrpc": "2.0",
        "result": {
            "status": "OK",
            "message": "100"
        },
        "id": 5
    }

6. 转账

  • CLI
peer chaincode invoke -n mycc  -u jim -c  ‘{"Function": "invoke", "Args": ["roamer", "she", "10"]}‘
  • REST API
POST http://192.168.2.10:7050/chaincode
    {
        "jsonrpc": "2.0",
        "method": "invoke",
        "params": {
            "type": 1,
            "chaincodeID": {
                "name": "mycc"
            },
            "ctorMsg": {
                "function": "invoke",
                "args": ["roamer", "she", "5"]
            },
            "secureContext": "jim"
        },
        "id": 3
    }

7. 获取某个区块的信息

  • REST API
GET
http://192.168.2.10:7050/chain/blocks/1
http://192.168.2.10:7050/chain/blocks/2
......
时间: 2024-12-12 15:34:39

在CentOS 7.2下安装Hyperledger fabric 1.0.0 preview版本的solo模式的相关文章

centos 6.5下安装nginx+redmine 3.1.0 笔记

curl -sSL https://rvm.io/mpapis.asc | gpg --import curl -L https://get.rvm.io | bash -s stable source /etc/profile.d/rvm.sh rvm requirements rvm install 2.2.3rvm use 2.2.3 --default gem sources --remove https://rubygems.org/gem sources -a https://rub

安装hyperledger fabric V1.0.0(维护中)

因1.0版本刚刚发布,正在重新测试与安装,使用该文档安装会有问题,如修改完成,会重新开放.  E2E的例子在部署chaincode时会报以下的错误,所以目前请安装beta版本 安装文档位置: https://github.com/hyperledger/fabric   fabric代码托管地址 https://hyperledger-fabric.readthedocs.io/en/latest/  在线文档地址 https://github.com/hyperledger/fabric/ar

centos和redhat下安装postgreSQL

1.确定你要下载的版本:下载地址 2.进入你存放下载文件的目录运行wget http://yum.postgresql.org/9.2/redhat/rhel-5-i386/pgdg-centos92-9.2-6.noarch.rpm,我的是32bit的centos5,其他版本可以在上面的路径中找到相关的链接 3.运行命令 rpm -ivh pgdg-centos92-9.2-6.noarch.rpm 安装 4.运行命令 yum install postgresql92-server 安装ser

在VirtualBox中的CentOS 6.3下安装VirtualBox增强包

在VirtualBox中安装好客户操作系统(GuestOS)之后,建议安装VirtualBox增强包(VirtualBox GuestAddition),它的作用是对GuestOS的性能和可用性进行优化(也就是提高GuestOS的性能和提升使用者的使用体验). GuestAddition实质上是安装在GuestOS上的一组驱动程序和应用程序. 注意,很多人把下载的增强包双击之后,看到VirtualBox的"全局设定"--"扩展"中已经显示出了增强包的名字就认为已经安

CentOS 6系统下安装 JDK1.6

CentOS 6系统下安装 JDK1.6 JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品.自从Java推出以来,JDK已经成为使用最广泛的Java SDK.JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库.下面我们就来学习如何在CentOS系统下安装 JDK. 一.CentOS系统创建安装目录 #mkdir /usr/java 二.下载 先去 www.oracle.com 网站寻找到 最新jdk1

centos和readhat下安装python2.7

1.安装基本库yum install gccyum install makeyum install zlib-develyum install bzip2-develyum install openssl-develyum install ncurses-devel 2.获得python2.7.4wget http://www.python.org/ftp/python/2.7.4/Python-2.7.4.tar.bz2 3.解压 tar xf Python-2.7.4.tar.bz2 4.配

centos和redhat下安装nginx最新版

在ubuntn下通过agp-get install nginx就可以按照最新版本的nginx,很方便 在ctentos和redhat下需要添加yum 仓库才能安装最新版的nginx,在/etc/yum.repos.d/目录下新建nginx.repo 文件输入以下内容就可以了:[nginx]name=nginx repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=0enabled=1 之后运行yum

CentOS 6.4下安装vsftpd、配置虚拟用户登录

概述: vsftpd是Linux下比较著名的FTP服务器,搭建FTP服务器当然首选这个. 本文介绍了在CentOS 6.4下安装vsftpd.配置虚拟用户登录FTP的过程. 正文: 一:安装vsftpd 查看是否已经安装vsftpd rpm -qa | grep vsftpd 如果没有,就安装,并设置开机启动 yum -y install vsftpd chkconfig vsftpd on 二:基于虚拟用户的配置 所谓虚拟用户就是没有使用真实的帐户,只是通过映射到真实帐户和设置权限的目的.虚拟

CentOS 6.x 下安装Zabbix Agent 3.2.x 操作指引

CentOS 6.x 下安装Zabbix Agent 3.2.x 操作指引=====第一步:安装rpm包rpm -ivh http://http://repo.zabbix.com/zabbix/3.2/rhel/6/x86_64/zabbix-agent-3.2.0-1.el6.x86_64.rpm注:此处的RPM安装包可以根据URL查找更多版本的RPM包 第二步:检查是否安装成功chkconfigrpm -ql zabbix-agent 第三步:配置Zabbix Agentvim /etc/