GithubHelp home page GithubHelp logo

fabric-web's Introduction

fabric-web

版本历史

v1.1.1

  • 新增expect,免去手动输入密码的烦恼;

v1.1.2

  • 脚本自动分发到各个服务器
  • orderer增加kafka集群
  • 账本存储使用couchdb

v1.1.3

  • 支持动态新增组织

使用步骤

我们假定您已经配置好了go、docker环境,并设置了相关环境变量。

如果没有,请参考:>> 环境搭建

请先使用如下命令为脚本增加执行权限:

root@vm10-249-0-4:~/fabric-web/fabric-ca# chmod +x *.sh
root@vm10-249-0-4:~/fabric-web/fabric-ca# chmod +x scripts/*.sh
root@vm10-249-0-4:~/fabric-web/fabric-ca# chmod +x scripts/eyfn/*.sh

一、网络拓扑

通过fabric.config定义网络拓扑结构。

💡 请确认setup节点的IP与第一个Peer组织的第一个peer节点一致, 因为setup-bootstrap.sh脚本会启动run-fabric.sh脚本,而run-fabric.sh这个脚本是基于该节点身份执行一系列操作的, 否则的话,在执行实例化链码时报timeout错误。

二、构建项目,打包分发脚本

./network_builder.sh

三、下载镜像

在正式开始前,确保您在每个节点都已下载所需的fabric镜像

可执行如下命令下载镜像:

./down-images.sh

四、配置hosts

为了避免网络访问不同的情况,请确保修改每台服务器的/etc/host,内容参见build/host.config

五、启动CA服务

对于每一个组织都要启动一个rca和ica服务。

确保先启动rca,在启动ica

(1). rca(root ca)

一个组织对应一个 root fabric-ca-server

启动指定组织<ORG>root fabric-ca-server 命令如下

./rca-bootstrap.sh <ORG>

脚本会在Root CA初始化时,在/etc/hyperledger/fabric-ca目录下生成ca-cert.pem证书,并将其拷贝为/${DATA}/${ORG}-ca-cert.pem

(2). ica(intermediate ca)

一个组织对应一个 intermediate fabric-ca-server

启动指定组织<ORG>intermediate fabric-ca-server 命令如下

./ica-bootstrap.sh <ORG>

脚本会在Intermediate CA初始化时,在/etc/hyperledger/fabric-ca目录下生成ca-chain.pem证书,并将其拷贝为/${DATA}/${ORG}-ca-chain.pem

其它节点下列操作需要使用rca(USE_INTERMEDIATE_CAfalse时)或者ica(USE_INTERMEDIATE_CA为true`时)根证书

  • 向CA服务端申请组织根证书时使用;

  • 向CA服务端登记CA管理员身份时使用;

    之所以登记CA管理员身份,是因为需要使用CA管理员身份去注册Orderer和Peer相关用户实体。

    !!! 执行注册新用户实体的客户端必须已经通过登记认证,并且拥有足够的权限来进行注册 !!!

  • 向CA服务端登记 Orderer组织管理员身份和Peer组织管理员身份Orderer节点身份和Peer节点身份,以及 Peer组织普通用户身份 时使用;

等等。

因此,

  • USE_INTERMEDIATE_CAfalse,即未启用中间层CA时,需要将/etc/hyperledger/fabric-ca/ca-cert.pem拷贝到其它节点作为CA_CHAINFILE
  • USE_INTERMEDIATE_CAtrue,即启用中间层CA时,需要将/etc/hyperledger/fabric-ca/ca-chain.pem拷贝到其它节点作为CA_CHAINFILE;

不必担心,这些工作脚本已经帮我们完成了!~ 😆

采用的方法是其它节点通过 ssh远程拷贝ca上的根证书 ,所以我们在fabric.config中配置了CA的USER_NAMEPWDPATH, 此外,我们还通过expect免去了你与脚本交互(scp远程拷贝需要您输入服务器密码)。

同样的,

  • orderer节点需要从setup节点获取创世区块
  • run节点需要从setup节点获取应用通道配置交易文件、锚节点配置更新交易文件

这些工作脚本也已经帮我们完成了!~ ✌

六、启动setup

setup容器用于:

  • 向fabric-ca-servers注册Orderer和Peer身份
  • 构建通道Artifacts(包括:创世区块、应用通道配置交易文件、锚节点配置更新交易文件)
  • 启动run容器,执行创建应用通道、加入应用通道、更新锚节点、安装链码、实例化链码、查询调用链码等操作

务必在执行完步骤四,再执行此步骤。确保已成功启动所有组织的rcaica节点。

setup-bootstrap.sh [-h] [-d]
            -h|-?       获取此帮助信息
            -d          从网络下载二进制文件
  • 脚本需要使用fabric的二进制文件configtxgen,请将这些二进制文件置于PATH路径下。

    如果脚本找不到,会基于fabric源码自动编译生成二进制文件, 此时需要保证$HOME/gopath/src/github.com/hyperledger/fabric源码存在,且版本一致。

    当然你也可以通过指定-d选项从网络下载该二进制文件,这可能会很慢,取决于你的网速。

  • 脚本需要使用fabric的二进制文件fabric-ca-client,请将该二进制文件置于PATH路径下。

    如果脚本找不到,会基于fabric ca源码自动编译生成二进制文件, 此时需要保证$HOME/gopath/src/github.com/hyperledger/fabric-ca源码存在,且版本一致。

    编译fabric-ca相关代码,需要一些依赖包,可以通过如下命令安装:

    sudo apt-get install libtool libltdl-dev

    脚本会将编译生成的fabric-ca-serverfabric-ca-client保存在$GOPATH/bin目录下。

如果你执行完上述,那么来启动setup吧!~😍

由于setup-bootstrap.sh脚本的一些操作需要较高的权限,请使用root用户运行。

./setup-bootstrap.sh

七、启动Zookeeper与Kafka集群

zk-kafka-bootstrap.sh <-z|-k> <ID>
    -h|-?       获取此帮助信息
    -z          启动zookeeper节点
    -k          启动kafka节点
    <ID>        节点的编号

假设zookeeper与kafka个配置3台。那么启动脚本如下:

(1). 启动Zookeeper
./zk-kafka-bootstrap.sh -z 1
./zk-kafka-bootstrap.sh -z 2
./zk-kafka-bootstrap.sh -z 3
(2). 启动Kafka
./zk-kafka-bootstrap.sh -k 1
./zk-kafka-bootstrap.sh -k 2
./zk-kafka-bootstrap.sh -k 3

八、启动orderer

orderer-bootstrap.sh [-h] <ORG> <NUM>
    -h|-?  - 获取此帮助信息
    <ORG>   - 启动的orderer组织名称
    <NUM>   - 启动的orderer组织的第几个节点
./orderer-bootstrap.sh <ORG> <NUM>

九、启动peer

peer-bootstrap.sh [-h] <ORG> <NUM>
    -h|-?  - 获取此帮助信息
    <ORG>   - 启动的peer组织的名称
    <NUM>   - 启动的peer组织的节点索引
./peer-bootstrap.sh <ORG> <NUM>

十、动态增加节点

>> 动态增加节点

TODO

  • network_builder导致重写的env.sh,导致其不可再次复用;
  • 支持通过fabric.config配置是否启用中间层CA;
  • 动态新增组织,启动Peer调用链码验证后,应恢复数据至初始状态,以为后续启动多个节点做准备;

fabric-web's People

Contributors

trekkiii avatar

Stargazers

 avatar  avatar KevinZou avatar Pangolin avatar  avatar Viswanath avatar Pirlo avatar Matt Ma avatar Yao Xingqi avatar knight avatar Jacky avatar  avatar mookrs avatar wtsyn avatar 崔端午 avatar  avatar Akka avatar AC avatar  avatar

Watchers

 avatar  avatar

fabric-web's Issues

Failed to reach implicit threshold of 1 sub-policies, required 1 remaining

https://github.com/HuTu92/fabric-web/blob/3283f767a194e68fd4dd1f66f0889a8da06f2ce1/fabric-ca/eyfn_builder.sh#L126-L129

!!! 注意:如果使用fabric-ca-client enroll重新登记原组织的Admin身份,会报以下错误:

Error: got unexpected status: BAD_REQUEST -- error authorizing update: error validating DeltaSet: 
policy for [Group]  /Channel/Application not satisfied: Failed to reach implicit threshold of 1 sub-policies, required 1 remaining
Usage:
      peer channel update [flags]

所以这里我们通过scp直接从原有peer节点远程获取其Admin MSP

"JoinChain" request failed authorization check for channel [mychannel]

https://github.com/HuTu92/fabric-web/blob/3283f767a194e68fd4dd1f66f0889a8da06f2ce1/fabric-ca/peer-bootstrap.sh#L75

!!! 注意:这里peer如果重新获取管理员身份证书,则会导致setup节点获取的管理员身份证书无效,从而run节点使用(执行peer channel join)时会报如下错误:

Error: proposal failed (err: rpc error: code = Unknown desc = chaincode error (status: 500, message: "JoinChain" request failed authorization check for channel [mychannel]:
[Failed verifying that proposal's creator satisfies local MSP principal during channelless check policy with policy [Admins]: [This identity is not an admin]]))

所以这里我们通过scp直接从setup节点远程获取其Admin MSP

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.