zoukankan      html  css  js  c++  java
  • Hyperledger Fabric相关文件解析

    1相关文件说明

    这一部分涉及相关配置文件的解析,
    网络的启动涉及到多个文件,本文按以下顺序进行分析:

    .
    ├── base
    │   ├── docker-compose-base.yaml   #1
    │   └── peer-base.yaml    #2
    ├── channel-artifacts   
    ├── configtx.yaml      #5
    ├── crypto-config.yaml
    ├── docker-compose-cli.yaml   #3
    ├── docker-compose-couch.yaml  #4
    ├── docker-compose-e2e-template.yaml    该文件中定义了fabric-ca的配置信息。我们这里用不到,会在讲解Fabric-Ca的文章中说明
    

    3.1 docker-compose-base.yaml文件详解

    先看一下文件内容:

    version: '2'     #docker版本
    
    services:        #服务,可以包括若干个容器实例
    
      orderer.example.com:     #定义一个名称为orderer.example.com的服务
        container_name: orderer.example.com    #当前容器名称
        extends:     #扩展,代表需要加载的文件或服务
          file: peer-base.yaml       
          service: orderer-base
        volumes:     #挂载的卷     [本机路径下的文件或目录]:[容器中所映射到的地址]
            #比如本机下的channel-artifacts/genesis.block文件可以在容器中/var/hyperledger/orderer/orderer.genesis.block访问
            - ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
            - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp
            - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls
            - orderer.example.com:/var/hyperledger/production/orderer
        ports:  #所映射的端口  [本机端口]:[容器端口]
          - 7050:7050
    
      peer0.org1.example.com:        #定义一个名称为peer0.org1.example.com的服务
        container_name: peer0.org1.example.com    #当前容器名称
        extends:   #同上
          file: peer-base.yaml
          service: peer-base
        environment:         #定义环境变量
          - CORE_PEER_ID=peer0.org1.example.com    #peer节点的id
          - CORE_PEER_ADDRESS=peer0.org1.example.com:7051    #peer节点的访问地址
          - CORE_PEER_LISTENADDRESS=0.0.0.0:7051     #peer节点的监听地址
          - CORE_PEER_CHAINCODEADDRESS=peer0.org1.example.com:7052   #peer节点的链码访问地址
          - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052  #peer节点的链码监听地址 指定为0.0.0.0则自动进行探测
          - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:8051 #gossip为共识机制
          - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051  #gossip外部节点,表明为锚节点
          - CORE_PEER_LOCALMSPID=Org1MSP
        volumes:   #同上,挂载卷
            - /var/run/:/host/var/run/
            - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp
            - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls
            - peer0.org1.example.com:/var/hyperledger/production
        ports:   #同上,端口
          - 7051:7051
    
      peer1.org1.example.com:
        container_name: peer1.org1.example.com
        extends:
          file: peer-base.yaml
          service: peer-base
          ...
          ...
    

    3.2 peer-base.yaml文件详解

    version: '2'
    
    services:
      peer-base:    #定义一个名称为peer-base的服务
        image: hyperledger/fabric-peer:$IMAGE_TAG    #该服务所依赖的镜像
        environment:       #定义环境变量
          - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
          - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_byfn     #定义网络工作模式,这里使用的是bridge方式
          - FABRIC_LOGGING_SPEC=INFO     #定义日志级别为INFO
          #- FABRIC_LOGGING_SPEC=DEBUG
          - CORE_PEER_TLS_ENABLED=true   #使用TLS
          - CORE_PEER_GOSSIP_USELEADERELECTION=true    #使用选举LEADER的方式
          - CORE_PEER_GOSSIP_ORGLEADER=false    #不指定LEADER
          - CORE_PEER_PROFILE_ENABLED=true     #使用profile
          - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt   #TLS证书路径
          - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key  #TLS密钥路径
          - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt #TLS根证书路径
        working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer   #工作目录,即进入容器所在的默认位置
        command: peer node start   #启动容器后所运行的第一条命令:启动Peer节点 
    
      orderer-base:      #定义一个名称为orderer-base的服务
        image: hyperledger/fabric-orderer:$IMAGE_TAG    #该服务所依赖的镜像
        environment:    #环境变量
          - FABRIC_LOGGING_SPEC=INFO  #日志级别
          - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0    #orderer的监听地址
          - ORDERER_GENERAL_GENESISMETHOD=file   # 创世区块文件的类型为file
          - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block   #创世区块在容器中的路径
          - ORDERER_GENERAL_LOCALMSPID=OrdererMSP   #Orderer的本地MSPid
          - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp  #本地Msp文件夹
          # enabled TLS
          - ORDERER_GENERAL_TLS_ENABLED=true   #使用TLS
          - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key   #TLS私钥路径
          - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt      #TLS证书路径
          - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]      #TLS根证书路径
          - ORDERER_KAFKA_TOPIC_REPLICATIONFACTOR=1   #以下为kafka集群的配置,本文中没有使用到
          - ORDERER_KAFKA_VERBOSE=true
          - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt
          - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key
          - ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
        working_dir: /opt/gopath/src/github.com/hyperledger/fabric    #工作目录,即进入容器所在的默认位置
        command: orderer  #启动容器后所运行的第一条命令:启动orderer
    

    3.3 docker-compose-cli.yaml文件详解

    version: '2'
    
    volumes:   #声明挂载的卷
      orderer.example.com:
      peer0.org1.example.com:
      peer1.org1.example.com:
      peer0.org2.example.com:
      peer1.org2.example.com:
    
    networks:   #声明一个名称为byfn的网络
      byfn:
    
    services:
    
      orderer.example.com:   #定义一个名称为orderer.example.com的服务
        extends:    #扩展,代表需要加载的文件或服务  即使用了其中的配置信息
          file:   base/docker-compose-base.yaml      
          service: orderer.example.com   
        container_name: orderer.example.com   #当前容器名称
        networks:      #指定当前容器所加入的网络,如果需要加入多个网络,可以定义多个
          - byfn
    
        #以下同上
      peer0.org1.example.com:    
        container_name: peer0.org1.example.com
        extends:
          file:  base/docker-compose-base.yaml
          service: peer0.org1.example.com
        networks:
          - byfn
    
      peer1.org1.example.com:
        container_name: peer1.org1.example.com
        extends:
          file:  base/docker-compose-base.yaml
          service: peer1.org1.example.com
        networks:
          - byfn
    
      peer0.org2.example.com:
        container_name: peer0.org2.example.com
        extends:
          file:  base/docker-compose-base.yaml
          service: peer0.org2.example.com
        networks:
          - byfn
    
      peer1.org2.example.com:
        container_name: peer1.org2.example.com
        extends:
          file:  base/docker-compose-base.yaml
          service: peer1.org2.example.com
        networks:
          - byfn
    
      cli:    #定义一个客户端容器,方便与各节点进行交互
        container_name: cli    #客户端容器名称
        image: hyperledger/fabric-tools:$IMAGE_TAG   #该服务所依赖的镜像
        tty: true     #使用伪终端
        stdin_open: true    #标准输入
        environment:     #环境变量
          - GOPATH=/opt/gopath        #指定go的路径
          - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
          #- FABRIC_LOGGING_SPEC=DEBUG
          - FABRIC_LOGGING_SPEC=INFO   #日志级别
          - CORE_PEER_ID=cli      #当前节点的Id
          - CORE_PEER_ADDRESS=peer0.org1.example.com:7051   #以下与peer-base.yaml相同,表示当前客户端容器默认与peer0.org1.example.com进行交互
          - CORE_PEER_LOCALMSPID=Org1MSP
          - CORE_PEER_TLS_ENABLED=true
          - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt    #TLS-peer0.org1.example.com的证书路径
          - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key  #TLS-peer0.org1.example.com的密钥路径
          - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt    #TLS-peer0.org1.example.com的根证书路径
          - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp  @#TLS-组织1中Admin的MSP路径
        working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer      #工作目录,即进入容器所在的默认位置
        command: /bin/bash     #启动容器后所运行的第一条命令:使用bash
        volumes:      #挂载卷
            - /var/run/:/host/var/run/
            - ./../chaincode/:/opt/gopath/src/github.com/chaincode
            - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
            - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
            - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
        depends_on:    #依赖,需要首先按顺序启动以下容器,但是不会等待以下容器完全启动才启动当前容器
          - orderer.example.com
          - peer0.org1.example.com
          - peer1.org1.example.com
          - peer0.org2.example.com
          - peer1.org2.example.com
        networks:      #指定当前容器所加入的网络
          - byfn
    

    3.4 docker-compose-couch.yaml文件详解

    在fabric网络中,可以使用默认的levelDb数据库,或者使用CouchDb,该文件主要是对CouchDb进行相关设置。

    version: '2'
    
    networks:  #声明一个名称为byfn的网络
      byfn:
    
    services:
      couchdb0:    #定义一个couchdb0的服务
        container_name: couchdb0    #指定该容器名称为couchdb0
        image: hyperledger/fabric-couchdb    #该容器所依赖的镜像
        environment:    #环境变量
          - COUCHDB_USER=        #couchdb0的用户名,这里设置为空,表明任何人都可登陆
          - COUCHDB_PASSWORD=     #couchdb0的登陆密码,这里设置为空
        ports:    #所映射的端口
          - "5984:5984"
        networks:    #使用的网络
          - byfn
    
      peer0.org1.example.com:    #定义一个peer0.org1.example.com的服务
        environment:
          - CORE_LEDGER_STATE_STATEDATABASE=CouchDB   #指定该服务使用的标准数据库为CouchDB
          - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984      #指定该服务使用的数据库访问地址
          - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= #配置数据库用户名
          - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=#配置数据库密码
        depends_on:      #表明该服务依赖于couchdb0
          - couchdb0
    
      couchdb1:      #以下同上
        container_name: couchdb1
        image: hyperledger/fabric-couchdb
       ...
       ...
    

    3.5 configtx.yaml文件详解

    该文件中定义了fabric网络中的相关策略信息,内容相对比较多,这里只讲解所用到的部分。

    Organizations:    #组织信息
        - &OrdererOrg   #配置orderer的信息
            Name: OrdererOrg    #定义名称
            ID: OrdererMSP        #定义ID
            MSPDir: crypto-config/ordererOrganizations/example.com/msp   #指定MSP的文件目录
            Policies:   #定义相关策略
                Readers:    #可读
                    Type: Signature      
                    Rule: "OR('OrdererMSP.member')"   #具体策略:允许OrdererMSP中所有member读操作
                Writers:    #可写
                    Type: Signature
                    Rule: "OR('OrdererMSP.member')"
                Admins:    #admin
                    Type: Signature
                    Rule: "OR('OrdererMSP.admin')"
    
        - &Org1       #配置组织一的信息
            Name: Org1MSP    #定义组织一的名称
            ID: Org1MSP      #定义组织一的ID
            MSPDir: crypto-config/peerOrganizations/org1.example.com/msp  #指定MSP的文件目录
            Policies:    #定义相关策略
                Readers:    #可读
                    Type: Signature
                    Rule: "OR('Org1MSP.admin', 'Org1MSP.peer', 'Org1MSP.client')"  #Org1MSP中的admin,peer,client均可进行读操作
                Writers:  #可写
                    Type: Signature
                    Rule: "OR('Org1MSP.admin', 'Org1MSP.client')"    #Org1MSP中的admin,client均可进行读操作
                Admins:    #同上
                    Type: Signature
                    Rule: "OR('Org1MSP.admin')"
            AnchorPeers:    #指定Org1的锚节点,只有锚节点可以与另一个组织进行通信
                - Host: peer0.org1.example.com      #指定Org1的锚节点的地址 
                  Port: 7051      #指定Org1的锚节点的端口
        - &Org2      #同上
            Name: Org2MSP
            ID: Org2MSP
            MSPDir: crypto-config/peerOrganizations/org2.example.com/msp
            Policies:
                Readers:
                    Type: Signature
                    Rule: "OR('Org2MSP.admin', 'Org2MSP.peer', 'Org2MSP.client')"
                Writers:
                    Type: Signature
                    Rule: "OR('Org2MSP.admin', 'Org2MSP.client')"
                Admins:
                    Type: Signature
                    Rule: "OR('Org2MSP.admin')"
            AnchorPeers:
                - Host: peer0.org2.example.com
                  Port: 9051
    Capabilities:      #这一区域主要是定义版本的兼容情况
        Channel: &ChannelCapabilities
            V1_3: true
        Orderer: &OrdererCapabilities
            V1_1: true
        Application: &ApplicationCapabilities
            V1_3: true
            V1_2: false
            V1_1: false
    Application: &ApplicationDefaults      #同上,定义具体的策略
        Organizations:
        Policies:
            Readers:
                Type: ImplicitMeta
                Rule: "ANY Readers"
            Writers:
                Type: ImplicitMeta
                Rule: "ANY Writers"
            Admins:
                Type: ImplicitMeta
                Rule: "MAJORITY Admins"
        Capabilities:
            <<: *ApplicationCapabilities
    ################################################################################
    #
    Orderer: &OrdererDefaults
        OrdererType: solo      #定义网络类型为solo
        Addresses:      #定义orderer的地址
            - orderer.example.com:7050
        BatchTimeout: 2s    #定义创建一个区块的超时时间
        BatchSize:
            MaxMessageCount: 10   #区块内最大消息数
            AbsoluteMaxBytes: 99 MB   #区块内消息所占的最大空间
            PreferredMaxBytes: 512 KB
        Organizations:
        Policies:
            Readers:
                Type: ImplicitMeta
                Rule: "ANY Readers"
            Writers:
                Type: ImplicitMeta
                Rule: "ANY Writers"
            Admins:
                Type: ImplicitMeta
                Rule: "MAJORITY Admins"
            BlockValidation:    #区块的验证策略
                Type: ImplicitMeta
                Rule: "ANY Writers"
    ################################################################################
    Channel: &ChannelDefaults
        Policies:
            Readers:   #定义谁可以调用交付区块的API
                Type: ImplicitMeta
                Rule: "ANY Readers"
            Writers:   #定义谁可以调用广播区块的API
                Type: ImplicitMeta
                Rule: "ANY Writers"
            Admins:  #定义谁可以修改配置信息
                Type: ImplicitMeta
                Rule: "MAJORITY Admins"
        Capabilities:
            <<: *ChannelCapabilities
    
    Profiles:
        TwoOrgsOrdererGenesis:
            <<: *ChannelDefaults
            Orderer:
                <<: *OrdererDefaults
                Organizations:
                    - *OrdererOrg
                Capabilities:
                    <<: *OrdererCapabilities
            Consortiums:
                SampleConsortium:
                    Organizations:
                        - *Org1
                        - *Org2
        TwoOrgsChannel:
            Consortium: SampleConsortium
            <<: *ChannelDefaults
            Application:
                <<: *ApplicationDefaults
                Organizations:
                    - *Org1
                    - *Org2
                Capabilities:
                    <<: *ApplicationCapabilities
    
  • 相关阅读:
    加入创业公司有什么利弊
    Find Minimum in Rotated Sorted Array II
    Search in Rotated Sorted Array II
    Search in Rotated Sorted Array
    Find Minimum in Rotated Sorted Array
    Remove Duplicates from Sorted Array
    Spiral Matrix
    Spiral Matrix II
    Symmetric Tree
    Rotate Image
  • 原文地址:https://www.cnblogs.com/cbkj-xd/p/11153080.html
Copyright © 2011-2022 走看看