天天看點

CHFA - Install and Configure Network

内容清單

    • 考試涉及内容
    • 配置使用 couchDB
    • 定義多組織的啟動配置
      • 向 channel 中新加一個組織
    • 配置 raft 排序服務
    • 配置 Hyperledger Fabric 容器
    • 定義網絡配置選項(區塊建立選項等)
    • 啟用 TLS 通信
    • 生成 Genesis Block
    • 配置服務發現

考試涉及内容

Install and Configure Network25 %

  • Modify the world state database configuration
  • Define initial multi-org configuration policy
  • Configure Ordering service (Raft)
  • Configure Hyperledger Fabric containers
  • Define network config options (block creation options, etc)
  • Enable TLS for communication
  • Generate genesis block
  • Configure service discovery node (e.g. peer and orderer addresses)

配置使用 couchDB

參考《Using CouchDB》《CouchDB as the State Database》

可以使用

docker images

指令檢視本機是否有 CouchDB 的鏡像:

docker images hyperledger/fabric-couchdb
           

如果之前沒有下載下傳過 CouchDB 的鏡像的話,需要使用下邊的語句下載下傳 CouchDB 的鏡像:

docker pull hyperledger/fabric-couchdb
           

關于 CouchDB 的配置都是在

docker-compose.yaml

檔案中。

  • 添加關于 couchdDB 的容器的配置,包括容器名字,使用的鏡像名字,關于使用者名和密碼的環境變量的配置,端口以及網絡的配置
  • 關于使用 CouchDB 的相關節點的配置,包括将 CouchDB 的容器添加到

    depends_on

    中做為新的依賴,在環境變量中設定

    CORE_LEDGER_STATE_STATEDATABASE

    CouchDB

    ,并且設定

    CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS

    為對應的 CouchDB 的位址(容器名:端口)以及配置登入 CouchDB 的使用者名和密碼
  • 安裝并啟動好 CouchDB 之後,可以使用

    curl -X GET http://localhost:端口号

    的方式檢視 CouchDB 是否成功啟動

定義多組織的啟動配置

參考《Adding an Org to a Channel》

首先需要在

crypto-config.yaml

中添加新的組織的加密檔案配置,來為新的組織生成密鑰、證書等加密檔案。

然後需要在

docker-compose.yml

中添加新的組織對應的容器配置,注意修改相關的對外端口号,避免端口沖突。

最後需要在

configtx.yaml

中添加新的組織的配置資訊。

以上的操作都可以簡單的 copy paste 但是要注意修改對應的組織及節點名字。

向 channel 中新加一個組織

使用

cryptogen extend

來為剛剛配置的新組織生成加密檔案。

使用

configtxgen -printOrg

指令将新的組織的定義導出到 json 檔案。組織的定義包括:

  • 組織的政策(policy)定義
  • 組織的 NodeOU 定義
  • 兩個關鍵的證書:用來頒發證書的CA root 證書,用來進行網絡通信中 gossip 協定需要使用的 TLS root 證書

将新組織添加到 channel 的步驟比較繁瑣。

首先進入 cli 容器,使用

peer channel fetch

指令取回 channel 的 最新的配置區塊(config block)資訊 并存到一個 protobuf 二進制檔案。

然後使用

configtxlator proto_decode

将剛剛得到的 protobuf 檔案解碼成 json 檔案。

使用

jq

指令在原始的 config block json 中添加新的組織資訊。

使用

configtxlator proto_encode

指令将原始的變更後的 json 檔案編碼為 protobuf 檔案。

使用

configtxlator compute_update

指令計算出變化的部分(delta)的 protobuf 檔案。

使用

configtxlator proto_decode

指令将變化部分的 protobuf 檔案解碼為 json 檔案供下一步請求使用。

生成帶有 header 資訊的請求 json 檔案,然後使用

configtxlator proto_encode

指令生成最終要執行的 protobuf 檔案。

使用

peer channel signconfigtx

獲得所需要的組織的簽名(基于背書政策),最後要提供簽名的組織可以使用

peer channel update

簽名并更新 channel 的變動。

在 cli 容器中以新的組織身份登入(配置相關的環境變量),使用

peer channel fetch 0

取得第一個 genesis block。然後使用

peer channel join

将目前組織添加到 channel,可以使用

peer channel list

指令檢視所有加入的 channel 資訊。

然後可以根據安裝使用 chaincode 的加成為新的組織節點安裝 chaincode。

配置 raft 排序服務

參考《Configuring and operating a Raft ordering service》。

crypto-config.yaml

配置中的

OrdererOrgs

Specs

部分,包含所有 Raft 節點的資訊。

configtx.yaml

配置中的

Organizations

OrdererEndpoints

部分,配置所有 Raft 節點的 endpoint 資訊。并在

Orderer

部配置設定置 Raft 的

Address

Consenters

資訊。

docker-compose.yml

中配置所有 Raft 節點的容器配置資訊,并在相對應的 peer 節點以及 cli 的

depends_on

中添加 Raft 容器名字。

配置 Hyperledger Fabric 容器

容器的配置資訊都在

docker-compose.yml

檔案中。

定義網絡配置選項(區塊建立選項等)

啟用 TLS 通信

參考《Securing Communication With Transport Layer Security(TLS)》。

主要是更新

docker-composer.yml

檔案中的 TLS 配置資訊。

可以依據關鍵字,如

CORE_PEER_TLS_CERT_FILE

來查找其他文章中例子配置。

生成 Genesis Block

參考《configtxgen》

使用

configtxgen -output Block

指令将 genesis block 寫入到指定的 protobuf 檔案中。

配置服務發現

參考《Service Discovery CLI》

需要在

docker-compose.yml

中為每一個需要被發現的節點配置

CORE_PEER_GOSSIP_EXTERNALENDPOINT

的值。

在 cli 容器中,使用

discover

指令,通過添加

saveConfig

參數可以将相關的節點及資訊存儲到

--configFile

所指定的檔案當中。

生成配置檔案後,可以使用

discovery

+

peers

來查詢所有 peers 節點的資訊,使用

discovery

+

config

來查詢配置的資訊,使用

discovery

+

endorsers

來查詢背書相關配置資訊(需要用

--chaincode

來指定 chaincode 的名字)。