ファブリック公式ドキュメント: https://hyperledger-fabric.readthedocs.io/en/release-2.2/
0.序文
前の概念とアーキテクチャの学習が完了したら、このセクションでは実用性にさらに重点を置き、実際の運用ネットワークを段階的に構築していきます。
1. cryptogen を使用して証明書ファイルを作成する
1.1 準備作業
まず、前のセクションでファブリック ネットワークをオフにすることを忘れないでください。その後、適切な場所に新しいフォルダーを作成して、ネットワークのセットアップを完了します。
./network.sh down
mkdir myfabric
cd myfabric
まず、CA を使用して ID を作成する必要がありますが、ここでは公式ドキュメントで提供されているコマンド cryptogen を使用します (合計 5 つのサブコマンドがあります)。
- ヘルプ
- 生成する
- テンプレートを表示
- 伸ばす
- バージョン
1.2 テンプレートの作成
showtemplate コマンドを使用して構成テンプレートを作成できます。
cryptogen showtemplate > crypto-config.yaml
注: このコマンドを使用する前に、fabric-samples の bin ディレクトリが環境ディレクトリにロードされていることを確認する必要があります。
VIM コマンドで開くと、次の図には、名前、ドメイン (ルート ドメイン名、ソート ノード組織のルート ドメイン名など) を含むソート ノードの関連構成情報が含まれています。実際の開発環境では、実際の登録済みドメイン名。テスト環境では、自分で作成できます。はい)、OU を構成するかどうか (OU は組織単位であり、単純に組織内の特別な人々のグループとして理解できます。構成されていない場合は、 MSP 内のすべての ID (ルート CA および中間 CA フォルダーによって指定される) は、組織のメンバーとみなされます)。ここで false を true に変更します。
同様に、下部にはピアノードの関連構成情報があり、ou も true に変更します。
このテンプレートでは、count は組織内に存在するノードの数を示します。ここでノードを選択します。
下部には組織 2 に関する情報があります。ここでも OU を true および open に変更します。
1.3 設定に従って証明書ファイルを生成する
cryptogenの生成コマンドを使用すると、コマンドの入力形式が確認できるので、必要に応じてコマンドを入力します。
cryptogen generate --config=crypto-config.yaml
生成後、ディレクトリ構造を表示し、構成ファイルで指定された証明書を生成できます。
2. チャンネルを作成する
チャネルを構築するには、fabric-samples の configtx.yaml モデルを使用します。
2.1 configtx.yaml をコピーする
cp コマンドを使用して、configtx.yaml を現在のフォルダーにコピーします。
cp ../fabric-samples/test-network/configtx/configtx.yaml ./
次に、構成ファイルを変更します。
すべての mspdir を正しいパスに変更します。
raft 関連のパスも変更する必要があります。
**注意:** バージョン 2.3 以降、最終的なプロファイルは少し異なります。前に構成したノード情報のドメインがデフォルトの example.com ではない場合は、ホスト値も変更する必要があります。
2.2 configtxgen を使用してチャネルとジェネシス ブロックを生成する
configtxgen コマンドの使用法を確認できます。
次のコマンドを使用してチャネルを作成します。
//创建创世块
configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block -channelID fabric-channel
//创建通道
configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
//创建锚节点
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP
作成後、ディレクトリ情報が表示され、ジェネシス ブロックとチャネルが作成されました。
**注意:** 「InspectChannelCreateTx でのエラー: org 'Org1MSP' にはアンカー ピアが定義されていません」というエラーが発生した場合は、今すぐ構成ファイルを再構成して以下を追加する必要があります。
AnchorPeers:
- Host: peer0.org2.yucoding.club
Port: 7051
3.ピアノードとソートノードの構成と展開
3.1 ノード動作環境:docker
ピア ノードとソート ノードはどちらも Docker コンテナ内で実行されるため、ノードを起動するには Docker が必要です。まず、docker 公式 Web サイトにアクセスして、ファブリック ピア イメージ内の開始ノードの導入を確認します。
docker の公式 Web サイト https://hub.docker.com/ にアクセスし、hyperledger プロジェクトを検索し、fabric-peer を見つけます。そこには非常に詳細な紹介が記載されています。必要な 3 つのポイントを見てみましょう。
- core.yamlは必須です
- mspファイル関連の設定
- TLS 関連の構成 (構成されている場合)
まず、必要な core.yaml を取得する必要があります。公式 Web サイトを確認したところ、幸運なことに core.yaml はファブリックに組み込まれており、デフォルト値が設定されていることがわかりました。特別な必要がなければ、追加で core.yaml の設定を記述する必要はありません。具体的なファイルの内容と構成分析は、次の Web サイトで参照できます。
https://github.com/hyperledger/fabric/blob/main/sampleconfig/core.yaml
**注:** ノードのデプロイメントにデフォルトの core.yaml を使用したくない場合。ノードの起動時にデフォルトの定義の一部をオーバーライドするには、Docker 起動構成ファイルを作成する必要があります。具体的な定義は次のとおりです。
- 環境変数は、関連するフレーズ間のすべての大文字、アンダースコア、接頭辞を使用して、core.yaml ファイル内のパラメーターから推測されます。たとえば、 というピア設定変数
peer.localMSPid
(localMSPid
可変peer
構造セクション内にある)はcore.yaml
、いわゆる 環境変数 としてレンダリングされ、一方、設定ファイルのセクション内のCORE_PEER_LOCALMSPID
順序付けサービス環境変数は、いわゆる 環境変数 としてレンダリングされます。変数。General.LocalMSPID
General
orderer.yaml
ORDERER_GENERAL_LOCALMSPID
3.2 デプロイメントコードを作成する
公式に提供されているファブリックサンプルの yaml ファイルに基づいて直接変更します。ファイルのリンクは次のとおりです。
https://github.com/hyperledger/fabric-samples/blob/main/test-network/docker/docker-compose-test-net.yaml
変更されたコードは次のとおりです。
# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
version: '2'
volumes:
orderer.yucoding.club:
peer0.org1.yucoding.club:
peer0.org2.yucoding.club:
cli1:
cli2:
networks: # 节点所属的网络
yzy_test:
services:
orderer.yucoding.club:
container_name: orderer.yucoding.club
image: hyperledger/fabric-orderer:latest
environment:
- FABRIC_LOGGING_SPEC=INFO
- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
- ORDERER_GENERAL_LISTENPORT=7050
- 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]
- ORDERER_ADMIN_LISTENADDRESS=0.0.0.0:7053
working_dir: /opt/gopath/src/github.com/hyperledger/fabric
command: orderer
volumes:
- ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
- ./crypto-config/ordererOrganizations/yucoding.club/orderers/orderer.yucoding.club/msp:/var/hyperledger/orderer/msp
- ./crypto-config/ordererOrganizations/yucoding.club/orderers/orderer.yucoding.club/tls/:/var/hyperledger/orderer/tls
- orderer.yucoding.club:/var/hyperledger/production/orderer #卷标挂载
ports:
- 7050:7050
- 7053:7053
networks:
- yzy_test
peer0.org1.yucoding.club:
container_name: peer0.org1.yucoding.club
image: hyperledger/fabric-peer:latest
environment:
#Generic peer variables
- 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=yzy_test
- FABRIC_LOGGING_SPEC=INFO
#- FABRIC_LOGGING_SPEC=DEBUG
- CORE_PEER_TLS_ENABLED=true
- 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
# Peer specific variabes
- CORE_PEER_ID=peer0.org1.yucoding.club
- CORE_PEER_ADDRESS=peer0.org1.yucoding.club:7051
- CORE_PEER_LISTENADDRESS=0.0.0.0:7051
- CORE_PEER_CHAINCODEADDRESS=peer0.org1.yucoding.club:7052
- CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.yucoding.club:7051
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.yucoding.club:7051
- CORE_PEER_LOCALMSPID=Org1MSP
volumes:
- /var/run/docker.sock:/host/var/run/docker.sock
- ./crypto-config/peerOrganizations/org1.yucoding.club/peers/peer0.org1.yucoding.club/msp:/etc/hyperledger/fabric/msp
- ./crypto-config/peerOrganizations/org1.yucoding.club/peers/peer0.org1.yucoding.club/tls:/etc/hyperledger/fabric/tls
- peer0.org1.yucoding.club:/var/hyperledger/production
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
command: peer node start
ports:
- 7051:7051
networks:
- yzy_test
peer0.org2.yucoding.club:
container_name: peer0.org2.yucoding.club
image: hyperledger/fabric-peer:latest
environment:
#Generic peer variables
- 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=yzy_test
- FABRIC_LOGGING_SPEC=INFO
#- FABRIC_LOGGING_SPEC=DEBUG
- CORE_PEER_TLS_ENABLED=true
- 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
# Peer specific variabes
- CORE_PEER_ID=peer0.org2.yucoding.club
- CORE_PEER_ADDRESS=peer0.org2.yucoding.club:7051
- CORE_PEER_LISTENADDRESS=0.0.0.0:7051
- CORE_PEER_CHAINCODEADDRESS=peer0.org2.yucoding.club:7052
- CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.yucoding.club:7051
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.yucoding.club:7051
- CORE_PEER_LOCALMSPID=Org2MSP
volumes:
- /var/run/docker.sock:/host/var/run/docker.sock
- ./crypto-config/peerOrganizations/org2.yucoding.club/peers/peer0.org2.yucoding.club/msp:/etc/hyperledger/fabric/msp
- ./crypto-config/peerOrganizations/org2.yucoding.club/peers/peer0.org2.yucoding.club/tls:/etc/hyperledger/fabric/tls
- peer0.org2.yucoding.club:/var/hyperledger/production
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
command: peer node start
ports:
- 9051:9051
networks:
- yzy_test
# 配置两个客户端节点1
cli1:
container_name: cli1
image: hyperledger/fabric-tools:latest
tty: true
stdin_open: true
environment:
- GOPATH=/opt/gopath
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- FABRIC_LOGGING_SPEC=INFO
- CORE_PEER_ADDRESS=peer0.org1.yucoding.club:7051
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_LOCALMSPID="Org1MSP"
# 根目录证书
- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.yucoding.club/peers/peer0.yucoding.club/tls/ca.crt
# 指定当前客户端的身份,用户的证书
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.yucoding.club/users/[email protected]/msp
# 私钥文件
- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.yucoding.club/peers/peer0.yucoding.club/tls/server.key
# 证书文件 这些文件对应的是客户端要连接peer节点的证书目录
- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.yucoding.club/peers/peer0.yucoding.club/tls/server.crt
# - FABRIC_LOGGING_SPEC=DEBUG
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
command: /bin/bash
volumes:
- /var/run/:/host/var/run/
- ./chaincode:/opt/gopath/src/github.com/chaincode
- ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
- ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
depends_on:
- peer0.org1.yucoding.club
networks:
- yzy_test
# 配置两个客户端节点2
cli2:
container_name: cli2
image: hyperledger/fabric-tools:latest
tty: true
stdin_open: true
environment:
- GOPATH=/opt/gopath
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- FABRIC_LOGGING_SPEC=INFO
- CORE_PEER_ADDRESS=peer0.org2.yucoding.club:9051
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_LOCALMSPID="Org2MSP"
# 根目录证书
- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.yucoding.club/peers/peer0.yucoding.club/tls/ca.crt
# 指定当前客户端的身份,用户的证书
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.yucoding.club/users/[email protected]/msp
# 私钥文件
- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.yucoding.club/peers/peer0.yucoding.club/tls/server.key
# 证书文件 这些文件对应的是客户端要连接peer节点的证书目录
- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.yucoding.club/peers/peer0.yucoding.club/tls/server.crt
#- FABRIC_LOGGING_SPEC=DEBUG
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
command: /bin/bash
volumes:
- /var/run/:/host/var/run/
- ./chaincode:/opt/gopath/src/github.com/chaincode
- ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
- ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
depends_on:
- peer0.org2.yucoding.club
networks:
- yzy_test
走る
docker-compose up -d
操作が成功したことを確認します