Fabric--启动网络手动
啟動網絡手動實現
實現步驟
生成組織關系和身份證書
確定是在 fabric-samples/first-network 路徑下
$ cd hyfa/fabric-samples/first-network/為fabric網絡生成指定拓撲結構的組織關系和身份證書
$ sudo ../bin/cryptogen generate --config=./crypto-config.yaml此命令依賴 crypto-config.yaml 配置文件
會有如下輸出:
org1.example.com org2.example.com證書和密鑰(即MSP材料)將被輸出到目錄 first-network/crypto-config 的目錄中
ordererOrganizations子目錄下包括構成Orderer組織(1個Orderer節點)的身份信息
peerOrganizations子目錄下為所有的Peer節點組織(2個組織, 4個節點)的相關身份信息. 其中最關鍵的是MSP目錄, 代表了實體的身份信息
crypto-config文件目錄結構如下
crypto-config
├── ordererOrganizations
│?? └── example.com
│?? ├── ca
│?? │?? ├── ca.example.com-cert.pem
│?? │?? └── df69b6d2aea8038270c5340d358bfe34eee039a8e16d4a849e67ec27a8ed53bd_sk
│?? ├── msp
│?? │?? ├── admincerts
│?? │?? │?? └── Admin@example.com-cert.pem
│?? │?? ├── cacerts
│?? │?? │?? └── ca.example.com-cert.pem
│?? │?? └── tlscacerts
│?? │?? └── tlsca.example.com-cert.pem
│?? ├── orderers
│?? │?? └── orderer.example.com
│?? │?? ├── msp
│?? │?? │?? ├── admincerts
│?? │?? │?? ├── cacerts
│?? │?? │?? ├── keystore
│?? │?? │?? ├── signcerts
│?? │?? │?? └── tlscacerts
│?? │?? └── tls
│?? │?? ├── ca.crt
│?? │?? ├── server.crt
│?? │?? └── server.key
│?? ├── tlsca
│?? │?? ├── 138f1cfd2708bca1e9e525773af410d46cef12736c3673ed787d7bbc38f013a4_sk
│?? │?? └── tlsca.example.com-cert.pem
│?? └── users
│?? └── Admin@example.com
│?? ├── msp
│?? │?? ├── admincerts
│?? │?? ├── cacerts
│?? │?? ├── keystore
│?? │?? ├── signcerts
│?? │?? └── tlscacerts
│?? └── tls
│?? ├── ca.crt
│?? ├── client.crt
│?? └── client.key
└── peerOrganizations
├── org1.example.com # 第一個組織的相關材料,每個組織會生成單獨的根證書
│?? ├── ca #存放組織的根證書和對應的私鑰文件,默認采用EC 算法,證書為自簽名。組織內的實體將基于該根證書作為證書根。
│?? │?? ├── 9b78dd1cc0570c9ef3f3fa31a1b343e7a6c0f157a2cc17f75412e12f2936898c_sk
│?? │?? └── ca.org1.example.com-cert.pem
│?? ├── msp # 存放代表該組織的身份信息
│?? │?? ├── admincerts # 組織管理員的身份驗證證書,被根證書簽名
│?? │?? │?? └── Admin@org1.example.com-cert.pem
│?? │?? ├── cacerts # 組織的根證書,同ca 目錄下文件
│?? │?? │?? └── ca.org1.example.com-cert.pem
│?? │?? ├── config.yaml
│?? │?? └── tlscacerts # :用于TLS 的CA 證書,自簽名
│?? │?? └── tlsca.org1.example.com-cert.pem
│?? ├── peers # 存放屬于該組織的所有Peer 節點
│?? │?? ├── peer0.org1.example.com # 第一個peer 的信息,包括其msp 證書和tls 證書兩類
│?? │?? │?? ├── msp
│?? │?? │?? │?? ├── admincerts # 組織管理員的身份驗證證書。Peer 將基于這些證書來認證交易簽署者是否為管理員身份
│?? │?? │?? │?? ├── cacerts # 存放組織的根證書
│?? │?? │?? │?? ├── config.yaml
│?? │?? │?? │?? ├── keystore # 本節點的身份私鑰,用來簽名
│?? │?? │?? │?? ├── signcerts # 驗證本節點簽名的證書,被組織根證書簽名
│?? │?? │?? │?? └── tlscacerts # TLS 連接用的身份證書,即組織TLS 證書
│?? │?? │?? └── tls # 存放tls 相關的證書和私鑰
│?? │?? │?? ├── ca.crt # 組織的根證書
│?? │?? │?? ├── server.crt # 驗證本節點簽名的證書,被組織根證書簽名
│?? │?? │?? └── server.key # 本節點的身份私鑰,用來簽名
│?? │?? └── peer1.org1.example.com # 第二個peer 的信息,與peer0.org1.example.com結構類似
│?? │?? ├── msp
│?? │?? │?? ├── admincerts
│?? │?? │?? ├── cacerts
│?? │?? │?? ├── config.yaml
│?? │?? │?? ├── keystore
│?? │?? │?? ├── signcerts
│?? │?? │?? └── tlscacerts
│?? │?? └── tls
│?? │?? ├── ca.crt
│?? │?? ├── server.crt
│?? │?? └── server.key
│?? ├── tlsca
│?? │?? ├── cf4587814bc05f9f81ac3d990c365660dedf1479e60f737c7e9e707727a27168_sk
│?? │?? └── tlsca.org1.example.com-cert.pem
│?? └── users # 存放屬于該組織的用戶的實體
│?? ├── Admin@org1.example.com # 管理員用戶的信息,包括其msp 證書和tls 證書兩類
│?? │?? ├── msp
│?? │?? │?? ├── admincerts # 管理身份驗證證書
│?? │?? │?? ├── cacerts # 存放組織的根證書
│?? │?? │?? ├── keystore # 本用戶的身份私鑰,用來簽名
│?? │?? │?? ├── signcerts # 管理員用戶的身份驗證證書,被組織根證書簽名。要被某個Peer認可,則必須放到該Peer 的msp/admincerts 下
│?? │?? │?? └── tlscacerts # TLS 連接用的身份證書,即組織TLS 證書
│?? │?? └── tls # 存放tls 相關的證書和私鑰
│?? │?? ├── ca.crt # 組織的根證書
│?? │?? ├── client.crt # 管理員的用戶身份驗證證書,被組織根證書簽名
│?? │?? └── client.key # 管理員用戶的身份私鑰,用來簽名
│?? └── User1@org1.example.com # 第一個用戶的信息,包括msp 證書和tls 證書兩類
│?? ├── msp
│?? │?? ├── admincerts # 管理身份驗證證書
│?? │?? ├── cacerts # 存放組織的根證書
│?? │?? ├── keystore # 本用戶的身份私鑰,用來簽名
│?? │?? ├── signcerts # 驗證本用戶簽名的身份證書,被組織根證書簽名
│?? │?? └── tlscacerts # TLS 連接用的身份證書,即組織TLS 證書
│?? └── tls # 存放tls 相關的證書和私鑰
│?? ├── ca.crt # 組織的根證書
│?? ├── client.crt # 驗證用戶簽名的身份證書,被組織根證書簽名
│?? └── client.key # 用戶的身份私鑰,用來簽名
└── org2.example.com # 第二個組織的信息,與org1.example.com結構類似
├── ca
│?? ├── 91fd76daf883a57066303fb6842ff4fb07c6793dbc8fbbca6303efea455884b2_sk
│?? └── ca.org2.example.com-cert.pem
├── msp
│?? ├── admincerts
│?? │?? └── Admin@org2.example.com-cert.pem
│?? ├── cacerts
│?? │?? └── ca.org2.example.com-cert.pem
│?? ├── config.yaml
│?? └── tlscacerts
│?? └── tlsca.org2.example.com-cert.pem
├── peers
│?? ├── peer0.org2.example.com
│?? │?? ├── msp
│?? │?? │?? ├── admincerts
│?? │?? │?? ├── cacerts
│?? │?? │?? ├── config.yaml
│?? │?? │?? ├── keystore
│?? │?? │?? ├── signcerts
│?? │?? │?? └── tlscacerts
│?? │?? └── tls
│?? │?? ├── ca.crt
│?? │?? ├── server.crt
│?? │?? └── server.key
│?? └── peer1.org2.example.com
│?? ├── msp
│?? │?? ├── admincerts
│?? │?? ├── cacerts
│?? │?? ├── config.yaml
│?? │?? ├── keystore
│?? │?? ├── signcerts
│?? │?? └── tlscacerts
│?? └── tls
│?? ├── ca.crt
│?? ├── server.crt
│?? └── server.key
├── tlsca
│?? ├── d3c3e6e37d306992bc9fb826415ed77971031418db48c195d5a24521916f32f3_sk
│?? └── tlsca.org2.example.com-cert.pem
└── users
├── Admin@org2.example.com
│?? ├── msp
│?? │?? ├── admincerts
│?? │?? ├── cacerts
│?? │?? ├── keystore
│?? │?? ├── signcerts
│?? │?? └── tlscacerts
│?? └── tls
│?? ├── ca.crt
│?? ├── client.crt
│?? └── client.key
└── User1@org2.example.com
├── msp
│?? ├── admincerts
│?? ├── cacerts
│?? ├── keystore
│?? ├── signcerts
│?? └── tlscacerts
└── tls
├── ca.crt
├── client.crt
└── client.key
Cryptogen 按照配置文件中指定的結構生成了對應的組織和密鑰、證書文件
其中最關鍵的是各個資源下的msp 目錄內容,存儲了生成的代表MSP 身份的各種證書文件,一般包括:
- admincerts :管理員的身份證書文件
- cacerts :信任的根證書文件
- key store :節點的簽名私鑰文件
- signcerts :節點的簽名身份證書文件
- tlscacerts: TLS 連接用的證書
- intermediatecerts (可選):信任的中間證書
- crls (可選):證書撤銷列表
- config.yaml (可選):記錄OrganizationalUnitldentifiers 信息,包括根證書位置和ID信息
這些身份文件隨后可以分發到對應的Orderer 節點和Peer 節點上,并放到對應的MSP路徑下,用于簽名使用
配置環境變量
告訴configtxgen工具在哪里尋找configtx.yaml 文件
$ export FABRIC_CFG_PATH=$PWD創建Ordering服務啟動初始區塊
指定使用 configtx.yaml 文件中定義的 TwoOrgsOrdererGenesis 模板, 生成Ordering服務系統通道的初始區塊文件
$ sudo ../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block命令執行后輸出如下:
10:49:21.181 CST [common/tools/configtxgen] main -> INFO 001 Loading configuration 10:49:21.207 CST [msp] getMspConfig -> INFO 002 Loading NodeOUs 10:49:21.208 CST [msp] getMspConfig -> INFO 003 Loading NodeOUs 10:49:21.210 CST [common/tools/configtxgen] doOutputBlock -> INFO 004 Generating genesis block 10:49:21.211 CST [common/tools/configtxgen] doOutputBlock -> INFO 005 Writing genesis block創建一個應用通道的配置交易
務必替換$CHANNEL_NAME或設置CHANNEL_NAME為可在整個說明中使用的環境變量
$ export CHANNEL_NAME=mychannel指定使用 configtx.yaml 配置文件中的 TwoOrgsChannel 模板, 來生成新建通道的配置交易文件, TwoOrgsChannel 模板指定了Org1和Org2都屬于后面新建的應用通道
$ sudo ../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME輸出如下
11:13:24.984 CST [common/tools/configtxgen] main -> INFO 001 Loading configuration 11:13:24.992 CST [common/tools/configtxgen] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx 11:13:24.993 CST [msp] getMspConfig -> INFO 003 Loading NodeOUs 11:13:24.994 CST [msp] getMspConfig -> INFO 004 Loading NodeOUs 11:13:25.016 CST [common/tools/configtxgen] doOutputChannelCreateTx -> INFO 005 Writing new channel tx生成錨節點配置更新文件
錨節點配置更新文件用來對組織的錨節點進行配置
同樣基于 configtx.yaml 配置文件生成新建通道文件, 每個組織都需要分別生成且注意指定對應的組織名稱
$ sudo ../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP$ sudo ../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP啟動網絡
$ sudo docker-compose -f docker-compose-cli.yaml up -d
-f: 指定docker-compose文件
注:
如果想查看網絡的實時日志,則不需要提供 -d 參數
CLI容器將閑置1000秒。如果在需要時它消失了,可以用一個簡單的命令重新啟動它:
? $ sudo docker start cli
網絡啟動順序: 首先啟動Orderer節點, 然后啟動Peer節點, 日志輸出如下:
...... orderer.example.com | 02:48:25.080 UTC [orderer/common/server] initializeServerConfig -> INFO 002 Starting orderer with TLS enabled orderer.example.com | 02:48:25.101 UTC [fsblkstorage] newBlockfileMgr -> INFO 003 Getting block information from block storage orderer.example.com | 02:48:25.138 UTC [orderer/commmon/multichannel] NewRegistrar -> INFO 004 Starting system channel 'testchainid' with genesis block hash 67662e918ab76b4a8863cc625d67fcc31e9cb3a7c3c4f9f707af1c05ba5be686 and orderer type solo orderer.example.com | 02:48:25.138 UTC [orderer/common/server] Start -> INFO 005 Starting orderer: ......Peer節點啟動后, 默認情況下沒有加入網絡中的任何應用通道, 也不會與Orderer服務建立連接.需要通過客戶端對其進行操作, 讓它加入網絡和指定的應用通道中
進入Docker容器
執行如下命令進入到CLI容器中(后繼操作都在容器中執行)
$ sudo docker exec -it cli bash如果成功, 命令提示符會變為如下內容:
? root@b240e1643244:/opt/gopath/src/github.com/hyperledger/fabric/peer#
創建通道
檢查環境變量是否正確設置
echo $CHANNEL_NAME設置環境變量
export CHANNEL_NAME=mychannel創建通道
peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem該命令自動在本地生成與該應用通道同名的初始區塊 mychannel.block, 只有擁有該文件才可以加入創建的應用通道中
參數說明:
-o: 指定Orderer服務的地址
-c: 指定創建的通道的名稱
-f: 指定通道配置交易文件所在路徑
–tls: 指定是否開啟TLS
–cafile: 指定MSP CA證書路徑
查看:
root@086adb802655:/opt/gopath/src/github.com/hyperledger/fabric/peer# ll total 36 drwxr-xr-x 5 root root 4096 Apr 29 03:34 ./ drwxr-xr-x 3 root root 4096 Apr 29 02:48 ../ drwxr-xr-x 2 root root 4096 Apr 29 02:47 channel-artifacts/ drwxr-xr-x 4 root root 4096 Apr 29 02:35 crypto/ -rw-r--r-- 1 root root 15660 Apr 29 03:34 mychannel.block drwxr-xr-x 2 root root 4096 Apr 29 02:13 scripts/加入通道
應用通道所包含組織的成員節點可以加入通道中
peer channel join -b mychannel.blockjoin命令: 將本Peer節點加入到某個應用通道中
參數含義
-b: 初始區塊文件的路徑信息
執行成功后, Peer連接到該應用通道的Ordering服務上, 開始接收區塊信息
更新錨點
使用Org1的管理員身份更新錨節點配置
peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem使用Org2的管理員身份更新錨節點配置
CORE_PEER_LOCALMSPID="Org2MSP" CORE_PEER_ADDRESS=peer0.org2.example.com:7051 CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org2MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem手動配置網絡完成, 可以測試Chaincode
切換為pee1.org1.example.com
CORE_PEER_ADDRESS=peer1.org1.example.com:7051
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt
總結
以上是生活随笔為你收集整理的Fabric--启动网络手动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Fabric--启动网络自动
- 下一篇: Fabric--测试链码