Hyperledger Fabric网络手工运行

作者: 冯宇Ops | 来源:发表于2018-05-27 22:09 被阅读15次

    在之前的文章我们已经介绍了快速在本地运行Fabric,以及介绍了Fabric的模型和工具。本次我们会手工运行Fabric的工具,手动搭建一个Fabric网络,来巩固和熟悉Fabirc。

    在开始搭建之前我们需要先提一下Fabric的身份认证。之前我们说过Fabric是支持安全认证的,而Fabric的安全认证则是通过PKI(Public Key Infrastructure)方式认证的。

    Fabric的PKI认证流程

    Fabric默认采用业界比较普遍的X.509协议证书,同时这也是ssl证书普遍采用的格式。这套PKI体系有以下四个关键要素:

    • 数字证书
    • 公钥私钥对
    • 认证中心(CA)
    • 证书吊销列表

    有关PKI体系的流程可以参考这篇文章。在整套PKI体系中,最重要的莫过于CA了,CA机构必须具有权威性和公正性,所以在Fabric网络中,直接内置了一个Fabric CA。但是注意,Fabirc CA是可选组件,你完全可以自建CA或者直接使用第三方可靠的CA。

    Fabric CA的使用方式参考官方文档

    动手自己搭建一个Fabric网络

    之前如果运行过官方的Sample的话,会以脚本的形式运行若干个docker容器,组建Fabric网络。但是没有什么比自己动手搭建更快上手的了。在了解了Fabric整个模型和运行方式之后,我们完全可以自己动手搭建一个Fabric网络。

    搭建CA与生成组织证书

    Fabric是联盟链的解决方案,在联盟链的成员中,必然存在组织这样的概念。要加入Fabric网络的组织必须有自己的身份标识。所以第一步我们必须为组织生成一个证书,用于确认身份以及加密通信。

    Fabric工具中就带一个cryptogen工具,用于快速批量生成组织证书。当然如果熟悉openssl的读者完全可以用openssl直接生成x.509格式的证书。

    /path/to/cryptogen showtemplate
    

    可以显示默认的证书模板,用于编写配置参考,这个配置文件也充满了大量的注释,帮助用户理解配置文件的含义。也可以直接把这个默认配置导出来在此基础之上修改:

    /path/to/cryptogen showtemplate > template.yml
    

    该工具使用的配置格式为yaml,一个简易的配置片段大致如下:

    OrdererOrgs:
      - Name: Orderer
        Domain: example.com
        Specs:
          - Hostname: orderer
    
    PeerOrgs:
      - Name: Org1
        Domain: org1.example.com
        EnableNodeOUs: false
    

    之前我们说过,Fabric网络中有三种节点Orderer,Peer,Client,这里就是直接生成OrderPeer节点配置的含义,每个OrdererOrgsPeerOrgs下面的list配置大致包含以下几个内容:

    • Name: 就是给组织起的名字
    • Domain: 组织的域名
    • Specs: 就是定义该组织下每个节点的信息,以list形式配置
      • Hostname(必选): 主机名
      • CommonName(可选): 用于覆盖X509证书中的CN配置的
      • SANS(可选): 其他x509证书中的Subject信息
    • Template: 定义模板,批量产生证书

    由于cryptogen工具默认带有一个模板配置文件,因此我们可以直接用它来产生一个Orderer组织,两个Peer组织的证书:

    $ cryptogen generate
    org1.example.com
    org2.example.com
    

    产生的证书位于crypto-config/目录下,直接用tree看看都产生了什么玩意吧:

    $ tree -L 3 crypto-config
    crypto-config
    ├── ordererOrganizations
    │   └── example.com
    │       ├── ca
    │       ├── msp
    │       ├── orderers
    │       ├── tlsca
    │       └── users
    └── peerOrganizations
        ├── org1.example.com
        │   ├── ca
        │   ├── msp
        │   ├── peers
        │   ├── tlsca
        │   └── users
        └── org2.example.com
            ├── ca
            ├── msp
            ├── peers
            ├── tlsca
            └── users
    
    20 directories, 0 files
    

    最后每个子目录下面就是具体的证书文件了,包含组织的证书,CA证书,管理员证书,以及用户证书等等。所有的身份都是通过PKI认证的。

    当然我们也可以通过使用自己的配置,指定证书产生的目录:

    $ /path/to/cryptogen generate --config=config.yml --output=/path/to/outdir
    

    创建交易配置

    第一次运行我们需要创建创世纪块,以后交易我们需要记录到区块中,这些功能都可以通过configtxgen这个工具来完成。

    这个工具就稍微有些繁琐了,首先这个工具必须在当前目录下找到一个名为configtx.yaml的配置文件,这个配置文件里面存放着各种各样的Profile。这个配置文件的格式可以参考源码的范例

    configtxgen每次执行的时候必须有一个-profile参数,指明使用configtx.yaml哪个profile,产生什么样的配置(比如创世纪块,交易配置,peer配置等等)。

    按照之前的Sample运行的命令,应该是这样:

    $ /path/to/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
    2018-05-27 21:28:28.501 CST [common/tools/configtxgen] main -> INFO 001 Loading configuration
    2018-05-27 21:28:28.522 CST [common/tools/configtxgen] doOutputBlock -> INFO 002 Generating genesis block
    2018-05-27 21:28:28.524 CST [common/tools/configtxgen] doOutputBlock -> INFO 003 Writing genesis block
    

    这条命令会在./channel-artifacts/目录下产生一个genesis.block创世纪块,注意./channel-artifacts/目录必须事先存在,否则会报错。

    交易的双方必须加入同一个channel,因此我们还需要产生一个channel配置:

    $ configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
    2018-05-27 21:32:10.966 CST [common/tools/configtxgen] main -> INFO 001 Loading configuration
    2018-05-27 21:32:10.978 CST [common/tools/configtxgen] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
    2018-05-27 21:32:11.050 CST [common/tools/configtxgen] doOutputChannelCreateTx -> INFO 003 Writing new channel tx
    

    按照终端日志输出,我们在./channel-artifacts/产生了一个channel.tx。我们可以分别用-inspectBlock参数和-inspectChannelCreateTx参数分别跟上这两个文件,打印出区块和channel的JSON配置信息。能看到正确的输出,说明创建成功了。

    启动节点

    其实这是我最想吐槽官方文档的地方,明知道应该用命令行工具peerorderer启动两种类型的节点,但是官方文档却只字不提。甚至peerorderer的命令行帮助文档也简略到看了也不知道怎么启动。

    目前在没有仔细研究官方Docker镜像的前提下,只能通过Docker启动orderer和Peer。

    $ docker-compose -f docker-compose-cli.yaml up
    

    这个docker-compose-cli.yaml文件存在于fabric-samples/first-network/文件夹中。

    好在官方比较良心的出了一个composer工具,否则光运行网络节点这些步骤绝对能让开发者敲桌。后续我们会逐步结合composer与官方文档的内容,讲述利用composer简化Fabric网络的搭建、测试、部署流程。

    相关文章

      网友评论

        本文标题:Hyperledger Fabric网络手工运行

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