使用 IBM Blockchain Platform 映像檔

執行不同版本的 IBM Blockchain Platform? 切換至 2.1.22.1.32.5、2.5.1、 2.5.2

對於有經驗的 Hyperledger Fabric 客戶, IBM® Blockchain Platform 會為 IBM所簽署及支援的對等節點、CA、排序服務及智慧型合約容器提供映像檔。 這些映像檔是 Hyperledger Fabric v1.4.7 及 v2.x的商業發行套件。

相較於開放程式碼社群版本,使用這些映像檔的主要好處是 IBM 每天都會掃描開放程式碼的安全漏洞,以及讓映像檔與作業系統及漏洞修補程式保持最新。 此外, IBM 還為 24x7x365 提供適用於正式作業環境的 SLA 支援。 映像檔基於 Red Hat 通用基本映像檔 (UBI) ,且區塊鏈元件已啟用 HSM 支援。

IBM Blockchain Platform 映像檔可以透過 IBM Blockchain Platform 2.5.1 授權來購買。 映像檔與 IBM 的支援組合在一起。 雖然可以從 IBM Blockchain Platform 及 Hyperledger Fabric 社群版本配置包含元件 (CA、對等節點及排序節點) 的混合網路,但 IBM 支援僅限於 IBM Blockchain 元件。 IBM 不支援使用開放程式碼 Hyperledger Fabric Docker 映像檔部署的區塊鏈元件。

受支援的平台

IBM Blockchain 映像檔必須使用容器環境部署在 x86_64 或 s390x 硬體上。 請參閱 支援的平台清單。

雖然您可以在 Mac OS 上部署 IBM Blockchain 映像檔以進行測試,但 Mac OS 上的許可權可能會阻止您實例化智慧型合約。

支援的 Fabric 版本

IBM Blockchain Docker 映像檔是以 Hyperledger Fabric v1.4.9 和 v2.2.1為基礎。 您可以使用此文件來安裝及部署 IBM Blockchain Platform 2.5.1 所使用的最新 Fabric 版本。

如需支援的詳細資料,請參閱 我的支援 頁面。

考量及限制

映像檔不包括 IBM Blockchain Platform 主控台或操作員。 此供應項目適用於具有現有部署的經驗豐富的 Fabric 使用者。 如果您仍在探索 Hyperledger Fabric ,則可以開始使用 IBM Blockchain Platform ,適用於 IBM Cloud

授權與定價

IBM Blockchain Platform 映像檔可以透過 IBM Blockchain Platform 2.5.1 授權來購買。 購買平台之後,您可以存取 我的 IBM 儀表板 以取得授權金鑰。 然後,您可以使用授權金鑰,從「 IBM 授權登錄」下載映像檔。

如需映像檔定價的相關資訊,請參閱 定價 主題。

取得授權金鑰

當您向 PPA 購買 IBM Blockchain Platform 時,您會收到軟體與您的 MyIBM 帳戶相關聯的授權金鑰。 您需要存取並儲存此金鑰,才能部署平台。

  1. 使用與授權軟體相關聯的 IBMid 及密碼登入 MyIBM Container 軟體程式庫

  2. 在「授權金鑰」區段中,選取複製金鑰以將授權金鑰複製到剪貼簿。

下載 IBM Blockchain Platform 映像檔

平台建議您使用skopeo公用程式,以下載映像檔並將其複製到本端容器登錄。 斯科佩奧 是一種工具,用於在不同類型的容器儲存體之間移動容器映像檔。 若要下載平台映像檔並將它們複製到受防火牆保護的容器登錄,您首先需要 安裝 skopeo

在嘗試這些指示之前,您需要有可用的 IBM Blockchain Platform 授權金鑰及容器登錄使用者 ID 和密碼。 購買 IBM Blockchain Platform之後,您可以存取 我的 IBM 儀表板 ,以取得供應項目的授權金鑰。 然後,您可以使用此金鑰來存取 IBM Blockchain Platform 映像檔。

執行下列指令集,以下載映像檔並將它們推送至登錄。

取代

下列指令只能與 Docker 儲存器登錄搭配使用。 視映像檔目標位置所需的許可權層次而定,您可能需要在每一個指令前面加上字首sudo.

skopeo copy docker://cp.icr.io/cp/ibp-operator:2.5.1-20210112 docker://<LOCAL_REGISTRY>/ibp-operator:2.5.1-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-init:2.5.1-20210112 docker://<LOCAL_REGISTRY>/ibp-init:2.5.1-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-console:2.5.1-20210112 docker://<LOCAL_REGISTRY>/ibp-console:2.5.1-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-grpcweb:2.5.1-20210112 docker://<LOCAL_REGISTRY>/ibp-grpcweb:2.5.1-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-deployer:2.5.1-20210112 docker://<LOCAL_REGISTRY>/ibp-deployer:2.5.1-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-fluentd:2.5.1-20210112 docker://<LOCAL_REGISTRY>/ibp-fluentd:2.5.1-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-couchdb:2.3.1-20210112 docker://<LOCAL_REGISTRY>/ibp-couchdb:2.3.1-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-couchdb:3.1.0-20210112 docker://<LOCAL_REGISTRY>/ibp-couchdb:3.1.0-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-peer:1.4.9-20210112 docker://<LOCAL_REGISTRY>/ibp-peer:1.4.9-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-orderer:1.4.9-20210112 docker://<LOCAL_REGISTRY>/ibp-orderer:1.4.9-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-ca:1.4.9-20210112 docker://<LOCAL_REGISTRY>/ibp-ca:1.4.9-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-dind:1.4.9-20210112 docker://<LOCAL_REGISTRY>/ibp-dind:1.4.9-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-utilities:1.4.9-20210112 docker://<LOCAL_REGISTRY>/ibp-utilities:1.4.9-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-peer:2.2.1-20210112 docker://<LOCAL_REGISTRY>/ibp-peer:2.2.1-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-orderer:2.2.1-20210112 docker://<LOCAL_REGISTRY>/ibp-orderer:2.2.1-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-chaincode-launcher:2.2.1-20210112 docker://<LOCAL_REGISTRY>/ibp-chaincode-launcher:2.2.1-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-utilities:2.2.1-20210112 docker://<LOCAL_REGISTRY>/ibp-utilities:2.2.1-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-ccenv:2.2.1-20210112 docker://<LOCAL_REGISTRY>/ibp-ccenv:2.2.1-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-goenv:2.2.1-20210112 docker://<LOCAL_REGISTRY>/ibp-goenv:2.2.1-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-nodeenv:2.2.1-20210112 docker://<LOCAL_REGISTRY>/ibp-nodeenv:2.2.1-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-javaenv:2.2.1-20210112 docker://<LOCAL_REGISTRY>/ibp-javaenv:2.2.1-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-crdwebhook:2.5.1-20210112 docker://<LOCAL_REGISTRY>/ibp-crdwebhook:2.5.1-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-ccenv:1.4.9-20210112 docker://<LOCAL_REGISTRY>/ibp-ccenv:1.4.9-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-goenv:1.4.9-20210112 docker://<LOCAL_REGISTRY>/ibp-goenv:1.4.9-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-nodeenv:1.4.9-20210112 docker://<LOCAL_REGISTRY>/ibp-nodeenv:1.4.9-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-javaenv:1.4.9-20210112 docker://<LOCAL_REGISTRY>/ibp-javaenv:1.4.9-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all
skopeo copy docker://cp.icr.io/cp/ibp-enroller:2.5.1-20210112 docker://<LOCAL_REGISTRY>/ibp-enroller:2.5.1-20210112 -q --src-creds cp:<ENTITLEMENT_KEY> --dest-creds <LOCAL_REGISTRY_USER>:<LOCAL_REGISTRY_PASSWORD> --all

開始使用

若要部署及操作 IBM Blockchain 映像檔,您可以下載 Hyperledger 社群所提供的開放程式碼工具。 遵循 Hyperledger Fabric 文件中 安裝必備項目下載 Fabric 範例、二進位檔及配置檔 的步驟。 這些步驟也可以下載開放程式碼 Fabric 映像檔。

下載 Fabric 範例及二進位檔之後,您可以在中找到設定網路所需的配置檔及二進位檔fabric-samples\configANDfabric-samples\bin資料夾。 您也可以在中找到如何使用 Docker Compose 來設定網路的範例構件及 Script。fabric-samples\first-network目錄。 您可以閱讀隨附的 建置您的第一個網路 指導教學,以進一步瞭解這些構件以及涉及的步驟。

如果您使用開放程式碼配置檔,則需要進行下列變更來部署 IBM Blockchain 映像檔:

  1. 對於每一個元件,您需要變更image欄位以使用 IBM Blockchain 映像檔,而非開放程式碼映像檔。

  2. 您需要新增LICENSE欄位以接受 IBM 授權:

    LICENSE=accept
    
  3. 如果您要部署對等節點,則需要使用核心鏈碼變數來指示對等節點使用 IBM Blockchain 認證的映像檔來建置鏈碼。 例如,如果要使用 Go 鏈碼,則需要設定下列變數:

    CORE_CHAINCODE_NODE_RUNTIME=cp.icr.io/cp/ibp-nodeenv:1.4.9-20210112-amd64
    CORE_CHAINCODE_GOLANG_DYNAMICLINK=true
    
  4. 您需要裝載配置檔,core.yamlorderer.yaml,在節點儲存器內。 您也需要設定FABRIC_CFG_PATH環境變數至您裝載配置檔的路徑。

    如果您要部署對等節點,則需要註銷或移除PKCS11檔案的區段,除非您使用 HSM。 的區段core.yaml需要移除的項目如下:

    Settings for the PKCS#11 crypto provider (i.e. when DEFAULT: PKCS11)
    PKCS11:
        # Location of the PKCS11 module library
        Library:
        # Token Label
        Label:
        # User PIN
        Pin:
        Hash:
        Security:
        FileKeyStore:
          KeyStore:
    
  5. 基於安全理由, IBM Blockchain 映像檔需要與開放程式碼映像檔不同的資料存取許可權層次。 您需要變更裝載用於儲存組織 MSP 和 TLS 憑證的資料夾的存取權,以及裝載用於儲存分類帳資料的資料夾的存取權。 在容器內裝載這些資料夾之前,可以使用下列指令來變更對這些資料夾的存取權:

    chmod -R 777 <folder_name>
    

除了使用 Fabric 工具之外,您還可以使用中提供的工具ibp-utilities映像檔來操作您的網路。 公用程式映像檔包括 configtxlator、cryptogen 和 configtxgen 二進位檔。

配置 gRPC Web Proxy (選用)

如果您想要使用 IBM Blockchain Platform 主控台來管理節點,您可以部署 gRPC Web Proxy 實例,然後將它連接至您使用 IBM Blockchain 映像檔所部署的節點。 然後,您可以將節點匯入至使用 IBM Blockchain Platform 2.5.1 或 IBM Blockchain Platform for IBM Cloud所部署的主控台。 您需要為每一個節點部署個別的 Web Proxy。

若要部署 Proxy ,您需要在儲存器內設定下列環境變數。

LICENSE=accept
BACKEND_ADDRESS=<NODE_ENDPOINT_URL>
EXTERNAL_ADDRESS=<PROXY_ENDPOINT_URL>
SERVER_TLS_CERT_FILE=<TLS_CERTIFICATE>
SERVER_TLS_KEY_FILE=<TLS_KEY>
SERVER_TLS_CLIENT_CA_FILES=<ROOT_TLS_CERTIFICATE>
SERVER_BIND_ADDRESS=0.0.0.0
SERVER_HTTP_DEBUG_PORT=8080
SERVER_HTTP_TLS_PORT=7443
BACKEND_TLS=true
SERVER_HTTP_MAX_WRITE_TIMEOUT=5m
SERVER_HTTP_MAX_READ_TIMEOUT=5m
USE_WEBSOCKETS=true

主控台需要檢查匯入至主控台之任何節點的性能。 因此,您需要針對連接至 Web Proxy 的每個節點啟用作業服務。 如需相關資訊,請參閱 作業服務

部署 Web Proxy 儲存器之後,您可以透過建立節點 JSON 檔案,將節點匯入至主控台。 如需如何建立節點檔案的相關資訊,請參閱 從本端部署的網路匯入節點。 當您建立檔案時,需要使用下列值:

我們在下面提供的範例中使用 Docker Compose 來部署 Web Proxy 範例 。 雖然此範例不是在正式作業中部署 Web Proxy 的範本,但它可以用於其他環境定義,說明如何將 Proxy 連接至執行中節點。

範例

我們可以提供您需要進行的變更範例,方法是更新first-network範例: 執行 IBM Blockchain 映像檔,而非社群 Docker 映像檔。 此範例是針對環境定義而提供,不是用於部署正式作業網路的範本。

您需要更新peer-base.yamlANDdocker-compose-base.yaml位於fabric-samples/first-network/base資料夾。 您可以找到的排序節點區段peer-base.yaml如下所示:

orderer-base:
    image: hyperledger/fabric-orderer:$IMAGE_TAG
    environment:
        - FABRIC_LOGGING_SPEC=INFO
    - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
    - ORDERER_GENERAL_GENESISMETHOD=file
    - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
    - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
    - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
    # enabled TLS
    - 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]
    - ORDERER_KAFKA_TOPIC_REPLICATIONFACTOR=1
    - 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

若要使用 IBM Blockchain 映像檔來部署排序節點,請變更image欄位至 IBM Blockchain 映像檔的標籤,cp.icr.io/cp/ibp-orderer:1.4.9-20210112-amd64。若要接受授權,請新增下列欄位:LICENSE=accept。然後,您需要新增FABRIC_CFG_PATH環境變數,並將路徑設為您在其中裝載配置檔的資料夾。 設定working_dir變數至相同路徑。 變更之後,orderer 區段將類似於以下範例:

orderer-base:
    image: cp.icr.io/cp/ibp-orderer:1.4.9-20210112-amd64
    environment:
        - LICENSE=accept
    - FABRIC_CFG_PATH=/etc/hyperledger/fabric
    - FABRIC_LOGGING_SPEC=INFO
    - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
    - ORDERER_GENERAL_GENESISMETHOD=file
    - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
    - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
    - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
    # enabled TLS
    - 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]
    - ORDERER_KAFKA_TOPIC_REPLICATIONFACTOR=1
    - 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: /etc/hyperledger/fabric
    command: orderer

如果您要部署對等節點,則可以對的對等節點區段進行相同的變更peer-base.yaml檔案。 不過,您需要新增核心鏈碼變數,並指定您從 IBM 下載的映像檔作為鏈碼建置器及執行時期環境。 也需要設定DYNAMICLINK=true在您變更之後,對等節點區段將類似下列範例:

services:
  peer-base:
    image: cp.icr.io/cp/ibp-peer:1.4.9-20210112-amd64
    environment:
      - LICENSE=accept
      - FABRIC_CFG_PATH=/etc/hyperledger/fabric
      - CORE_CHAINCODE_BUILDER=cp.icr.io/cp/ibp-ccenv:1.4.9-20210112-amd64
      - CORE_CHAINCODE_GOLANG_RUNTIME=cp.icr.io/cp/ibp-goenv:1.4.9-20210112-amd64
      - CORE_CHAINCODE_NODE_RUNTIME=cp.icr.io/cp/ibp-nodeenv:1.4.9-20210112-amd64
      - CORE_CHAINCODE_GOLANG_DYNAMICLINK=true
      - CORE_CHAINCODE_NODE_DYNAMICLINK=true
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      # the following setting starts chaincode containers on the same
      # bridge network as the peers
      # https://docs.docker.com/compose/networking/
      - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_byfn
      - FABRIC_LOGGING_SPEC=INFO
      #- FABRIC_LOGGING_SPEC=DEBUG
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false
      - CORE_PEER_PROFILE_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
    working_dir: /etc/hyperledger/fabric
    command: peer node start

裝載至對等節點及排序節點容器的檔案指定於docker-compose-base.yaml檔案。 在volumes:區段,您可以新增下列行../../config:/etc/hyperledger/fabric以裝載對等節點及排序節點配置檔,這些配置檔位於fabric-samples目錄。 您需要移除PKCS11的區段fabric-samples/config/core.yaml檔案。 分類帳資料資料夾裝載於/var/hyperledger/production。我們需要將此路徑變更為現有資料夾,才能變更該資料夾的許可權。 在您變更之後,docker-compose-base.yaml對於排序節點及其中一個對等節點,如下所示:

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
      - ../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
      - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com:/var/hyperledger/production/orderer
      - ../../config:/etc/hyperledger/fabric
  ports:
- 7050:7050

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
    - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
    - CORE_PEER_LISTENADDRESS=0.0.0.0:7051
    - CORE_PEER_CHAINCODEADDRESS=peer0.org1.example.com:7052
    - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052
    - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:8051
    - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051
    - 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
      - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com:/var/hyperledger/production
      - ../../config:/etc/hyperledger/fabric
  ports:
    - 7051:7051

編輯檔案之後,您需要變更裝載用來儲存憑證及分類帳資料之資料夾的安全許可權。 您的對等節點 MSP 資料夾和 TLS 憑證都儲存在crypto-config執行時建立的資料夾./byfn.sh generate. 為了簡化部署,範例也會在此目錄中裝載資料夾,以儲存分類帳資料。 您可以執行下列指令來產生加密資料和資料夾,然後提供必要的許可權給那些資料夾:

./byfn.sh generate
chmod -R 777 crypto-config

如果您想要部署 raft 排序服務,則需要對docker-compose-etcdraft2.yaml您對訂單區段所做的檔案docker-compose-base.yaml您需要為每一個排序節點建立分類帳資料夾,並變更每一個資料夾的許可權。

更新相關檔案之後,您可以執行下列指令來測試是否可以部署映像檔:

sudo ./byfn.sh up -i 1.4.6

您可以使用此範例中提供的更新項目,在您選擇的環境中部署 IBM Blockchain 映像檔。 Hyperledger 社群發佈的 Fabric 範例僅預期用作範例。 不要將這些範例用作部署正式作業網路的範本。

部署 IBM Blockchain 憑證管理中心

Thefirst-network範例不使用「憑證管理中心」來部署網路。 不過,您可以在下面找到一個檔案,您可以使用該檔案來部署使用 Docker Compose的 IBM Blockchain 憑證管理中心。 如果您想要部署 CA 作為範例的一部分,則應該使用此檔案,而不是編輯docker-compose-ca.yaml中的檔案first-network目錄,它會使用現有加密資料來部署 CA。 將下列檔案儲存為docker-compose-ibm-ca.yaml:

version: '2'

networks:
  byfn:

services:

  ca-org1:
    image: cp.icr.io/cp/ibp-ca:1.4.9-20210112-amd64
    environment:
      - LICENSE=accept
      - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
      - FABRIC_CA_SERVER_CA_NAME=ca-org1
      - FABRIC_CA_SERVER_TLS_ENABLED=true
      - FABRIC_CA_SERVER_PORT=7054
    ports:
      - "7054:7054"
    command: sh -c 'fabric-ca-server start -b admin:adminpw -d'
    volumes:
      - fabric-ca-config:/etc/hyperledger/fabric-ca-server
    container_name: ca_org1

您需要在 CA 儲存器中裝載 Fabric CA 伺服器配置檔的副本。 建立名為的資料夾fabric-ca-config並將內部 光纖 CA 伺服器配置檔 的副本儲存為fabric-ca-server-config.yaml. 以您組織的相關資訊及 CA 的網域名稱來更新範例檔。 Docker Compose 檔案將使用此檔案來啟動 Fabric CA 伺服器,並將 CA 管理者的使用者名稱及密碼設為adminANDadminpw. 您可以在 Fabric CA 使用手冊中找到 Fabric CA 伺服器的相關資訊。 在您儲存之後docker-compose-ibm-ca.yaml以及配置檔,您可以使用下列指令來部署 CA:

docker-compose -f docker-compose-ibm-ca.yaml up

部署 CA 時,您可以使用 Fabric CA 用戶端或 Fabric SDK 來登錄新身分並產生憑證。 如需如何使用「憑證管理中心」來設定區塊鏈網路的相關資訊,請參閱 Fabric CA 作業手冊

部署 gRPC Web Proxy

部署網路之後,我們可以使用 gRPC Web Proxy 將對等節點或排序節點匯入至 IBM Blockchain Platform 主控台的實例。 假設您已下載 gRPC Web Proxy 映像檔,您可以使用下列指示來連接 Web Proxypeer0.org1.example.com.

  1. 您需要啟用對等節點的作業服務。 這將容許主控台在對等節點或排序節點連接至節點之前檢查其性能是否正常。 啟用的作業服務peer0.org1.example.com,將下列環境變數新增至peer0.org1.example.com區段docker-composer-base.yaml:

    - CORE_OPERATIONS_LISTENADDRESS=0.0.0.0:9443
    - CORE_OPERATIONS_TLS_ENABLED=false
    

    您也可能需要新增9443至同層級所公開的埠清單。

     ports:
     - 7051:7051
     - 9443:9443
    
  2. 您需要 TLS 憑證及金鑰,以保護主控台與節點之間的通訊安全。 建立您將用於 TLS 資料的資料夾,並切換至該目錄。

    mkdir peer0.org1-proxy-certs
    cd peer0.org1-proxy-certs
    

在後續步驟中,將在 gRPC Web Proxy 儲存器中裝載此資料夾。

  1. 在正式作業環境中,您將使用 TLS 憑證來保護部署環境的網域名稱。 在此範例中,我們將使用 OpenSSL 工具產生自簽憑證。

    • 使用下列指令來產生私密金鑰:
    openssl genrsa -out private.key 4096
    
    • 採取下列步驟,建立ssl.conf使用下列範本的檔案。 取代_default變數與您選擇的值。 使用alt_names區段,以提供叢集的網域。 此網域需要符合您將為 Web Proxy 選取的公用 URL。
    extensions = extend
    
    [extend] # openssl extensions
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid:always
    keyUsage = digitalSignature,keyEncipherment #Required by macOS Catalina
    extendedKeyUsage=serverAuth,clientAuth
    
    [ req ]
    default_bits       = 4096
    distinguished_name = req_distinguished_name
    req_extensions     = req_ext
    
    [ req_distinguished_name ]
    countryName                 = Country Name (2 letter code)
    countryName_default         = US
    stateOrProvinceName         = State or Province Name (full name)
    stateOrProvinceName_default = North Carolina
    localityName                = Locality Name (eg, city)
    localityName_default        = Durham
    organizationName            = Organization Name (eg, company)
    organizationName_default    = DevCorp
    commonName                  = Common Name (e.g. server FQDN or YOUR name)
    commonName_max              = 64
    commonName_default          = John Doe (development)
    
    [ req_ext ]
    subjectAltName = @alt_names
    
    [alt_names]
    DNS.1   = web_proxy.peer0.org1.example.com
    DNS.2   = *.example.com
    
    • 使用ssl.conf檔案及私密金鑰,以建立憑證簽署要求。 按一下 Enter 鍵以接受您使用提供的所有值_default變數。
    openssl req -new -sha256 -out private.csr -key private.key -config ssl.conf
    
    • 建立憑證:
    openssl x509 -req -sha256 -days 3650 -in private.csr -signkey private.key -out public.crt -extensions req_ext -extfile ssl.conf
    
  2. 除了 Proxy 使用的 TLS 憑證之外, Web Proxy 還需要對等節點或排序節點使用的公用 TLS 憑證。 請使用下列指令來複製peer0.org1.example.com將 TLS 憑證放入現行資料夾中。

    cp ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt ca.crt
    

複製 TLS 憑證之後,peer0.org1-proxy-certs應該包含對等節點 TLS 憑證及 Web Proxy TLS 憑證和金鑰:

   $ ls
   ca.crt        private.csr    private.key    public.crt    ssl.conf
  1. 切換回 BYFN 範例的主要目錄,並將 gRPC Web Proxy 映像檔的下列 Docker Compose 檔儲存為docker-compose-proxy:

     version: '2'
    
    networks:
     byfn:
    
    services:
     web_proxy.peer0.org1.example.com:
       container_name: web_proxy.peer0.org1.example.com
       image: cp.icr.io/cp/ibp-grpcweb:2.5.1-20210112-amd64
       environment:
         - LICENSE=accept
         - BACKEND_ADDRESS=peer0.org1.example.com:7051
         - EXTERNAL_ADDRESS=web_proxy.peer0.org1.example.com:8443
         - SERVER_TLS_CERT_FILE=/certs/tls/public.crt
         - SERVER_TLS_KEY_FILE=/certs/tls/private.key
         - SERVER_TLS_CLIENT_CA_FILES=/certs/tls/ca.crt
         - SERVER_BIND_ADDRESS=0.0.0.0
         - SERVER_HTTP_DEBUG_PORT=8080
         - SERVER_HTTP_TLS_PORT=8443
         - BACKEND_TLS=true
         - SERVER_HTTP_MAX_WRITE_TIMEOUT=5m
         - SERVER_HTTP_MAX_READ_TIMEOUT=5m
         - USE_WEBSOCKETS=true
       ports:
         - "8443:8443"
       volumes:
         - ./peer0.org1-proxy-certs:/certs/tls
       networks:
         - byfn
    

Docker Compose 檔案會裝載資料夾,我們會將 Web Proxy 儲存器中的 TLS 憑證儲存在名為的資料夾內certs/tls. 我們需要指定數個指向此資料夾內的憑證的重要環境變數:

  1. 在啟動 Proxy 之前,我們需要建立一個 JSON 檔案,用來將對等節點匯入至主控台。 將下列檔案儲存為peer0.org1.json

    {
        "name": "peer.org1.exaple.com",
    "grpcwp_url": "https://web_proxy.peer0.org1.example.com:8443",
    "api_url": "grpcs://peer0.org1.example.com:7051",
    "operations_url": "https://peer0.org1.example.com:9443",
    "type": "fabric-peer",
    "msp_id": "org1msp",
    "pem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNGekNDQWI2Z0F3SUJBZ0lVUi9zMGxGTG5ZNmdWRmV1Mlg5ajkrY3JDZFBrd0NnWUlLb1pJemowRUF3SXcKWFRFTE1Ba0dBMVVFQmhNQ1ZWTXhGekFWQmdOVkJBZ1REazV2Y25Sb0lFTmhjbTlzYVc1aE1SUXdFZ1lEVlFRSwpFd3RJZVhCbGNteGxaR2RsY2pFUE1BMEdBMVVFQ3hNR1JtRmljbWxqTVE0d0RBWURWUVFERXdWMGJITmpZVEFlCkZ3MHhPVEEyTVRBeE9USXhNREJhRncwek5EQTJNRFl4T1RJeE1EQmFNRjB4Q3pBSkJnTlZCQVlUQWxWVE1SY3cKRlFZRFZRUUlFdzVPYjNKMGFDQkRZWEp2YkdsdVlURVVNQklHQTFVRUNoTUxTSGx3WlhKc1pXUm5aWEl4RHpBTgpCZ05WQkFzVEJrWmhZbkpwWXpFT01Bd0dBMVVFQXhNRmRHeHpZMkV3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPClBRTUJCd05DQUFUYUtyN2srUHNYeXFkWkdXUHlJUXlGMGQxUkFFdmdCYlpkVnlsc3hReWZOcUdZS0FZV3A0SFUKVUVaVHVVNmtiRXN5Qi9aOVJQWEY0WVNGbW8reTVmSkhvMXd3V2pBT0JnTlZIUThCQWY4RUJBTUNBUVl3RWdZRApWUjBUQVFIL0JBZ3dCZ0VCL3dJQkFUQWRCZ05WSFE0RUZnUVUrcnBNb2dRc3dDTnZMQzJKNmp2cElQOExwaE13CkZRWURWUjBSQkE0d0RJY0VDUjc4YTRjRXJCRE5DakFLQmdncWhrak9QUVFEQWdOSEFEQkVBaUJGWmpMWU9XZUMKLy92L2RNMHdYNUxZT3NCaHFFNnNQZ1BSWWppOTZqT093QUlnZEppZDU0WmxjR2h0R3dEY3ZoZE02RVlBVFpQNwpmS29IMDZ3ZFhpK3VzVXM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
    "location": "mycluster"
    
    }
    

    請使用下列值來完成檔案:

    • "name": IBM Blockchain Platform 主控台中對等節點的顯示名稱。
    • "grpcwp_url": 您使用選取的 Web Proxy 的外部位址EXTERNAL_ADDRESS變數。
    • "api_url": 用戶端應用程式所使用的節點公用位址,指定在BACKEND_ADDRESS變數。
    • "operations_url": 針對作業服務開啟的 URL 及埠。 我們用的是CORE_OPERATIONS_LISTENADDRESS變數來指定作業服務將使用埠9443第一步 因此,主控台可以使用位址https://peer0.org1.example.com:9443來檢查我們同齡人的健康狀況
    • "type": 選取fabric-peer,fabric-orderer,或fabric-ca.
    • "msp_id": 操作節點之組織的 MSPID。
    • "location": 您選擇的位置。
    • "pem"以 Base64 格式編碼的節點 TLS 憑證。 我們已將對等節點 TLS 憑證複製到peer0.org1-proxy-cert資料夾。 我們可以使用下列指令來編碼憑證:
   export FLAG=$(if [ "$(uname -s)" == "Linux" ]; then echo "-w 0"; else echo "-b 0"; fi)
   cat peer0.org1-proxy-certs/ca.crt | base64 $FLAG
  1. 使用下列指令來啟動 Web Proxy:

    docker-compose -f docker-compose-proxy.yaml up
    

如果順利建立 Web Proxy ,您應該會在日誌中看到類似下列的訊息:

   web_proxy.peer0.org1.example.com    | time="2020-01-29T22:18:37Z" level=info msg="listening for http_tls on: [::]:8443"
   web_proxy.peer0.org1.example.com    | time="2020-01-29T22:18:37Z" level=info msg="listening for http on: [::]:8080"

現在您可以透過匯入主控台來檢視節點peer0.org1.json使用 IBM Blockchain Platform 2.5.1 將檔案部署至 IBM Cloud 或您自己的叢集上的 IBM Blockchain Platform 主控台。 為了讓主控台能夠存取您的節點, Web Proxy 的 URL、對等節點和作業 URL 需要可從外部存取。

您需要針對要匯入至 IBM Blockchain Platform 主控台實例的每一個節點完成這些步驟。

交互作業能力

使用 IBM Blockchain 映像檔部署的節點可以加入其他 IBM Blockchain 供應項目 (例如 IBM Blockchain Platform 2.5.1 和 IBM Blockchain Platform for IBM Cloud) 的通道。 除非您將 gRPC Web Proxy 實例連接至節點,否則無法使用主控台來操作映像檔。 您需要使用 Fabric 工具來加入使用主控台建立的現有頻道或建立新頻道。

升級至新版本

您可以將部署升級至最新版本的 IBM Blockchain 映像檔。 最新映像檔通常包含安全或穩定性改進,或使用更高版本 Hyperledger Fabric ,可讓您利用最新 Fabric 特性。 若要升級網路,您需要備份每個節點的分類帳和 MSP 資料,然後手動升級節點二進位檔。 如需升級使用 IBM Blockchain 映像檔所部署網路的相關資訊,請參閱 Hyperledger Fabric 文件中的 升級網路元件

取得支援

如果您遇到與 Hyperledger Fabric 或基礎映像檔相關的問題,則可以從 mysupport 頁面提交支援案例。 當您開立案例時,需要選取您的產品 IBM Blockchain Platform 2.5.1。

IBM 提供對 Hyperledger Fabric 程式碼相關問題的支援,或支援下載及部署可在本文件中找到之映像檔的步驟。 IBM 不支援與映像檔或基礎架構作業相關的問題。 因客戶環境的特定情況而導致的部署問題,由客戶負責調查。 如果您需要 Fabric 網路的部署及管理協助,請使用 IBM Blockchain Platform 2.5.1 供應項目。

您可以利用免費的區塊鏈開發人員資源和支援論壇來疑難排解問題,並從 IBM 和 Fabric 社群取得協助。 如需相關資訊,請參閱 資源及支援討論區