简单搭建Fabric网络

Fabric网络的搭建分为两个阶段:生成网络拓扑和启动网络。在这里,我们假设要搭建一个具有一个orderer节点和两个peer节点的Fabric网络。

在生成网络拓扑之前,需要准备好以下文件:

  • crypto-config.yaml:用于生成组织和节点的密钥和证书。

  • configtx.yaml:用于定义通道和配置块。

  • docker-compose.yaml:用于定义容器环境。

生成相关证书文件

启动Fabric需要生成相关的证书,通过cryptogen模块完成的,cryptogen模块会根据提供的配置文件生成需要的证书和数据文件。

cryptogen showtemplate

我们可以根据这个代码生成简单模板导入crypto-config.yaml文件,也可以参考官方案例文件。

在这里插入图片描述

这是上述命令生成的内容,修改一下如下代码

OrdererOrgs:
  - Name: Orderer
    Domain: example.com
    Specs:
      - Hostname: orderer
PeerOrgs:
  - Name: Org1
    Domain: org1.example.com
    Template:
      Count: 1
    Users:
      Count: 1
    Crypto:
      CertificateAuthorities:
        - Name: ca-org1
          CommonName: ca-org1.example.com
          Country: CN
          Province: Beijing
          Locality: Beijing
          OrganizationalUnit: org1
          StreetAddress: Xizhimenwai
          PostalCode: 100089
      PeerOrg1:
        Name: org1
        Domain: org1.example.com
        Template:
          Count: 1
        Users:
          Count: 1](OrdererOrgs:
  - Name: Orderer
    Domain: example.com
    Specs:
      - Hostname: orderer
PeerOrgs:
  - Name: Org1
    Domain: org1.example.com
    Template:
      Count: 1
    Users:
      Count: 1
    Crypto:
      CertificateAuthorities:
        - Name: ca-org1
          CommonName: ca-org1.example.com
          Country: CN
          Province: Beijing
          Locality: Beijing
          OrganizationalUnit: org1
          StreetAddress: Xizhimenwai
          PostalCode: 100089
      PeerOrg1:
        Name: org1
        Domain: org1.example.com
        Template:
          Count: 1
        Users:
          Count: 1


OrdererOrgs:
  - Name: Orderer
    Domain: example.com
    Specs:
      - Hostname: orderer
PeerOrgs:
  - Name: Org1
    Domain: org1.example.com
    Template:
      Count: 1
    Users:
      Count: 1
    Crypto:
      CertificateAuthorities:
        - Name: ca-org1
          CommonName: ca-org1.example.com
          Country: CN
          Province: Beijing
          Locality: Beijing
          OrganizationalUnit: org1
          StreetAddress: Xizhimenwai
          PostalCode: 100089
      PeerOrg1:
        Name: org1
        Domain: org1.example.com
        Template:
          Count: 1
        Users:
          Count: 1

OrdererOrgs: 指定Orderer组织的相关信息,包括名称、域名和节点信息。
Name: 组织名称,这里为Orderer。
Domain: 组织域名,这里为example.com。
Specs: Orderer节点信息。
Hostname: 节点主机名,这里为orderer。
PeerOrgs: 指定Peer组织的相关信息,包括名称、域名、节点数量、用户数量等。
Name: 组织名称,这里为Org1和Org2。
Domain: 组织域名,这里分别为org1.example.com和org2.example.com。
Template: Peer节点信息。
Count: 节点数量,这里为2。
Users: 用户数量,这里为1。

扫描二维码关注公众号,回复: 15253757 查看本文章

执行下面命令生成生成组织和节点的密钥和证书

cryptogen generate --config=crypto-config.yaml --output ./crypto-config

会新增加一个文件夹crypto-config,里面存放着本例的相关配置文件,可以通过tree命令查看生成证书文件的内容。
在这里插入图片描述

配置通道和创世区块

Fabric是基于区块链的分布式账本,每个账本都拥有自己的区块链,账本的区块链中会存储账本的交易数据,但账本区块链中的第一个区块是个例外,该区块不存储交易数据而是存储配置信息,通常将账本的第一个区块称为创始块。综上所述,Fabric中账本的第一个区块是需要手动生成的。configtxgen模块是专门负责生成系统的创始块和Channel。configtxgen模块也需要一个配置文件来定义相关的属性。

configtx.yaml文件用于配置Fabric网络的通道、组织、节点等信息。configtx.yaml文件内容:


# 指定了一些全局的定义,如证书的默认失效时间、Genesis块的默认时间戳等等
Organizations:
    # 定义了Orderer组织的参数
    - &OrdererOrg
        Name: OrdererOrg
        ID: OrdererMSP
        MSPDir: /etc/hyperledger/msp/orderer/msp
    # 定义了两个Peer组织的参数
    - &Org1
        Name: Org1MSP
        ID: Org1MSP
        MSPDir: /etc/hyperledger/msp/org1/msp
        AnchorPeers:
            # 定义了Org1组织的Anchor节点
            - Host: peer0.org1.example.com
              Port: 7051

    - &Org2
        Name: Org2MSP
        ID: Org2MSP
        MSPDir: /etc/hyperledger/msp/org2/msp
        AnchorPeers:
            # 定义了Org2组织的Anchor节点
            - Host: peer0.org2.example.com
              Port: 7051

# 定义了Orderer节点的配置参数,包括Orderer组织、共识类型、batch size等等
Orderer: &OrdererDefaults
    OrdererType: etcdraft
    Addresses:
        - orderer.example.com:7050
    BatchTimeout: 2s
    BatchSize:
        MaxMessageCount: 10
        AbsoluteMaxBytes: 99 MB
        PreferredMaxBytes: 512 KB
    EtcdRaft:
        Consenters:
        - Host: orderer.example.com
          Port: 7050
          ClientTLSCert: /etc/hyperledger/orderer/tls/server.crt
          ServerTLSCert: /etc/hyperledger/orderer/tls/server.crt

# 定义了Application节点的配置参数,包括Peer组织、背书策略、Anchor节点等等
Application: &ApplicationDefaults
    Organizations:

# 定义了一个新的Genesis块,包括了Orderer组织和两个Peer组织
Profiles:
    OneOrgOrdererGenesis:
        Orderer:
            <<: *OrdererDefaults
            Organizations:
                - *OrdererOrg
            Capabilities:
                <<: *OrdererCapabilities
        Consortiums:
            SampleConsortium:
                Organizations:
                    - *Org1
                    - *Org2
    # 定义了一个新的Channel,包括了两个Peer组织
    TwoOrgChannel:
        Consortium: SampleConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
                - *Org2
            Capabilities:
                <<: *ApplicationCapabilities

好的,继续说明:

  • Profiles:

    • TwoOrgsOrdererGenesis:这是Orderer节点的创世区块配置文件,包含了创世区块中需要的组织、Orderer节点信息和一些默认配置。

    • TwoOrgsChannel:这是通道的配置文件,包含了通道中需要的组织、Peer节点信息和一些默认配置。

  • Organizations:

    • Name:组织名称,这里定义了两个组织,一个为Orderer组织,一个为Peer组织。

    • ID:组织ID,这里定义了两个组织的ID。

    • MSPDir:MSP目录,这里定义了两个组织的MSP目录。

  • Orderer:

    • OrdererType:Orderer类型,这里定义了solo类型,即单节点Orderer。

    • Addresses:Orderer节点的地址列表,这里只有一个Orderer节点地址。

    • BatchTimeout:交易打包超时时间,单位为毫秒。

    • BatchSize:交易打包配置,包括最大交易数和最大字节数。

    • MaxChannels:最大通道数。

    • Organizations:Orderer组织的名称列表。

  • Application:

    • Organizations:应用组织的名称列表。
  • Capabilities:所支持的功能,这里只支持V1_4_2版本的功能。

  • Profiles(TwoOrgsOrdererGenesis):

    • Capabilities:配置文件所支持的功能,这里只支持V1_4_2版本的功能。

    • Orderer:Orderer的配置信息。

    • Consortiums:联盟配置信息,这里只有一个联盟。

  • Profiles(TwoOrgsChannel):

    • Capabilities:配置文件所支持的功能,这里只支持V1_4_2版本的功能。

    • Consortium:联盟名称。

    • Application:应用的配置信息,包含了应用组织的信息和Anchor Peer的信息。

    • Orderer:Orderer的配置信息。

    配置文件修改完成之后执行如下命令生成创始块文件。

configtxgen -profile TestTwoOrgsOrdererGenesis -outputBlock ./orderer. genesis.block

创建Channel的命令如下:

configtxgen -profile TestTwoOrgsChannel -outputCreateChannelTx ./roberttest channel.tx -channelID roberttestchannel

上述命令执行完成之后会在目录生成文件roberttestchannel.tx,该文件用来生成Channel。除此之外还需要生成相关的锚点文件,而生成锚点文件需要执行以下命令:

configtxgen -profile TestTwoOrgsChannel -outputAnchorPeersUpdate ./Org1MSPanchors. tx -channelID roberttestchannel -asOrg Org1MSP

configtxgen -profile TestTwoOrgsChannel -outputAnchorPeersUpdate ./Org2MSPanchors. tx -channelID roberttestchannel -asOrg Org2MSP

编写一个docker-compose.yaml其中定义了一个Orderer节点和两个Peer节点

version: '2'

networks:
  my-network:

services:
  orderer:
    image: hyperledger/fabric-orderer
    container_name: orderer.example.com
    environment:
      - ORDERER_GENERAL_LOGLEVEL=info
      - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
      - ORDERER_GENERAL_LISTENPORT=7050
      - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
      - ORDERER_GENERAL_GENESISMETHOD=file
      - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
      - ORDERER_GENERAL_TLS_ENABLED=false
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/orderer
    command: orderer
    volumes:
      - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
    ports:
      - 7050:7050
    networks:
      - my-network

  peer0.org1:
    container_name: peer0.org1.example.com
    image: hyperledger/fabric-peer
    environment:
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_LOGGING_PEER=info
      - CORE_PEER_LOCALMSPID=Org1MSP
      - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/peer/
      - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    command: peer node start
    ports:
      - 7051:7051
    volumes:
        - /var/run/:/host/var/run/
        - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/msp/peer
        - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls
    depends_on:
      - orderer
    networks:
      - my-network

  peer1.org1:
    container_name: peer1.org1.example.com
    image: hyperledger/fabric-peer
    environment:
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_LOGGING_PEER=info
      - CORE_PEER_LOCALMSPID=Org1MSP
      - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/peer/
      - CORE_PEER_ADDRESS=peer1.org1.example.com:7051
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    command: peer node start
    ports:
      - 8051:7051
    volumes:
        - /var/run/:/host/var/run/
        - ./crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/msp/peer
        - ./crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls
    depends_on:
      - orderer
    networks:
      - my-network

然后启动网络:docker-compose up -d
运行结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44507495/article/details/130540115
今日推荐