手動でfabricネットワークを構築する

22953 ワード

手動でfabricネットワークを構築する
準備作業
1.ノードを起動する前にアカウントを生成する
  • クライアント
  • peerノード
  • ordererノード
  • 2.創始ブロックとチャネル情報をプロファイルに書き込み、創世ブロックとチャネルに必要なファイルを生成する
    3.docker-composeプロファイル
    ノードの操作
  • チャネルを作成し、以前に生成されたチャネルファイル
  • に基づいて
  • すべてのpeerノードをチャネルに追加する
  • 作成されたスマート契約をpeerノードに
  • インストール
  • チェーンコードの初期化
  • テスト->クライアント経由
  • 帳簿
  • を読む
  • 帳簿
  • を書く

    証明書ファイルの生成
    作業ディレクトリの作成
    プロファイルを指定したファイルにリダイレクト
    $ cryptogen showtemplate > crypto-config.yaml
    

    証明書テンプレートの編集
    # ---------------------------------------------------------------------------
    # "OrdererOrgs" - Definition of organizations managing orderer nodes
    # ---------------------------------------------------------------------------
    OrdererOrgs:  #    , orderer    
      # ---------------------------------------------------------------------------
      # Orderer
      # ---------------------------------------------------------------------------
      - Name: Orderer 	#     ,           
        Domain: example.com		#        ,             ,     
        Specs:	
          #     orderer     : orderer.example.com	
          - Hostname: orderer	#  orderer        ,      orderer
          #     orderer  : Hostname.Domain
    
    # ---------------------------------------------------------------------------
    # "PeerOrgs" - Definition of organizations managing peer nodes
    # ---------------------------------------------------------------------------
    PeerOrgs:	
      # ---------------------------------------------------------------------------
      # Org1
      # ---------------------------------------------------------------------------
      - Name: Org1		#    ,      
      	#       : Name.orderer   Domain
        Domain: org1.example.com	#          
        EnableNodeOUs: false		#                   config.yaml
        Template:		#   	
          Count: 3		#         peer     
          #   peer     : peer0, peer1 peer2
          #   peer       : peer0/1/2.     Domain
        Users:	
          Count: 10		#           
          #         : user0, user1, user2
          #  10           
          #              : admin
    
      # ---------------------------------------------------------------------------
      # Org2: See "Org1" for full specification
      # ---------------------------------------------------------------------------
      - Name: Org2
        Domain: org2.example.com
        EnableNodeOUs: false
        Template:
          Count: 1
        Users:
          Count: 1
    

    証明書ファイルの生成
    # cryptogen generate --config      
    $ cryptogen generate --config crypto-config.yaml
    

    創始ブロックファイルとチャネルファイルの生成
    yamlにおける変数の定義と使用
    定義#テイギ#
    - &OrdererOrg #      
    

    使用
    *OrdererOrg
    

    アンカーノード
    現在の組織を代表して他の組織と通信する通常のpeerノード、peer組織はすべてアンカーノードであり、アンカーノードは通常のノードのすべての機能を有し、他の組織と通信する機能が多くなっている.
    プロファイルの作成テンプレート
    #          
    Organizations:	 #    ,     
    	#       OrdererOrg
        - &OrdererOrg	
        	# Name ID      
            Name: OrdererOrg	# orderer     ,     ,            
            ID: OrdererMSP		# orderer   ID,    ,        ID  
            #   orderer       
            #        cryptogen     ,    crypto-config   
            #              ==             
            #       :    : msp
            MSPDir: crypto-config/ordererOrganizations/itcast.com/msp 
    
    	# go     
        - &OrgGo		
            Name: OrgGoMSP  #     ,          
            ID: OrgGoMSP	 
            #        
            MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
            #       
            AnchorPeers: 
            	#       peer       
                - Host: peer1.orggo.itcast.com 
                #        ,      
                # peer     docker   ,           7051
                  Port: 7051 
    
        - &OrgCpp
            Name: Org2MSP
            ID: Org2MSP
            MSPDir: crypto-config/peerOrganizations/org2.example.com/msp
            AnchorPeers:
                - Host: peer0.org2.example.com
                  Port: 7051
    
    ################################################################################
    #
    #   SECTION: Capabilities,  fabric1.1    ,           true
    #   
    ################################################################################
    Capabilities:
        Global: &ChannelCapabilities
            V1_1: true
        Orderer: &OrdererCapabilities
            V1_1: true
        Application: &ApplicationCapabilities
            V1_2: true
    
    ################################################################################
    #
    #   SECTION: Application
    #
    ################################################################################
    Application: &ApplicationDefaults
        Organizations:
    
    ################################################################################
    #
    #   SECTION: Orderer
    #
    ################################################################################
    Orderer: &OrdererDefaults	
        # Available types are "solo" and "kafka"
        #           
        OrdererType: solo	
        Addresses:	# orderer     
        	# orderer     docker   ,          7050
            - orderer.itcast.com:7050	
        #                ,         
        #             
        BatchTimeout: 2s
        BatchSize:
        	#          >=100,       
            MaxMessageCount: 100  
            #       >=99M   ,       
            AbsoluteMaxBytes: 99 MB   ==> 32M, 64M
            #        
            PreferredMaxBytes: 512 KB	
        #          solo,           
        Kafka:
            Brokers:
                - 127.0.0.1:9092 
        Organizations:
    
    ################################################################################
    #
    #   Profile
    #
    ################################################################################
    Profiles:	
    	#             
        Genesis:	#         ,                    
            Capabilities:
                <<: *ChannelCapabilities
            Orderer:
                <<: *OrdererDefaults
                Organizations:
                    - *OrdererOrg
                Capabilities:
                    <<: *OrdererCapabilities
            Consortiums:	#    ,    
                SampleConsortium:	#      ,    
                    Organizations:	#     peer  ,    ,    
                        - *OrgGo
                        - *OrgCpp
        #           
        Channel:	  #         ,                    
            Consortium: SampleConsortium	#  102      
            Application:
                <<: *ApplicationDefaults
                Organizations: 
                    - *OrgGo
                    - *OrgCpp
                Capabilities:
                    <<: *ApplicationCapabilities
    

    作成ブロックファイルの生成
    -profileの後のパラメータはconfigtx.yamlのProfilesの構成項目
    # -outputBlock:            
    # Genesis  configtx.yaml  profiles   
    configtxgen -profile Genesis -outputBlock genesis.block 
    

    チャネルファイルの生成
    # Channel  configtx.yaml  profiles   
    # outputCreateChannelTx:             
    # channelID:           ,       ,          : testchainid
    configtxgen -profile Channel -outputCreateChannelTx channel.tx -channelID itcastchannel
    

    アンカーノード更新ファイルの生成
    #                ,                
    #          peer         ,      
    #              ,         
    # -outputAnchorPeersUpdate:           
    # -asOrg:                 
    #   go      
    configtxgen -profile Channel -outputAnchorPeersUpdate goAnchor.tx -channelID itcastchannel -asOrg OrgGoMSP
    #   cpp      
    configtxgen -profile Channel -outputAnchorPeersUpdate cppAnchor.tx -channelID itcastchannel -asOrg OrgCppMSP
    

    docker-composeファイルの作成
    クライアントロールで使用する環境変数
    cliではttyがtrueを書くと1つの端末に関連付けられ、stdin_openがtrueを書くと標準入力が開きます
    - GOPATH=/opt/gopath	#     go     gopath  
    - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock	# docker        ,       
    - CORE_LOGGING_LEVEL=INFO	#          ,          ,    info
    - CORE_PEER_ID=cli	#         ,     
    #           ->   
    - CORE_PEER_ADDRESS=peer0.orggo.itcast.com:7051	#          peer     
    # configtx.yaml -> Organizations ->         ID
    - CORE_PEER_LOCALMSPID=OrgGoMSP	#    peer          ID
    - CORE_PEER_TLS_ENABLED=true	#             , true:   , false:    
    
    #         :
    # crypto-config/peerOrganizations/   peer        (    )/peers/    peer       /tls
    # tls     
    - 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
    #     
    - 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
    # ca   
    - 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
    
    #         ,              
    # crypto-config/peerOrganizations/   peer        (    )/users/        /msp
    - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/orggo.itcast.com/users/[email protected]/msp
    

    注意データボリュームを搭載する場合は、自分のディレクトリの位置に従ってマウントします.
    - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scrip    ts/
    

    これはスクリプトファイルを搭載しています.ここは手動で構築されているので、削除できます.
    1つはchannel-artifactsで、自分でディレクトリを作成し、創始ブロックファイル、チャネルファイル、アンカーノード更新ファイルをこのディレクトリに入れ、データボリュームのマウントが成功することを保証します.
    depends_onは依存関係であり,依存するノードが起動して起動する.
    ここではorggoのcliが生成されただけで、orgcppはまだなく、後でcli環境変数を変更する方法で操作を切り替えるノード
    ordererノードで使用する環境変数
    #     ,critical | error | warning | notice | info | debug,          
    # docker logs    /  ID
    - ORDERER_GENERAL_LOGLEVEL=INFO		# orderer      
    - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0	# orderer       
    #          ,      == file,           
    - ORDERER_GENERAL_GENESISMETHOD=file
    - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
    - ORDERER_GENERAL_LOCALMSPID=OrdererMSP	#   orderer        ID-> configtx.yaml
    #   orderer       
    - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
    - ORDERER_GENERAL_TLS_ENABLED=true	#           
    - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
    - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
    - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    

    データボリュームをロードするときも生成するcrypto-configの中からパスを探す
    peerノードで使用する環境変数
    - CORE_PEER_ID=peer1.org1.example.com	# peer     ,     ,          
    - CORE_PEER_ADDRESS=peer1.org1.example.com:7051	#   peer     
    #   ->  
    #            ,           
    - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:7051
    #          ,                 ,          
    - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051
    - CORE_PEER_LOCALMSPID=Org1MSP	#   peer       ID -> configtx.yaml