2.6 Fabric生产网络--docker部署

3 个 orderer 节点;组织 org1 , org1 下有两个 peer 节点, peer0 和 peer1; 组织 org2 , org2 下有两个 peer 节点, peer0 和 peer1;

因为我只有 3 台虚拟机资源所以没法实现完全的多机部署,资源使用规划如下:

节点宿主机 IPhosts端口
cli192.168.0.105N/AN/A
orderer0192.168.88.105orderer0.example.com7050
orderer1192.168.88.105orderer1.example.com8050
orderer2192.168.88.105orderer2.example.com9050
org1-peer0192.168.88.109peer0.org1.example.com7051
org1-peer1192.168.88.109peer1.org1.example.com8051
org2-peer0192.168.88.110peer0.org2.example.com7051
org2-peer1192.168.88.110peer1.org2.example.com8051

1、生成身份文件

[root@localhost ~]# mkdir -p /etc/hyperledger/fabric
[root@localhost ~]# cd /etc/hyperledger/fabric

[root@localhost fabric]# wget https://github.com/hyperledger/fabric/releases/download/v2.4.1/hyperledger-fabric-linux-amd64-2.4.1.tar.gz
[root@localhost fabric]# tar -zxvf hyperledger-fabric-linux-amd64-2.4.1.tar.gz -C ./


[root@localhost fabric]# cd bin
[root@localhost bin]# ./cryptogen showtemplate > ../crypto-config.yaml

编辑crypto-config.yaml中信息,搭建一个 3order+2org网络

[root@localhost bin]# cd /etc/hyperledger/fabric/
[root@localhost fabric]# vi crypto-config.yaml


# ---------------------------------------------------------------------------
# "OrdererOrgs" - Definition of organizations managing orderer nodes
# ---------------------------------------------------------------------------
OrdererOrgs:
  # ---------------------------------------------------------------------------
  # Orderer
  # ---------------------------------------------------------------------------
  - Name: Orderer
    Domain: example.com
    EnableNodeOUs: true

    # ---------------------------------------------------------------------------
    # "Specs" - See PeerOrgs below for complete description
    # ---------------------------------------------------------------------------
    Specs:
      - Hostname: orderer0
      - Hostname: orderer1
      - Hostname: orderer2
        SANS:
          - "*"
          - "192.168.88.105"

# ---------------------------------------------------------------------------
# "PeerOrgs" - Definition of organizations managing peer nodes
# ---------------------------------------------------------------------------
PeerOrgs:
  # ---------------------------------------------------------------------------
  # Org1
  # ---------------------------------------------------------------------------
  - Name: Org1
    Domain: org1.example.com
    EnableNodeOUs: true

    Template:
      Count: 2
      # Start: 5
      # Hostname: {{.Prefix}}{{.Index}} # default
      # SANS:
      #   - "{{.Hostname}}.alt.{{.Domain}}"
      SANS:
        - "*"
        - "192.168.88.109"

    # ---------------------------------------------------------------------------
    # "Users"
    # ---------------------------------------------------------------------------
    # Count: The number of user accounts _in addition_ to Admin
    # ---------------------------------------------------------------------------
    Users:
      Count: 1

  # ---------------------------------------------------------------------------
  # Org2: See "Org1" for full specification
  # ---------------------------------------------------------------------------
  - Name: Org2
    Domain: org2.example.com
    EnableNodeOUs: false
    Template:
      Count: 2
      SANS:
        - "*"
        - "192.168.88.110"
    Users:
      Count: 1

生成身份

[root@localhost fabric]# mkdir crypto-config
[root@localhost fabric]# cd bin
[root@localhost bin]# ./cryptogen generate --config=../crypto-config.yaml --output=../crypto-config
org1.example.com
org2.example.com

将 crypto-config 目录拷贝到另外两台机器上:

[root@localhost bin]# cd ..
[root@localhost fabric]# scp -r crypto-config root@192.168.88.109:/usr/project/fabric-docker-multiple
[root@localhost fabric]# scp -r crypto-config root@192.168.88.110:/usr/project/fabric-docker-multiple
[root@localhost fabric]# cp -r crypto-config /usr/project/fabric-docker-multiple

2、生成排序节点的创世区块文件

根据config目录下的configtx.yaml生成

[root@localhost fabric]# cd config
[root@localhost config]# vi configtx.yaml


# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#

---
################################################################################
#
#   ORGANIZATIONS
#
#   This section defines the organizational identities that can be referenced
#   in the configuration profiles.
#
################################################################################
Organizations:
 
  # SampleOrg defines an MSP using the sampleconfig. It should never be used
  # in production but may be used as a template for other definitions.
  - &OrdererOrg
    # Name is the key by which this org will be referenced in channel
    # configuration transactions.
    # Name can include alphanumeric characters as well as dots and dashes.
    Name: OrdererOrg
 
    # SkipAsForeign can be set to true for org definitions which are to be
    # inherited from the orderer system channel during channel creation.  This
    # is especially useful when an admin of a single org without access to the
    # MSP directories of the other orgs wishes to create a channel.  Note
    # this property must always be set to false for orgs included in block
    # creation.
    SkipAsForeign: false
 
    # ID is the key by which this org's MSP definition will be referenced.
    # ID can include alphanumeric characters as well as dots and dashes.
    ID: OrdererMSP
 
    # MSPDir is the filesystem path which contains the MSP configuration.
    MSPDir: /usr/project/fabric-docker-multiple/crypto-config/ordererOrganizations/example.com/msp
 
    # Policies defines the set of policies at this level of the config tree
    # For organization policies, their canonical path is usually
    #   /Channel/<Application|Orderer>/<OrgName>/<PolicyName>
    Policies:
      Readers:
        Type: Signature
        Rule: "OR('OrdererMSP.member')"
        # If your MSP is configured with the new NodeOUs, you might
        # want to use a more specific rule like the following:
        # Rule: "OR('SampleOrg.admin', 'SampleOrg.peer', 'SampleOrg.client')"
      Writers:
        Type: Signature
        Rule: "OR('OrdererMSP.member')"
        # If your MSP is configured with the new NodeOUs, you might
        # want to use a more specific rule like the following:
        # Rule: "OR('SampleOrg.admin', 'SampleOrg.client')"
      Admins:
        Type: Signature
        Rule: "OR('OrdererMSP.admin')"
      Endorsement:
        Type: Signature
        Rule: "OR('OrdererMSP.member')"
 
    # OrdererEndpoints is a list of all orderers this org runs which clients
    # and peers may to connect to to push transactions and receive blocks respectively.
    OrdererEndpoints:
      - "orderer0.example.com:7050"
      - "orderer1.example.com:8050"
      - "orderer2.example.com:9050"
 
 
      # AnchorPeers defines the location of peers which can be used for
      # cross-org gossip communication.
      #
      # NOTE: this value should only be set when using the deprecated
      # `configtxgen --outputAnchorPeersUpdate` command. It is recommended
      # to instead use the channel configuration update process to set the
      # anchor peers for each organization.
      #AnchorPeers:
      #    - Host: 127.0.0.1
      #      Port: 7051
  - &Org1
 
    Name: Org1MSP
    ID: Org1MSP
    MSPDir: /usr/project/fabric-docker-multiple/crypto-config/peerOrganizations/org1.example.com/msp
    Policies:
      Readers:
        Type: Signature
        Rule: "OR('Org1MSP.admin', 'Org1MSP.peer', 'Org1MSP.client')"
      Writers:
        Type: Signature
        Rule: "OR('Org1MSP.admin', 'Org1MSP.client')"
      Admins:
        Type: Signature
        Rule: "OR('Org1MSP.admin')"
      Endorsement:
        Type: Signature
        Rule: "OR('Org1MSP.peer')"
    AnchorPeers:
      - Host: peer0.org1.example.com
        Port: 7051
 
 
  - &Org2
 
    Name: Org2MSP
    ID: Org2MSP
    MSPDir: /usr/project/fabric-docker-multiple/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')"
      Endorsement:
        Type: Signature
        Rule: "OR('Org2MSP.peer')"
    AnchorPeers:
      - Host: peer0.org2.example.com
        Port: 7051
 
 
################################################################################
#
#   CAPABILITIES
#
#   This section defines the capabilities of fabric network. This is a new
#   concept as of v1.1.0 and should not be utilized in mixed networks with
#   v1.0.x peers and orderers.  Capabilities define features which must be
#   present in a fabric binary for that binary to safely participate in the
#   fabric network.  For instance, if a new MSP type is added, newer binaries
#   might recognize and validate the signatures from this type, while older
#   binaries without this support would be unable to validate those
#   transactions.  This could lead to different versions of the fabric binaries
#   having different world states.  Instead, defining a capability for a channel
#   informs those binaries without this capability that they must cease
#   processing transactions until they have been upgraded.  For v1.0.x if any
#   capabilities are defined (including a map with all capabilities turned off)
#   then the v1.0.x peer will deliberately crash.
#
################################################################################
Capabilities:
  # Channel capabilities apply to both the orderers and the peers and must be
  # supported by both.
  # Set the value of the capability to true to require it.
  Channel: &ChannelCapabilities
    # V2.0 for Channel is a catchall flag for behavior which has been
    # determined to be desired for all orderers and peers running at the v2.0.0
    # level, but which would be incompatible with orderers and peers from
    # prior releases.
    # Prior to enabling V2.0 channel capabilities, ensure that all
    # orderers and peers on a channel are at v2.0.0 or later.
    V2_0: true
 
  # Orderer capabilities apply only to the orderers, and may be safely
  # used with prior release peers.
  # Set the value of the capability to true to require it.
  Orderer: &OrdererCapabilities
    # V1.1 for Orderer is a catchall flag for behavior which has been
    # determined to be desired for all orderers running at the v1.1.x
    # level, but which would be incompatible with orderers from prior releases.
    # Prior to enabling V2.0 orderer capabilities, ensure that all
    # orderers on a channel are at v2.0.0 or later.
    V2_0: true
 
  # Application capabilities apply only to the peer network, and may be safely
  # used with prior release orderers.
  # Set the value of the capability to true to require it.
  Application: &ApplicationCapabilities
    # V2.0 for Application enables the new non-backwards compatible
    # features and fixes of fabric v2.0.
    # Prior to enabling V2.0 orderer capabilities, ensure that all
    # orderers on a channel are at v2.0.0 or later.
    V2_0: true
 
################################################################################
#
#   APPLICATION
#
#   This section defines the values to encode into a config transaction or
#   genesis block for application-related parameters.
#
################################################################################
Application: &ApplicationDefaults
  ACLs: &ACLsDefault
    # This section provides defaults for policies for various resources
    # in the system. These "resources" could be functions on system chaincodes
    # (e.g., "GetBlockByNumber" on the "qscc" system chaincode) or other resources
    # (e.g.,who can receive Block events). This section does NOT specify the resource's
    # definition or API, but just the ACL policy for it.
    #
    # Users can override these defaults with their own policy mapping by defining the
    # mapping under ACLs in their channel definition
 
    #---New Lifecycle System Chaincode (_lifecycle) function to policy mapping for access control--#
 
    # ACL policy for _lifecycle's "CheckCommitReadiness" function
    _lifecycle/CheckCommitReadiness: /Channel/Application/Writers
 
    # ACL policy for _lifecycle's "CommitChaincodeDefinition" function
    _lifecycle/CommitChaincodeDefinition: /Channel/Application/Writers
 
    # ACL policy for _lifecycle's "QueryChaincodeDefinition" function
    _lifecycle/QueryChaincodeDefinition: /Channel/Application/Writers
 
    # ACL policy for _lifecycle's "QueryChaincodeDefinitions" function
    _lifecycle/QueryChaincodeDefinitions: /Channel/Application/Writers
 
    #---Lifecycle System Chaincode (lscc) function to policy mapping for access control---#
 
    # ACL policy for lscc's "getid" function
    lscc/ChaincodeExists: /Channel/Application/Readers
 
    # ACL policy for lscc's "getdepspec" function
    lscc/GetDeploymentSpec: /Channel/Application/Readers
 
    # ACL policy for lscc's "getccdata" function
    lscc/GetChaincodeData: /Channel/Application/Readers
 
    # ACL Policy for lscc's "getchaincodes" function
    lscc/GetInstantiatedChaincodes: /Channel/Application/Readers
 
    #---Query System Chaincode (qscc) function to policy mapping for access control---#
 
    # ACL policy for qscc's "GetChainInfo" function
    qscc/GetChainInfo: /Channel/Application/Readers
 
    # ACL policy for qscc's "GetBlockByNumber" function
    qscc/GetBlockByNumber: /Channel/Application/Readers
 
    # ACL policy for qscc's  "GetBlockByHash" function
    qscc/GetBlockByHash: /Channel/Application/Readers
 
    # ACL policy for qscc's "GetTransactionByID" function
    qscc/GetTransactionByID: /Channel/Application/Readers
 
    # ACL policy for qscc's "GetBlockByTxID" function
    qscc/GetBlockByTxID: /Channel/Application/Readers
 
    #---Configuration System Chaincode (cscc) function to policy mapping for access control---#
 
    # ACL policy for cscc's "GetConfigBlock" function
    cscc/GetConfigBlock: /Channel/Application/Readers
 
    # ACL policy for cscc's "GetChannelConfig" function
    cscc/GetChannelConfig: /Channel/Application/Readers
 
    #---Miscellaneous peer function to policy mapping for access control---#
 
    # ACL policy for invoking chaincodes on peer
    peer/Propose: /Channel/Application/Writers
 
    # ACL policy for chaincode to chaincode invocation
    peer/ChaincodeToChaincode: /Channel/Application/Writers
 
    #---Events resource to policy mapping for access control###---#
 
    # ACL policy for sending block events
    event/Block: /Channel/Application/Readers
 
    # ACL policy for sending filtered block events
    event/FilteredBlock: /Channel/Application/Readers
 
  # Organizations lists the orgs participating on the application side of the
  # network.
  Organizations:
 
  # Policies defines the set of policies at this level of the config tree
  # For Application policies, their canonical path is
  #   /Channel/Application/<PolicyName>
  Policies: &ApplicationDefaultPolicies
    LifecycleEndorsement:
      Type: ImplicitMeta
      Rule: "MAJORITY Endorsement"
    Endorsement:
      Type: ImplicitMeta
      Rule: "MAJORITY Endorsement"
    Readers:
      Type: ImplicitMeta
      Rule: "ANY Readers"
    Writers:
      Type: ImplicitMeta
      Rule: "ANY Writers"
    Admins:
      Type: ImplicitMeta
      Rule: "MAJORITY Admins"
 
  # Capabilities describes the application level capabilities, see the
  # dedicated Capabilities section elsewhere in this file for a full
  # description
  Capabilities:
    <<: *ApplicationCapabilities
 
################################################################################
#
#   ORDERER
#
#   This section defines the values to encode into a config transaction or
#   genesis block for orderer related parameters.
#
################################################################################
Orderer: &OrdererDefaults
 
  # Orderer Type: The orderer implementation to start.
  # Available types are "solo", "kafka" and "etcdraft".
  OrdererType: etcdraft
 
  # Addresses used to be the list of orderer addresses that clients and peers
  # could connect to.  However, this does not allow clients to associate orderer
  # addresses and orderer organizations which can be useful for things such
  # as TLS validation.  The preferred way to specify orderer addresses is now
  # to include the OrdererEndpoints item in your org definition
  Addresses:
    - "orderer0.example.com:7050"
    - "orderer1.example.com:8050"
    - "orderer2.example.com:9050"
 
  # Batch Timeout: The amount of time to wait before creating a batch.
  BatchTimeout: 2s
 
  # Batch Size: Controls the number of messages batched into a block.
  # The orderer views messages opaquely, but typically, messages may
  # be considered to be Fabric transactions.  The 'batch' is the group
  # of messages in the 'data' field of the block.  Blocks will be a few kb
  # larger than the batch size, when signatures, hashes, and other metadata
  # is applied.
  BatchSize:
 
    # Max Message Count: The maximum number of messages to permit in a
    # batch.  No block will contain more than this number of messages.
    MaxMessageCount: 500
 
    # Absolute Max Bytes: The absolute maximum number of bytes allowed for
    # the serialized messages in a batch. The maximum block size is this value
    # plus the size of the associated metadata (usually a few KB depending
    # upon the size of the signing identities). Any transaction larger than
    # this value will be rejected by ordering.
    # It is recommended not to exceed 49 MB, given the default grpc max message size of 100 MB
    # configured on orderer and peer nodes (and allowing for message expansion during communication).
    AbsoluteMaxBytes: 10 MB
 
    # Preferred Max Bytes: The preferred maximum number of bytes allowed
    # for the serialized messages in a batch. Roughly, this field may be considered
    # the best effort maximum size of a batch. A batch will fill with messages
    # until this size is reached (or the max message count, or batch timeout is
    # exceeded).  If adding a new message to the batch would cause the batch to
    # exceed the preferred max bytes, then the current batch is closed and written
    # to a block, and a new batch containing the new message is created.  If a
    # message larger than the preferred max bytes is received, then its batch
    # will contain only that message.  Because messages may be larger than
    # preferred max bytes (up to AbsoluteMaxBytes), some batches may exceed
    # the preferred max bytes, but will always contain exactly one transaction.
    PreferredMaxBytes: 2 MB
 
  # Max Channels is the maximum number of channels to allow on the ordering
  # network. When set to 0, this implies no maximum number of channels.
  MaxChannels: 0
 
  Kafka:
    # Brokers: A list of Kafka brokers to which the orderer connects. Edit
    # this list to identify the brokers of the ordering service.
    # NOTE: Use IP:port notation.
    Brokers:
      - kafka0:9092
      - kafka1:9092
      - kafka2:9092
 
  # EtcdRaft defines configuration which must be set when the "etcdraft"
  # orderertype is chosen.
  EtcdRaft:
    # The set of Raft replicas for this network. For the etcd/raft-based
    # implementation, we expect every replica to also be an OSN. Therefore,
    # a subset of the host:port items enumerated in this list should be
    # replicated under the Orderer.Addresses key above.
    Consenters:
      - Host: orderer0.example.com
        Port: 7050
        ClientTLSCert: /usr/project/fabric-docker-multiple/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/tls/server.crt
        ServerTLSCert: /usr/project/fabric-docker-multiple/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/tls/server.crt
      - Host: orderer1.example.com
        Port: 8050
        ClientTLSCert: /usr/project/fabric-docker-multiple/crypto-config/ordererOrganizations/example.com/orderers/orderer1.example.com/tls/server.crt
        ServerTLSCert: /usr/project/fabric-docker-multiple/crypto-config/ordererOrganizations/example.com/orderers/orderer1.example.com/tls/server.crt
      - Host: orderer2.example.com
        Port: 9050
        ClientTLSCert: /usr/project/fabric-docker-multiple/crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/server.crt
        ServerTLSCert: /usr/project/fabric-docker-multiple/crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/server.crt
 
    # Options to be specified for all the etcd/raft nodes. The values here
    # are the defaults for all new channels and can be modified on a
    # per-channel basis via configuration updates.
    Options:
      # TickInterval is the time interval between two Node.Tick invocations.
      TickInterval: 500ms
 
      # ElectionTick is the number of Node.Tick invocations that must pass
      # between elections. That is, if a follower does not receive any
      # message from the leader of current term before ElectionTick has
      # elapsed, it will become candidate and start an election.
      # ElectionTick must be greater than HeartbeatTick.
      ElectionTick: 10
 
      # HeartbeatTick is the number of Node.Tick invocations that must
      # pass between heartbeats. That is, a leader sends heartbeat
      # messages to maintain its leadership every HeartbeatTick ticks.
      HeartbeatTick: 1
 
      # MaxInflightBlocks limits the max number of in-flight append messages
      # during optimistic replication phase.
      MaxInflightBlocks: 5
 
      # SnapshotIntervalSize defines number of bytes per which a snapshot is taken
      SnapshotIntervalSize: 16 MB
 
  # Organizations lists the orgs participating on the orderer side of the
  # network.
  Organizations:
 
  # Policies defines the set of policies at this level of the config tree
  # For Orderer policies, their canonical path is
  #   /Channel/Orderer/<PolicyName>
  Policies:
    Readers:
      Type: ImplicitMeta
      Rule: "ANY Readers"
    Writers:
      Type: ImplicitMeta
      Rule: "ANY Writers"
    Admins:
      Type: ImplicitMeta
      Rule: "MAJORITY Admins"
    # BlockValidation specifies what signatures must be included in the block
    # from the orderer for the peer to validate it.
    BlockValidation:
      Type: ImplicitMeta
      Rule: "ANY Writers"
 
  # Capabilities describes the orderer level capabilities, see the
  # dedicated Capabilities section elsewhere in this file for a full
  # description
  Capabilities:
    <<: *OrdererCapabilities
 
################################################################################
#
#   CHANNEL
#
#   This section defines the values to encode into a config transaction or
#   genesis block for channel related parameters.
#
################################################################################
Channel: &ChannelDefaults
  # Policies defines the set of policies at this level of the config tree
  # For Channel policies, their canonical path is
  #   /Channel/<PolicyName>
  Policies:
    # Who may invoke the 'Deliver' API
    Readers:
      Type: ImplicitMeta
      Rule: "ANY Readers"
    # Who may invoke the 'Broadcast' API
    Writers:
      Type: ImplicitMeta
      Rule: "ANY Writers"
    # By default, who may modify elements at this config level
    Admins:
      Type: ImplicitMeta
      Rule: "MAJORITY Admins"
 
 
  # Capabilities describes the channel level capabilities, see the
  # dedicated Capabilities section elsewhere in this file for a full
  # description
  Capabilities:
    <<: *ChannelCapabilities
 
################################################################################
#
#   PROFILES
#
#   Different configuration profiles may be encoded here to be specified as
#   parameters to the configtxgen tool. The profiles which specify consortiums
#   are to be used for generating the orderer genesis block. With the correct
#   consortium members defined in the orderer genesis block, channel creation
#   requests may be generated with only the org member names and a consortium
#   name.
#
################################################################################
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

生成创世区块文件

----生成创世区块----
[root@iZvxsrs279dyskZ bin]# ./configtxgen --configPath ../config -profile TwoOrgsOrdererGenesis -channelID fabric-channel -outputBlock ../channel-artifacts/orderer.genesis.block
 
----生成通道文---
[root@iZvxsrs279dyskZ bin]# ./configtxgen -configPath ../config  -profile TwoOrgsChannel  -channelID businesschannel -outputCreateChannelTx ../channel-artifacts/businesschannel.tx
 
----生成两个组织的锚节点配置更新文件----
./configtxgen -configPath ../config  -profile TwoOrgsChannel -channelID businesschannel -asOrg Org1MSP -outputAnchorPeersUpdate ../channel-artifacts/Org1MSPanchors.tx
 
./configtxgen -configPath ../config  -profile TwoOrgsChannel -channelID businesschannel -asOrg Org2MSP -outputAnchorPeersUpdate ../channel-artifacts/Org2MSPanchors.tx
 
channel-artifacts/
├── businesschannel.tx
├── orderer.genesis.block
├── Org1MSPanchors.tx
└── Org2MSPanchors.tx

将 channel-artifacts 目录拷贝到另外两台机器上:

scp -r channel-artifacts/ root@192.168.88.109:/usr/project/fabric-docker-multiple/
scp -r channel-artifacts/ root@192.168.88.110:/usr/project/fabric-docker-multiple/
cp -r channel-artifacts/ /usr/project/fabric-docker-multiple/

3、部署 orderer 节点

编写 orderer 节点 docker-compose 文件


version: '2.0'

services:

    cli:
        image: hyperledger/fabric-tools:2.4.1
        restart: always
        container_name: fabric-cli
        hostname: fabric-cli
        tty: true
        extra_hosts:
            - "orderer0.example.com:192.168.88.105"
            - "orderer1.example.com:192.168.88.105"
            - "orderer2.example.com:192.168.88.105"
            - "peer0.org1.example.com:192.168.88.109"
            - "peer1.org1.example.com:192.168.88.109"
            - "peer0.org2.example.com:192.168.88.110"
            - "peer1.org2.example.com:192.168.88.110"
        environment:
            - CORE_PEER_ID=fabric-cli
            - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 # default to operate on peer0.org1
            - CORE_PEER_LOCALMSPID=Org1MSP
            - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
            - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
            - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
            - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
            - FABRIC_LOGGING_SPEC=DEBUG
            - FABRIC_LOGGING_FORMAT=%{color}[%{id:03x} %{time:01-02 15:04:05.00 MST}] [%{module}] %{shortfunc} -> %{level:.4s}%{color:reset} %{message}
            - CORE_PEER_TLS_ENABLED=true  # to enable TLS, change to true
            - ORDERER_CA=/etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
        volumes:
            - ./config/:/etc/hyperledger/fabric/
            - ./crypto-config:/etc/hyperledger/fabric/crypto-config
            - ./channel-artifacts:/tmp/channel-artifacts
            - ./chaincodes:/etc/hyperledger/fabric/chaincodes
        working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
        command: bash -c 'cd /tmp; source scripts/func.sh; while true; do sleep 20170504; done'


    orderer0.example.com:  # There can be multiple orderers
        image: hyperledger/fabric-orderer:2.4.1
        restart: always
        container_name: orderer0.example.com
        hostname: orderer0.example.com
        ports:
            - "7050:7050"
        extra_hosts:
            - "orderer0.example.com:192.168.88.105"
            - "orderer1.example.com:192.168.88.105"
            - "orderer2.example.com:192.168.88.105"
            - "peer0.org1.example.com:192.168.88.109"
            - "peer1.org1.example.com:192.168.88.109"
            - "peer0.org2.example.com:192.168.88.110"
            - "peer1.org2.example.com:192.168.88.110"
        environment:
            - FABRIC_LOGGING_FORMAT="%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}"
            - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 # default: 127.0.0.1
            - ORDERER_GENERAL_LISTENPORT=7050
            - ORDERER_GENERAL_GENESISMETHOD=file # default: provisional
            - ORDERER_GENERAL_BOOTSTRAPFILE=/etc/hyperledger/fabric/orderer.genesis.block # by default, all materials should be put under $FABRIC_CFG_PATH, which defaults to /etc/hyperledger/fabric
            - ORDERER_GENERAL_LOCALMSPID=OrdererMSP # default: DEFAULT
            - ORDERER_GENERAL_LOCALMSPDIR=/etc/hyperledger/fabric/msp
            - ORDERER_GENERAL_LEDGERTYPE=file
            #- ORDERER_GENERAL_LEDGERTYPE=json  # default: file
            - ORDERER_OPERATIONS_LISTENADDRESS=0.0.0.0:8443  # operation RESTful API
            - ORDERER_METRICS_PROVIDER=prometheus  # prometheus will pull metrics from orderer via /metrics RESTful API
            #- ORDERER_RAMLEDGER_HISTORY_SIZE=100  #only useful when use ram ledger
            # enabled TLS
            - ORDERER_GENERAL_TLS_ENABLED=true # default: false
            - ORDERER_GENERAL_TLS_PRIVATEKEY=/etc/hyperledger/fabric/tls/server.key
            - ORDERER_GENERAL_TLS_CERTIFICATE=/etc/hyperledger/fabric/tls/server.crt
            - ORDERER_GENERAL_TLS_ROOTCAS=[/etc/hyperledger/fabric/tls/ca.crt]
            # Only required by raft mode
            - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/etc/hyperledger/fabric/tls/server.key
            - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/etc/hyperledger/fabric/tls/server.crt
            - ORDERER_GENERAL_CLUSTER_ROOTCAS=[/etc/hyperledger/fabric/tls/ca.crt]
            - FABRIC_LOGGING_SPEC=DEBUG
        volumes:
            - ./crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp:/etc/hyperledger/fabric/msp
            - ./crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/tls/:/etc/hyperledger/fabric/tls
            - ./channel-artifacts/orderer.genesis.block:/etc/hyperledger/fabric/orderer.genesis.block
            - /var/hyperledger/production:/var/hyperledger/production
        expose:
            - "7050"  # gRPC
            - "8443"  # Operation REST
        command: orderer start

    orderer1.example.com:
        image: hyperledger/fabric-orderer:2.4.1
        restart: always
        container_name: orderer1.example.com
        hostname: orderer1.example.com
        ports:
            - "8050:7050"
        extra_hosts:
            - "orderer0.example.com:192.168.88.105"
            - "orderer1.example.com:192.168.88.105"
            - "orderer2.example.com:192.168.88.105"
            - "peer0.org1.example.com:192.168.88.109"
            - "peer1.org1.example.com:192.168.88.109"
            - "peer0.org2.example.com:192.168.88.110"
            - "peer1.org2.example.com:192.168.88.110"
        environment:
            - FABRIC_LOGGING_SPEC=DEBUG
            - FABRIC_LOGGING_FORMAT="%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}"
            - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 # default: 127.0.0.1
            - ORDERER_GENERAL_LISTENPORT=7050
            - ORDERER_GENERAL_GENESISMETHOD=file # default: provisional
            - ORDERER_GENERAL_BOOTSTRAPFILE=/etc/hyperledger/fabric/orderer.genesis.block # by default, all materials should be put under $FABRIC_CFG_PATH, which defaults to /etc/hyperledger/fabric
            - ORDERER_GENERAL_LOCALMSPID=OrdererMSP # default: DEFAULT
            - ORDERER_GENERAL_LOCALMSPDIR=/etc/hyperledger/fabric/msp
            - ORDERER_GENERAL_LEDGERTYPE=file
            #- ORDERER_GENERAL_LEDGERTYPE=json  # default: file
            - ORDERER_OPERATIONS_LISTENADDRESS=0.0.0.0:8443  # operation RESTful API
            - ORDERER_METRICS_PROVIDER=prometheus  # prometheus will pull metrics from orderer via /metrics RESTful API
            #- ORDERER_RAMLEDGER_HISTORY_SIZE=100  #only useful when use ram ledger
            # enabled TLS
            - ORDERER_GENERAL_TLS_ENABLED=true # default: false
            - ORDERER_GENERAL_TLS_PRIVATEKEY=/etc/hyperledger/fabric/tls/server.key
            - ORDERER_GENERAL_TLS_CERTIFICATE=/etc/hyperledger/fabric/tls/server.crt
            - ORDERER_GENERAL_TLS_ROOTCAS=[/etc/hyperledger/fabric/tls/ca.crt]
            # Only required by raft mode
            - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/etc/hyperledger/fabric/tls/server.key
            - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/etc/hyperledger/fabric/tls/server.crt
            - ORDERER_GENERAL_CLUSTER_ROOTCAS=[/etc/hyperledger/fabric/tls/ca.crt]
            - ORDERER_GENERAL_CLUSTER_SENDBUFFERSIZE=10
        volumes:
            - ./crypto-config/ordererOrganizations/example.com/orderers/orderer1.example.com/msp:/etc/hyperledger/fabric/msp
            - ./crypto-config/ordererOrganizations/example.com/orderers/orderer1.example.com/tls/:/etc/hyperledger/fabric/tls
            - ./channel-artifacts/orderer.genesis.block:/etc/hyperledger/fabric/orderer.genesis.block
            - /var/hyperledger/production:/var/hyperledger/production
        command: orderer start    


    orderer2.example.com:
        image: hyperledger/fabric-orderer:2.4.1
        restart: always
        container_name: orderer2.example.com
        hostname: orderer2.example.com
        ports:
            - "9050:7050"
        extra_hosts:
            - "orderer0.example.com:192.168.88.105"
            - "orderer1.example.com:192.168.88.105"
            - "orderer2.example.com:192.168.88.105"
            - "peer0.org1.example.com:192.168.88.109"
            - "peer1.org1.example.com:192.168.88.109"
            - "peer0.org2.example.com:192.168.88.110"
            - "peer1.org2.example.com:192.168.88.110"
        environment:
            - FABRIC_LOGGING_SPEC=DEBUG  # default: INFO
            - FABRIC_LOGGING_FORMAT="%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}"
            - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 # default: 127.0.0.1
            - ORDERER_GENERAL_LISTENPORT=7050
            - ORDERER_GENERAL_GENESISMETHOD=file # default: provisional
            - ORDERER_GENERAL_BOOTSTRAPFILE=/etc/hyperledger/fabric/orderer.genesis.block # by default, all materials should be put under $FABRIC_CFG_PATH, which defaults to /etc/hyperledger/fabric
            - ORDERER_GENERAL_LOCALMSPID=OrdererMSP # default: DEFAULT
            - ORDERER_GENERAL_LOCALMSPDIR=/etc/hyperledger/fabric/msp
            - ORDERER_GENERAL_LEDGERTYPE=file
            #- ORDERER_GENERAL_LEDGERTYPE=json  # default: file
            - ORDERER_OPERATIONS_LISTENADDRESS=0.0.0.0:8443  # operation RESTful API
            - ORDERER_METRICS_PROVIDER=prometheus  # prometheus will pull metrics from orderer via /metrics RESTful API
            #- ORDERER_RAMLEDGER_HISTORY_SIZE=100  #only useful when use ram ledger
            # enabled TLS
            - ORDERER_GENERAL_TLS_ENABLED=true # default: false
            - ORDERER_GENERAL_TLS_PRIVATEKEY=/etc/hyperledger/fabric/tls/server.key
            - ORDERER_GENERAL_TLS_CERTIFICATE=/etc/hyperledger/fabric/tls/server.crt
            - ORDERER_GENERAL_TLS_ROOTCAS=[/etc/hyperledger/fabric/tls/ca.crt]
            # Only required by raft mode
            - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/etc/hyperledger/fabric/tls/server.key
            - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/etc/hyperledger/fabric/tls/server.crt
            - ORDERER_GENERAL_CLUSTER_ROOTCAS=[/etc/hyperledger/fabric/tls/ca.crt]
            - ORDERER_GENERAL_CLUSTER_SENDBUFFERSIZE=10
        volumes:
            - ./crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/msp:/etc/hyperledger/fabric/msp
            - ./crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/:/etc/hyperledger/fabric/tls
            - ./channel-artifacts/orderer.genesis.block:/etc/hyperledger/fabric/orderer.genesis.block
            - /var/hyperledger/production:/var/hyperledger/production
        command: orderer start



启动/关闭orderer节点

docker-compose -f docker-compose-3orderer.yaml up -d
docker-compose -f docker-compose-3orderer.yaml down

1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
fabric-explorer的docker镜像可通过以下步骤安装和运行: 1. 首先,打开终端或命令提示符,并在浏览器中输入网址http://localhost:8080,以登录监视浏览器。 2. 接下来,在终端或命令提示符中输入以下命令来启动fabric-explorer的docker容器: ```shell echo "=========== Explorer start Installing ==============" # remove docker container docker rm -f explorer.mynetwork.com docker rm -f explorerdb.mynetwork.com # remove docker volumes docker volume rm artifacts_walletstore docker volume rm artifacts_pgdata # start up the docker container docker-compose up -d echo "=========== Explorer Successfully installed ==============" ``` 3. 之后,进入fabric-explorer的目录,并将fabric网络的crypto-config文件夹复制到该目录下。然后执行以下命令: ```shell cd fabric-explorer cp -R /path/to/crypto-config . touch docker-compose.yaml touch config.json touch connection-profile/test-network.json ``` 4. 最后,在终端或命令提示符中执行以下命令来启动fabric-explorer的docker容器: ```shell docker-compose up -d ``` 这样,fabric-explorer的docker镜像就成功安装并运行了。你可以通过访问http://localhost:8080来访问fabric-explorer,并使用以下登录凭据进行登录: - 用户名:admin - 密码:adminpw 请注意,上述的路径都是相对于docker容器的绝对路径,而不是容器外的路径。你需要根据自己的网络配置进行相应的调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Fabric-explorer 搭建](https://blog.csdn.net/weixin_41946008/article/details/124609204)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [fabric-explorer快速搭建(dockercompose)](https://blog.csdn.net/qq_21553301/article/details/116948043)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值