22

使用Docker Swarm部署Hyperledger Fabric | 凉都小道

 4 years ago
source link: https://ronggle.com/2019/hyperledger-fabric-on-swarm/?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

使用Docker Swarm部署Hyperledger Fabric

Written by Soi with ♥ on November 20, 2019 in Programming
hyperledger-fabric-on-swarm.svg

由于之前做过跟Hyperledger Fabric相关项目,虽然最终没能深入去探索其中更多的奥秘,但是对其有一点点的认识。最近有幸受前公司同事邀请,为他们交流分享Hyperledger Fabric,交流完成后,感觉自己也收获了不少。

什么是区块链?

从纯技术的角度来看,就是将一个个数据区块按照一定的顺序,将其连接起来;从业务现象来看,区块链网络的核心是就是分布式账本,记录了网络上发生的所有交易。

区块链的特性

  • 区中心化(分散式) 通常被描述为去中心化的,因为每一个参与者都具有相同的账本信息。

  • 协作 每个参与者共同协作来维护它,不是单一参与者说了算。

  • 不可篡改 区块链被设计为只可以追加,使用了加密技术来保证一旦将交易添加到账本中,就不能对其进行修改。

什么是Hyperledger Fabric?

Linux基金会于2015年创建了Hyperledger项目,以推进跨行业的区块链技术。Hyperledger Fabric是Hyperledger中的区块链项目之一。像其他区块链技术一样,它具有分类帐,使用智能合约,并且是参与者用来管理其交易的系统。Hyperledger Fabric与其他区块链系统最大的不同体现在私有和许可。

图片来源:https://www.hyperledger.org/wp-content/uploads/2019/10/HL_Greenhouse_Current_10.3.19.png

图片来源:https://www.hyperledger.org/wp-content/uploads/2019/10/HL_Greenhouse_Current_10.3.19.png

Hyperledger Fabric是一个(平台),提供分布式账本解决方案的平台,Hyperledger Fabric由模块化架构支撑,并具备极佳的保密性可伸缩性灵活性可扩展性,Hyperledger Fabric被设计成(模块直接插拔,适用多种场景),支持不同的模块组件直接拔插启用,并能适应在经济生态系统中错综复杂的各种场景。

Hyperledger Fabric的交易流程

图片来自网络

图片来自网络

更多关于Hyperledger Fabric的内容,可以查看官方文档以及官方文档翻译

怎么使用Hyperledger Fabric

以下内容基本上是交流时进行的实践步骤中涉及的配置和脚本,如果你想快捷体验,可以传送至后面

  • Docker
  • Docker Swarm
  • Hyperledger Fabric镜像

Hyperledger Fabric镜像

Docker安装,以及Docker Swarm初始化,如果你还不了解,那你可以先自行多吉或者必应一下。

这里我们需要拉取一下Hyperledger Fabric镜像,由于在2.0之前,Hyperledger Fabric镜像的体积都比较大,拉取比较慢,虽然现在2.0还处于alpha阶段,但是我们搭建一个是开发网络,是没有什么影响的。



  1. #!/usr/bin/env bash
  2. clear
  3. FABRIC_TAG=2.0
  4. function pullImages() {
  5. for image in peer orderer ccenv tools ca; do
  6. echo "Pull image hyperledger/fabric-$image:$FABRIC_TAG"
  7. docker pull hyperledger/fabric-"$image":"$FABRIC_TAG"
  8. sleep 1
  9. done
  10. }
  11. echo "Pull images for hyperledger fabric network."
  12. pullImages

创建Docker网络



  1. #!/usr/bin/env bash
  2. clear
  3. DOCKER_NETWORK_NAME=baas
  4. echo "Create docker network $DOCKER_NETWORK_NAME"
  5. docker network create --driver overlay --subnet=10.200.1.0/24 --attachable "$DOCKER_NETWORK_NAME"

准备Hyperledger Fabric网络配置

  • 网络成员加密材料配置

    1. # ---------------------------------------------------------------------------
    2. # "OrdererOrgs" - Definition of organizations managing orderer nodes
    3. # ---------------------------------------------------------------------------
    4. OrdererOrgs:
    5. # ---------------------------------------------------------------------------
    6. # Orderer
    7. # ---------------------------------------------------------------------------
    8. - Name: Orderer
    9. Domain: cloud-labs.io
    10. CA:
    11. Country: CN
    12. Province: Chongqing
    13. Locality: Chongqing
    14. # ---------------------------------------------------------------------------
    15. # "Specs" - See PeerOrgs below for complete description
    16. # ---------------------------------------------------------------------------
    17. Specs:
    18. - Hostname: orderer0
    19. - Hostname: orderer1
    20. - Hostname: orderer2
    21. - Hostname: orderer3
    22. - Hostname: orderer4
    23. # ---------------------------------------------------------------------------
    24. # "PeerOrgs" - Definition of organizations managing peer nodes
    25. # ---------------------------------------------------------------------------
    26. PeerOrgs:
    27. # ---------------------------------------------------------------------------
    28. # storage org for cloud-labs.io
    29. # ---------------------------------------------------------------------------
    30. - Name: storage
    31. Domain: storage.cloud-labs.io
    32. EnableNodeOUs: true
    33. CA:
    34. Country: CN
    35. Province: Chongqing
    36. Locality: Chongqing
    37. Template:
    38. Count: 1
    39. Users:
    40. Count: 1
    41. # ---------------------------------------------------------------------------
    42. # vhost org for cloud-labs.io
    43. # ---------------------------------------------------------------------------
    44. - Name: vhost
    45. Domain: vhost.cloud-labs.io
    46. EnableNodeOUs: true
    47. CA:
    48. Country: CN
    49. Province: Chongqing
    50. Locality: Chongqing
    51. Template:
    52. Count: 1
    53. Users:
    54. Count: 1
  • 网络初始化以及通道配置

    1. ---
    2. Organizations:
    3. - &cloudLabs
    4. Name: cloudLabs
    5. ID: cloudLabsMSP
    6. MSPDir: ./artifacts/crypto-config/ordererOrganizations/cloud-labs.io/msp
    7. Policies:
    8. Readers:
    9. Type: Signature
    10. Rule: "OR('cloudLabsMSP.member')"
    11. Writers:
    12. Type: Signature
    13. Rule: "OR('cloudLabsMSP.member')"
    14. Admins:
    15. Type: Signature
    16. Rule: "OR('cloudLabsMSP.admin')"
    17. - &storage
    18. Name: storage
    19. ID: storageMSP
    20. MSPDir: ./artifacts/crypto-config/peerOrganizations/storage.cloud-labs.io/msp
    21. Policies:
    22. Readers:
    23. Type: Signature
    24. Rule: "OR('storageMSP.admin', 'storageMSP.peer', 'storageMSP.client')"
    25. Writers:
    26. Type: Signature
    27. Rule: "OR('storageMSP.admin', 'storageMSP.client')"
    28. Admins:
    29. Type: Signature
    30. Rule: "OR('storageMSP.admin')"
    31. AnchorPeers:
    32. - Host: peer0.storage.cloud-labs.io
    33. Port: 7051
    34. - &vhost
    35. Name: vhost
    36. ID: vhostMSP
    37. MSPDir: ./artifacts/crypto-config/peerOrganizations/vhost.cloud-labs.io/msp
    38. Policies:
    39. Readers:
    40. Type: Signature
    41. Rule: "OR('vhostMSP.admin', 'vhostMSP.peer', 'vhostMSP.client')"
    42. Writers:
    43. Type: Signature
    44. Rule: "OR('vhostMSP.admin', 'vhostMSP.client')"
    45. Admins:
    46. Type: Signature
    47. Rule: "OR('vhostMSP.admin')"
    48. AnchorPeers:
    49. - Host: peer0.vhost.cloud-labs.io
    50. Port: 7051
    51. Capabilities:
    52. Channel: &ChannelCapabilities
    53. V1_3: true
    54. Orderer: &OrdererCapabilities
    55. V1_1: true
    56. Application: &ApplicationCapabilities
    57. V1_3: true
    58. V1_2: false
    59. V1_1: false
    60. Application: &ApplicationDefaults
    61. Organizations:
    62. Policies:
    63. Readers:
    64. Type: ImplicitMeta
    65. Rule: "ANY Readers"
    66. Writers:
    67. Type: ImplicitMeta
    68. Rule: "ANY Writers"
    69. Admins:
    70. Type: ImplicitMeta
    71. Rule: "MAJORITY Admins"
    72. Capabilities:
    73. <<: *ApplicationCapabilities
    74. Orderer: &OrdererDefaults
    75. OrdererType: etcdraft # solo, kafka
    76. EtcdRaft:
    77. Consenters:
    78. - Host: orderer0.cloud-labs.io
    79. Port: 7050
    80. ClientTLSCert: ./artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer0.cloud-labs.io/tls/server.crt
    81. ServerTLSCert: ./artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer0.cloud-labs.io/tls/server.crt
    82. - Host: orderer1.cloud-labs.io
    83. Port: 7050
    84. ClientTLSCert: ./artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer1.cloud-labs.io/tls/server.crt
    85. ServerTLSCert: ./artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer1.cloud-labs.io/tls/server.crt
    86. - Host: orderer2.cloud-labs.io
    87. Port: 7050
    88. ClientTLSCert: ./artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer2.cloud-labs.io/tls/server.crt
    89. ServerTLSCert: ./artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer2.cloud-labs.io/tls/server.crt
    90. - Host: orderer3.cloud-labs.io
    91. Port: 7050
    92. ClientTLSCert: ./artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer3.cloud-labs.io/tls/server.crt
    93. ServerTLSCert: ./artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer3.cloud-labs.io/tls/server.crt
    94. - Host: orderer4.cloud-labs.io
    95. Port: 7050
    96. ClientTLSCert: ./artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer4.cloud-labs.io/tls/server.crt
    97. ServerTLSCert: ./artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer4.cloud-labs.io/tls/server.crt
    98. Addresses:
    99. - orderer0.cloud-labs.io:7050
    100. - orderer1.cloud-labs.io:7050
    101. - orderer2.cloud-labs.io:7050
    102. - orderer3.cloud-labs.io:7050
    103. - orderer4.cloud-labs.io:7050
    104. BatchTimeout: 2s
    105. BatchSize:
    106. MaxMessageCount: 10
    107. AbsoluteMaxBytes: 99 MB
    108. PreferredMaxBytes: 512 KB
    109. Organizations:
    110. - *cloudLabs
    111. Policies:
    112. Readers:
    113. Type: ImplicitMeta
    114. Rule: "ANY Readers"
    115. Writers:
    116. Type: ImplicitMeta
    117. Rule: "ANY Writers"
    118. Admins:
    119. Type: ImplicitMeta
    120. Rule: "MAJORITY Admins"
    121. BlockValidation:
    122. Type: ImplicitMeta
    123. Rule: "ANY Writers"
    124. Channel: &ChannelDefaults
    125. Policies:
    126. # Who may invoke the 'Deliver' API
    127. Readers:
    128. Type: ImplicitMeta
    129. Rule: "ANY Readers"
    130. # Who may invoke the 'Broadcast' API
    131. Writers:
    132. Type: ImplicitMeta
    133. Rule: "ANY Writers"
    134. # By default, who may modify elements at this config level
    135. Admins:
    136. Type: ImplicitMeta
    137. Rule: "MAJORITY Admins"
    138. Capabilities:
    139. <<: *ChannelCapabilities
    140. Profiles:
    141. OrdererGenesis:
    142. <<: *ChannelDefaults
    143. Capabilities:
    144. <<: *ChannelCapabilities
    145. Orderer:
    146. <<: *OrdererDefaults
    147. Capabilities:
    148. <<: *OrdererCapabilities
    149. Application:
    150. <<: *ApplicationDefaults
    151. Organizations:
    152. - <<: *cloudLabs
    153. Consortiums:
    154. SeriesConsortium:
    155. Organizations:
    156. - *storage
    157. - *vhost
    158. SeriesChannel:
    159. Consortium: SeriesConsortium
    160. <<: *ChannelDefaults
    161. Application:
    162. <<: *ApplicationDefaults
    163. Organizations:
    164. - *storage
    165. - *vhost
    166. Capabilities:
    167. <<: *ApplicationCapabilities

生成证书和创世区块



  1. #!/usr/bin/env bash
  2. clear
  3. FABRIC_TAG=2.0
  4. echo "Generate crypto material"
  5. docker run -it --rm \
  6. -v "$PWD":/hyperledger-fabric-network \
  7. -w /hyperledger-fabric-network \
  8. -e "FABRIC_CFG_PATH=/hyperledger-fabric-network" \
  9. hyperledger/fabric-tools:$FABRIC_TAG \
  10. sh -c "rm -rf ./artifacts/crypto-config/* && cryptogen generate --config=./crypto-config.yaml --output=./artifacts/crypto-config"


  1. #!/usr/bin/env bash
  2. clear
  3. FABRIC_TAG=2.0
  4. PROFILE=OrdererGenesis
  5. echo "Generate genesis block for orderer"
  6. docker run -it --rm \
  7. -v "$PWD":/hyperledger-fabric-network \
  8. -w /hyperledger-fabric-network \
  9. -e "FABRIC_CFG_PATH=/hyperledger-fabric-network" \
  10. hyperledger/fabric-tools:$FABRIC_TAG \
  11. sh -c "rm -f ./artifacts/config/genesis.block && configtxgen -profile $PROFILE -outputBlock ./artifacts/config/genesis.block -channelID syschain"

生成Channel交易配置



  1. #!/usr/bin/env bash
  2. clear
  3. FABRIC_TAG=2.0
  4. PROFILE=SeriesChannel
  5. CHANNEL=alice
  6. echo "Generate channel configuration transaction"
  7. docker run -it --rm \
  8. -v "$PWD":/hyperledger-fabric-network \
  9. -w /hyperledger-fabric-network \
  10. -e "FABRIC_CFG_PATH=/hyperledger-fabric-network" \
  11. hyperledger/fabric-tools:$FABRIC_TAG \
  12. sh -c "rm -f ./artifacts/config/$CHANNEL.tx && configtxgen -profile $PROFILE -outputCreateChannelTx ./artifacts/config/$CHANNEL.tx -channelID $CHANNEL"

配置docker stack编排

  • docker-compose-storage.yaml

    1. version: '3'
    2. networks:
    3. baas:
    4. external:
    5. name: baas
    6. services:
    7. ca0:
    8. image: hyperledger/fabric-ca:2.0
    9. hostname: ca0.storage.cloud-labs.io
    10. environment:
    11. - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
    12. - FABRIC_CA_SERVER_CA_NAME=ca0.storage.cloud-labs.io
    13. - FABRIC_CA_SERVER_CA_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca/ca.storage.cloud-labs.io-cert.pem
    14. - FABRIC_CA_SERVER_CA_KEYFILE=/etc/hyperledger/fabric-ca-server-config/ca/380edf74737d53b1cc324f1d6c06f8b35bdcbe89799dbdbf146d95da681daec2_sk
    15. - FABRIC_CA_SERVER_TLS_ENABLED=true
    16. - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/tlsca/tlsca.storage.cloud-labs.io-cert.pem
    17. - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/tlsca/85d708dacaeb88897f6a3744e7cf84a53591049ab692c0ecd9c49a449a4050bf_sk
    18. - FABRIC_CA_SERVER_PORT=7054
    19. command: sh -c 'fabric-ca-server start -b admin:adminpw -d'
    20. ports:
    21. - 7054
    22. networks:
    23. baas:
    24. aliases:
    25. - ca0.storage.cloud-labs.io
    26. volumes:
    27. - $PWD/artifacts/crypto-config/peerOrganizations/storage.cloud-labs.io/ca/:/etc/hyperledger/fabric-ca-server-config/ca/
    28. - $PWD/artifacts/crypto-config/peerOrganizations/storage.cloud-labs.io/tlsca/:/etc/hyperledger/fabric-ca-server-config/tlsca/
    29. peer0:
    30. image: hyperledger/fabric-peer:2.0
    31. hostname: peer0.storage.cloud-labs.io
    32. environment:
    33. - FABRIC_LOGGING_SPEC=INFO
    34. - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
    35. - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=baas
    36. - CORE_PEER_ID=peer0.storage.cloud-labs.io:7051
    37. - CORE_PEER_LOCALMSPID=storageMSP
    38. - CORE_PEER_ADDRESS=peer0.storage.cloud-labs.io:7051
    39. - CORE_PEER_LISTENADDRESS:0.0.0.0:7051
    40. - CORE_PEER_GOSSIP_USELEADERELECTION=true
    41. - CORE_PEER_GOSSIP_ORGLEADER=false
    42. - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.storage.cloud-labs.io:7051
    43. - CORE_PEER_PROFILE_ENABLED=true
    44. - CORE_CHAINCODE_EXECUTETIMEOUT=300s
    45. - CORE_PEER_CHAINCODEADDRESS=peer0.storage.cloud-labs.io:7052
    46. - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052
    47. - CORE_PEER_TLS_ENABLED=true
    48. - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
    49. - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
    50. - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
    51. command: peer node start
    52. networks:
    53. baas:
    54. aliases:
    55. - peer0.storage.cloud-labs.io
    56. ports:
    57. - 7051
    58. - 7052
    59. - 7053
    60. volumes:
    61. - /var/run/:/host/var/run/
    62. - $PWD/artifacts/crypto-config/peerOrganizations/storage.cloud-labs.io/peers/peer0.storage.cloud-labs.io/msp:/etc/hyperledger/fabric/msp
    63. - $PWD/artifacts/crypto-config/peerOrganizations/storage.cloud-labs.io/peers/peer0.storage.cloud-labs.io/tls:/etc/hyperledger/fabric/tls
    64. cli:
    65. image: hyperledger/fabric-tools:2.0
    66. tty: true
    67. stdin_open: true
    68. hostname: cli.storage.cloud-labs.io
    69. environment:
    70. - GOPATH=/opt/gopath
    71. - FABRIC_LOGGING_SPEC=INFO
    72. - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
    73. - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=baas
    74. - CORE_PEER_ID=peer0.storage.cloud-labs.io:7051
    75. - CORE_PEER_LOCALMSPID=storageMSP
    76. - CORE_PEER_ADDRESS=peer0.storage.cloud-labs.io:7051
    77. - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/storage.cloud-labs.io/users/[email protected]/msp
    78. - CORE_PEER_TLS_ENABLED=true
    79. - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/storage.cloud-labs.io/peers/peer0.storage.cloud-labs.io/tls/server.crt
    80. - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/storage.cloud-labs.io/peers/peer0.storage.cloud-labs.io/tls/server.key
    81. - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/storage.cloud-labs.io/peers/peer0.storage.cloud-labs.io/tls/ca.crt
    82. - ORDERER_SYSCHAN_ID=syschain
    83. - ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/orderer/crypto/ordererOrganizations/cloud-labs.io/orderers/orderer0.cloud-labs.io/msp/tlscacerts/tlsca.cloud-labs.io-cert.pem
    84. working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    85. command: /bin/bash
    86. networks:
    87. - baas
    88. volumes:
    89. - /var/run/:/host/var/run/
    90. - $PWD/artifacts/chaincode:/opt/gopath/src
    91. - $PWD/artifacts/crypto-config/peerOrganizations:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations
    92. - $PWD/artifacts/crypto-config/ordererOrganizations:/opt/gopath/src/github.com/hyperledger/fabric/orderer/crypto/ordererOrganizations
    93. - $PWD/artifacts/config:/opt/gopath/src/github.com/hyperledger/fabric/peer/config
    94. - $PWD/artifacts/scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts
  • docker-compose-vhost.yaml

    1. version: '3'
    2. networks:
    3. baas:
    4. external:
    5. name: baas
    6. services:
    7. ca0:
    8. image: hyperledger/fabric-ca:2.0
    9. hostname: ca0.vhost.cloud-labs.io
    10. environment:
    11. - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
    12. - FABRIC_CA_SERVER_CA_NAME=ca0.vhost.cloud-labs.io
    13. - FABRIC_CA_SERVER_CA_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca/ca.vhost.cloud-labs.io-cert.pem
    14. - FABRIC_CA_SERVER_CA_KEYFILE=/etc/hyperledger/fabric-ca-server-config/ca/683dd1cb65ff6a48cb1b1566b380c0b76b2d3d4ce5b79800e5e5a98019c01dce_sk
    15. - FABRIC_CA_SERVER_TLS_ENABLED=true
    16. - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/tlsca/tlsca.vhost.cloud-labs.io-cert.pem
    17. - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/tlsca/e886c3cec95ad716b823542c342a0514d72a289d05213636d81cbb9071a75bd1_sk
    18. - FABRIC_CA_SERVER_PORT=7054
    19. command: sh -c 'fabric-ca-server start -b admin:adminpw -d'
    20. ports:
    21. - 7054
    22. networks:
    23. baas:
    24. aliases:
    25. - ca0.vhost.cloud-labs.io
    26. volumes:
    27. - $PWD/artifacts/crypto-config/peerOrganizations/vhost.cloud-labs.io/ca/:/etc/hyperledger/fabric-ca-server-config/ca/
    28. - $PWD/artifacts/crypto-config/peerOrganizations/vhost.cloud-labs.io/tlsca/:/etc/hyperledger/fabric-ca-server-config/tlsca/
    29. peer0:
    30. image: hyperledger/fabric-peer:2.0
    31. hostname: peer0.vhost.cloud-labs.io
    32. environment:
    33. - FABRIC_LOGGING_SPEC=INFO
    34. - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
    35. - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=baas
    36. - CORE_PEER_ID=peer0.vhost.cloud-labs.io:7051
    37. - CORE_PEER_LOCALMSPID=vhostMSP
    38. - CORE_PEER_ADDRESS=peer0.vhost.cloud-labs.io:7051
    39. - CORE_PEER_LISTENADDRESS:0.0.0.0:7051
    40. - CORE_PEER_GOSSIP_USELEADERELECTION=true
    41. - CORE_PEER_GOSSIP_ORGLEADER=false
    42. - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.vhost.cloud-labs.io:7051
    43. - CORE_PEER_PROFILE_ENABLED=true
    44. - CORE_CHAINCODE_EXECUTETIMEOUT=300s
    45. - CORE_PEER_CHAINCODEADDRESS=peer0.vhost.cloud-labs.io:7052
    46. - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052
    47. - CORE_PEER_TLS_ENABLED=true
    48. - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
    49. - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
    50. - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
    51. command: peer node start
    52. networks:
    53. baas:
    54. aliases:
    55. - peer0.vhost.cloud-labs.io
    56. ports:
    57. - 7051
    58. - 7052
    59. - 7053
    60. volumes:
    61. - /var/run/:/host/var/run/
    62. - $PWD/artifacts/crypto-config/peerOrganizations/vhost.cloud-labs.io/peers/peer0.vhost.cloud-labs.io/msp:/etc/hyperledger/fabric/msp
    63. - $PWD/artifacts/crypto-config/peerOrganizations/vhost.cloud-labs.io/peers/peer0.vhost.cloud-labs.io/tls:/etc/hyperledger/fabric/tls
    64. cli:
    65. image: hyperledger/fabric-tools:2.0
    66. tty: true
    67. stdin_open: true
    68. hostname: cli.vhost.cloud-labs.io
    69. environment:
    70. - GOPATH=/opt/gopath
    71. - FABRIC_LOGGING_SPEC=INFO
    72. - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
    73. - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=baas
    74. - CORE_PEER_ID=peer0.vhost.cloud-labs.io:7051
    75. - CORE_PEER_LOCALMSPID=vhostMSP
    76. - CORE_PEER_ADDRESS=peer0.vhost.cloud-labs.io:7051
    77. - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/vhost.cloud-labs.io/users/[email protected]/msp
    78. - CORE_PEER_TLS_ENABLED=true
    79. - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/vhost.cloud-labs.io/peers/peer0.vhost.cloud-labs.io/tls/server.crt
    80. - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/vhost.cloud-labs.io/peers/peer0.vhost.cloud-labs.io/tls/server.key
    81. - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/vhost.cloud-labs.io/peers/peer0.vhost.cloud-labs.io/tls/ca.crt
    82. - ORDERER_SYSCHAN_ID=syschain
    83. - ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/orderer/crypto/ordererOrganizations/cloud-labs.io/orderers/orderer0.cloud-labs.io/msp/tlscacerts/tlsca.cloud-labs.io-cert.pem
    84. working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    85. command: /bin/bash
    86. networks:
    87. - baas
    88. volumes:
    89. - /var/run/:/host/var/run/
    90. - $PWD/artifacts/chaincode:/opt/gopath/src
    91. - $PWD/artifacts/crypto-config/peerOrganizations:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations
    92. - $PWD/artifacts/crypto-config/ordererOrganizations:/opt/gopath/src/github.com/hyperledger/fabric/orderer/crypto/ordererOrganizations
    93. - $PWD/artifacts/config:/opt/gopath/src/github.com/hyperledger/fabric/peer/config
    94. - $PWD/artifacts/scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts
  • docker-compose-orderer.yaml

    1. version: '3'
    2. networks:
    3. baas:
    4. external:
    5. name: baas
    6. services:
    7. orderer0:
    8. image: hyperledger/fabric-orderer:2.0
    9. hostname: orderer0.cloud-labs.io
    10. environment:
    11. - FABRIC_LOGGING_SPEC=INFO
    12. - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
    13. - ORDERER_GENERAL_GENESISMETHOD=file
    14. - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
    15. - ORDERER_GENERAL_LOCALMSPID=cloudLabsMSP
    16. - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
    17. # enabled TLS
    18. - ORDERER_GENERAL_TLS_ENABLED=true
    19. - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
    20. - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
    21. - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    22. - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt
    23. - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key
    24. - ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    25. working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    26. command: orderer
    27. networks:
    28. baas:
    29. aliases:
    30. - orderer0.cloud-labs.io
    31. ports:
    32. - 7050
    33. volumes:
    34. - $PWD/artifacts/crypto-config/ordererOrganizations/cloud-labs.io/users:/var/hyperledger/users
    35. - $PWD/artifacts/config/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
    36. - $PWD/artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer0.cloud-labs.io/msp:/var/hyperledger/orderer/msp
    37. - $PWD/artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer0.cloud-labs.io/tls/:/var/hyperledger/orderer/tls
    38. orderer1:
    39. image: hyperledger/fabric-orderer:2.0
    40. hostname: orderer1.cloud-labs.io
    41. environment:
    42. - FABRIC_LOGGING_SPEC=INFO
    43. - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
    44. - ORDERER_GENERAL_GENESISMETHOD=file
    45. - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
    46. - ORDERER_GENERAL_LOCALMSPID=cloudLabsMSP
    47. - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
    48. # enabled TLS
    49. - ORDERER_GENERAL_TLS_ENABLED=true
    50. - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
    51. - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
    52. - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    53. - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt
    54. - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key
    55. - ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    56. working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    57. command: orderer
    58. networks:
    59. baas:
    60. aliases:
    61. - orderer1.cloud-labs.io
    62. ports:
    63. - 7050
    64. volumes:
    65. - $PWD/artifacts/config/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
    66. - $PWD/artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer1.cloud-labs.io/msp:/var/hyperledger/orderer/msp
    67. - $PWD/artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer1.cloud-labs.io/tls/:/var/hyperledger/orderer/tls
    68. orderer2:
    69. image: hyperledger/fabric-orderer:2.0
    70. hostname: orderer2.cloud-labs.io
    71. environment:
    72. - FABRIC_LOGGING_SPEC=INFO
    73. - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
    74. - ORDERER_GENERAL_GENESISMETHOD=file
    75. - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
    76. - ORDERER_GENERAL_LOCALMSPID=cloudLabsMSP
    77. - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
    78. # enabled TLS
    79. - ORDERER_GENERAL_TLS_ENABLED=true
    80. - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
    81. - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
    82. - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    83. - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt
    84. - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key
    85. - ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    86. working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    87. command: orderer
    88. networks:
    89. baas:
    90. aliases:
    91. - orderer2.cloud-labs.io
    92. ports:
    93. - 7050
    94. volumes:
    95. - $PWD/artifacts/config/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
    96. - $PWD/artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer2.cloud-labs.io/msp:/var/hyperledger/orderer/msp
    97. - $PWD/artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer2.cloud-labs.io/tls/:/var/hyperledger/orderer/tls
    98. orderer3:
    99. image: hyperledger/fabric-orderer:2.0
    100. hostname: orderer3.cloud-labs.io
    101. environment:
    102. - FABRIC_LOGGING_SPEC=INFO
    103. - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
    104. - ORDERER_GENERAL_GENESISMETHOD=file
    105. - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
    106. - ORDERER_GENERAL_LOCALMSPID=cloudLabsMSP
    107. - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
    108. # enabled TLS
    109. - ORDERER_GENERAL_TLS_ENABLED=true
    110. - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
    111. - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
    112. - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    113. - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt
    114. - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key
    115. - ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    116. working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    117. command: orderer
    118. networks:
    119. baas:
    120. aliases:
    121. - orderer3.cloud-labs.io
    122. ports:
    123. - 7050
    124. volumes:
    125. - $PWD/artifacts/config/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
    126. - $PWD/artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer3.cloud-labs.io/msp:/var/hyperledger/orderer/msp
    127. - $PWD/artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer3.cloud-labs.io/tls/:/var/hyperledger/orderer/tls
    128. orderer4:
    129. image: hyperledger/fabric-orderer:2.0
    130. hostname: orderer4.cloud-labs.io
    131. environment:
    132. - FABRIC_LOGGING_SPEC=INFO
    133. - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
    134. - ORDERER_GENERAL_GENESISMETHOD=file
    135. - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
    136. - ORDERER_GENERAL_LOCALMSPID=cloudLabsMSP
    137. - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
    138. # enabled TLS
    139. - ORDERER_GENERAL_TLS_ENABLED=true
    140. - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
    141. - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
    142. - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    143. - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt
    144. - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key
    145. - ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    146. working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    147. command: orderer
    148. networks:
    149. baas:
    150. aliases:
    151. - orderer4.cloud-labs.io
    152. ports:
    153. - 7050
    154. volumes:
    155. - $PWD/artifacts/config/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
    156. - $PWD/artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer4.cloud-labs.io/msp:/var/hyperledger/orderer/msp
    157. - $PWD/artifacts/crypto-config/ordererOrganizations/cloud-labs.io/orderers/orderer4.cloud-labs.io/tls/:/var/hyperledger/orderer/tls


  1. #!/usr/bin/env bash
  2. docker stack deploy -c docker-compose-storage.yaml storage_cloud-labs_io
  3. sleep 1
  4. docker stack deploy -c docker-compose-vhost.yaml vhost_cloud-labs_io
  5. sleep 1
  6. docker stack deploy -c docker-compose-orderer.yaml cloud-labs_io
  7. sleep 2
  8. docker stack ls

创建Channel并且安装chaincode



  1. #!/usr/bin/env bash
  2. clear
  3. CLI_NAME=storage_cloud-labs_io_cli
  4. ORDERER=orderer0.cloud-labs.io:7050
  5. CHANNEL=alice
  6. docker exec -it -e "ORDERER=$ORDERER" -e "CHANNEL=$CHANNEL" "$(docker ps -q -f status=running --filter name=$CLI_NAME)" sh -c 'chmod +x ./scripts/channel.tls.sh && ./scripts/channel.tls.sh create'


  1. #!/usr/bin/env bash
  2. clear
  3. CLI_NAMES=(storage_cloud-labs_io_cli vhost_cloud-labs_io_cli)
  4. ORDERER=orderer0.cloud-labs.io:7050
  5. CHANNEL=alice
  6. for cli in "${CLI_NAMES[@]}"; do
  7. docker exec -it -e "ORDERER=$ORDERER" -e "CHANNEL=$CHANNEL" "$(docker ps -q -f status=running --filter name="$cli")" sh -c 'chmod +x ./scripts/channel.tls.sh && ./scripts/channel.tls.sh join'
  8. done


  1. #!/usr/bin/env bash
  2. clear
  3. CLI_NAMES=(storage_cloud-labs_io_cli vhost_cloud-labs_io_cli)
  4. ORDERER=orderer0.cloud-labs.io:7050
  5. CHANNEL=alice
  6. CC_NAME=c11
  7. CC_VERSION=1.0
  8. CC_PATH=github.com/c11
  9. for cli in "${CLI_NAMES[@]}"; do
  10. CID=$(docker ps -q -f status=running --filter name="$cli")
  11. docker exec -it \
  12. -e "ORDERER=$ORDERER" \
  13. -e "CHANNEL=$CHANNEL" \
  14. -e "CC_NAME=$CC_NAME" \
  15. -e "CC_VERSION=$CC_VERSION" \
  16. -e "CC_PATH=$CC_PATH" \
  17. "$CID" sh -c 'chmod +x ./scripts/chaincode.tls.sh && ./scripts/chaincode.tls.sh install && ./scripts/chaincode.tls.sh install_list'
  18. done


  1. #!/usr/bin/env bash
  2. clear
  3. CLI_NAMES=(storage_cloud-labs_io_cli vhost_cloud-labs_io_cli)
  4. ORDERER=orderer0.cloud-labs.io:7050
  5. CHANNEL=alice
  6. CC_NAME=c11
  7. CC_VERSION=1.0
  8. CC_CTR='{"Args":["init","a","100","b","200"]}'
  9. for cli in "${CLI_NAMES[@]}"; do
  10. CID=$(docker ps -q -f status=running --filter name="$cli")
  11. docker exec -it \
  12. -e "ORDERER=$ORDERER" \
  13. -e "CHANNEL=$CHANNEL" \
  14. -e "CC_NAME=$CC_NAME" \
  15. -e "CC_VERSION=$CC_VERSION" \
  16. -e "CC_CTR=$CC_CTR" \
  17. "$CID" sh -c 'chmod +x ./scripts/chaincode.tls.sh && ./scripts/chaincode.tls.sh instantiate && ./scripts/chaincode.tls.sh instantiate_list'
  18. done


  1. #!/usr/bin/env bash
  2. clear
  3. CLI_NAME=storage_cloud-labs_io_cli
  4. ORDERER=orderer0.cloud-labs.io:7050
  5. CHANNEL=alice
  6. CC_NAME=c11
  7. CC_QUERY_ARG='{"Args":["query","a"]}'
  8. CID=$(docker ps -q -f status=running --filter name="$CLI_NAME")
  9. docker exec -it \
  10. -e "ORDERER=$ORDERER" \
  11. -e "CHANNEL=$CHANNEL" \
  12. -e "CC_NAME=$CC_NAME" \
  13. -e "CC_QUERY_ARG=$CC_QUERY_ARG" \
  14. "$CID" sh -c 'chmod +x ./scripts/chaincode.tls.sh && ./scripts/chaincode.tls.sh query'


  1. #!/usr/bin/env bash
  2. CLI_NAME=storage_cloud-labs_io_cli
  3. ORDERER=orderer0.cloud-labs.io:7050
  4. CHANNEL=alice
  5. CC_NAME=c11
  6. CC_INVOKE_ARG='{"Args":["invoke","a","b","10"]}'
  7. CID=$(docker ps -q -f status=running --filter name="$CLI_NAME")
  8. docker exec -it \
  9. -e "ORDERER=$ORDERER" \
  10. -e "CHANNEL=$CHANNEL" \
  11. -e "CC_NAME=$CC_NAME" \
  12. -e "CC_INVOKE_ARG=$CC_INVOKE_ARG" \
  13. "$CID" sh -c 'chmod +x ./scripts/chaincode.tls.sh && ./scripts/chaincode.tls.sh invoke'

通过本次的交流,再次对Hyperledger Fabric进行了下学习,并且对1.4加入的Raft共识有了一次实践。

本次的交流实践,我把它整理了放到我的仓库,感兴趣的可以去了解下! 传送门


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK