1. docker-compose文件的編寫
1.1 客戶端角色需要使用的環境變量
註釋講解:
# 客戶端docker容器啓動之後, go的工作目錄
- GOPATH=/opt/gopath # 不需要修改
# docker容器啓動之後, 對應的守護進程的本地套接字, 不需要修改
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- CORE_LOGGING_LEVEL=INFO # 日誌級別
- CORE_PEER_ID=cli # 當前客戶端節點的ID, 自己指定
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051 # 客戶端連接的peer節點
- CORE_PEER_LOCALMSPID=Org1MSP # 組織ID
- CORE_PEER_TLS_ENABLED=true # 通信是否使用tls加密
- CORE_PEER_TLS_CERT_FILE= # 證書文件
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
- CORE_PEER_TLS_KEY_FILE= # 私鑰文件
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
-CORE_PEER_TLS_ROOTCERT_FILE= # 根證書文件
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
# 指定當前客戶端的身份
- CORE_PEER_MSPCONFIGPATH= /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
實際配置:
cli:
container_name: cli
image: hyperledger/fabric-tools:latest
tty: true
stdin_open: true
environment:
- GOPATH=/opt/gopath
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
#- CORE_LOGGING_LEVEL=DEBUG
- CORE_LOGGING_LEVEL=INFO
- CORE_PEER_ID=cli
- CORE_PEER_ADDRESS=peer0.orggo.zjnu.com:7051
- CORE_PEER_LOCALMSPID=OrgGoMSP
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/orggo.zjnu.com/peers/peer0.orggo.zjnu.com/tls/server.crt
- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/orggo.zjnu.com/peers/peer0.orggo.zjnu.com/tls/server.key
- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/orggo.zjnu.com/peers/peer0.orggo.zjnu.com/tls/ca.crt
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/orggo.zjnu.com/users/[email protected]/msp
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:
- orderer.zjnu.com
- peer0.orggo.zjnu.com
- peer1.orggo.zjnu.com
- peer0.orgcpp.zjnu.com
- peer1.orgcpp.zjnu.com
networks:
- byfn
1.2 orderer節點需要使用的環境變量
註釋講解:
- ORDERER_GENERAL_LOGLEVEL=INFO # 日誌級別
- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 # orderer節點監聽的地址
- ORDERER_GENERAL_GENESISMETHOD=file # 創始塊的來源, 指定file來源就是文件中
# 創始塊對應的文件, 這個不需要改
- ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
- ORDERER_GENERAL_LOCALMSPID=OrdererMSP # orderer節點所屬的組的ID
- ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp # 當前節點的msp賬號路徑
# enabled TLS
- ORDERER_GENERAL_TLS_ENABLED=true # 是否使用tls加密
- 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] # 根證書
實際配置:
docker-compose-cli.yaml
orderer.zjnu.com:
extends:
file: base/docker-compose-base.yaml
service: orderer.zjnu.com
container_name: orderer.zjnu.com
networks:
- byfn
docker-compose-base.yaml
orderer.zjnu.com:
container_name: orderer.zjnu.com
image: hyperledger/fabric-orderer:latest
environment:
- ORDERER_GENERAL_LOGLEVEL=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]
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/zjnu.com/orderers/orderer.zjnu.com/msp:/var/hyperledger/orderer/msp
- ../crypto-config/ordererOrganizations/zjnu.com/orderers/orderer.zjnu.com/tls/:/var/hyperledger/orderer/tls
- orderer.zjnu.com:/var/hyperledger/production/orderer
ports:
- 7050:7050
1.3 peer節點需要使用的環境變量
- CORE_PEER_ID=peer0.orggo.test.com # 當前peer節點的名字, 自己起
# 當前peer節點的地址信息
- CORE_PEER_ADDRESS=peer0.orggo.test.com:7051
# 啓動的時候, 指定連接誰, 一般寫自己就行
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.orggo.test.com:7051
# 爲了被其他節點感知到, 如果不設置別的節點不知有該節點的存在
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.orggo.test.com:7051
- CORE_PEER_LOCALMSPID=OrgGoMSP
# docker的本地套接字地址, 不需要改
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
# 當前節點屬於哪個網絡,這裏的zjnu_fabric是因爲docker-compose.yaml所在的目錄名而定的
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=zjnu_fabric_byfn
- CORE_LOGGING_LEVEL=INFO
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_GOSSIP_USELEADERELECTION=true # 釋放自動選舉leader節點
- CORE_PEER_GOSSIP_ORGLEADER=false # 當前不是leader
- CORE_PEER_PROFILE_ENABLED=true # 在peer節點中有一個profile服務
- 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
1.4 相關配置文件
-
啓動docker-compose使用的配置文件 -
docker-compose.yaml
# docker-compose.yaml version: '2' volumes: orderer.zjnu.com: peer0.orggo.zjnu.com: peer1.orggo.zjnu.com: peer0.orgcpp.zjnu.com: peer1.orgcpp.zjnu.com: networks: byfn: services: orderer.zjnu.com: extends: file: base/docker-compose-base.yaml service: orderer.zjnu.com container_name: orderer.zjnu.com networks: - byfn peer0.orggo.zjnu.com: container_name: peer0.orggo.zjnu.com extends: file: base/docker-compose-base.yaml service: peer0.orggo.zjnu.com networks: - byfn peer1.orggo.zjnu.com: container_name: peer1.orggo.zjnu.com extends: file: base/docker-compose-base.yaml service: peer1.orggo.zjnu.com networks: - byfn peer0.orgcpp.zjnu.com: container_name: peer0.orgcpp.zjnu.com extends: file: base/docker-compose-base.yaml service: peer0.orgcpp.zjnu.com networks: - byfn peer1.orgcpp.zjnu.com: container_name: peer1.orgcpp.zjnu.com extends: file: base/docker-compose-base.yaml service: peer1.orgcpp.zjnu.com networks: - byfn cli: container_name: cli image: hyperledger/fabric-tools:latest tty: true stdin_open: true environment: - GOPATH=/opt/gopath - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - CORE_LOGGING_LEVEL=DEBUG #- CORE_LOGGING_LEVEL=INFO - CORE_PEER_ID=cli - CORE_PEER_ADDRESS=peer0.orggo.zjnu.com:7051 - CORE_PEER_LOCALMSPID=OrgGoMSP - CORE_PEER_TLS_ENABLED=true - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/orggo.zjnu.com/peers/peer0.orggo.zjnu.com/tls/server.crt - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/orggo.zjnu.com/peers/peer0.orggo.zjnu.com/tls/server.key - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/orggo.zjnu.com/peers/peer0.orggo.zjnu.com/tls/ca.crt - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/orggo.zjnu.com/users/[email protected]/msp 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: - orderer.zjnu.com - peer0.orggo.zjnu.com - peer1.orggo.zjnu.com - peer0.orgcpp.zjnu.com - peer1.orgcpp.zjnu.com networks: - byfn
-
被
docker-compose.yaml
依賴的文件 -base/docker-compose-base.yaml
# base/docker-compose-base.yaml version: '2' services: orderer.itcast.com: container_name: orderer.zjnu.com image: hyperledger/fabric-orderer:latest environment: - ORDERER_GENERAL_LOGLEVEL=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] 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/zjnu.com/orderers/orderer.zjnu.com/msp:/var/hyperledger/orderer/msp - ../crypto-config/ordererOrganizations/zjnu.com/orderers/orderer.zjnu.com/tls/:/var/hyperledger/orderer/tls - orderer.zjnu.com:/var/hyperledger/production/orderer # /var/lib/docker/volumes/order.zjnu.com ports: - 7050:7050 peer0.orggo.zjnu.com: container_name: peer0.orggo.zjnu.com extends: file: peer-base.yaml service: peer-base environment: - CORE_PEER_ID=peer0.orggo.zjnu.com - CORE_PEER_ADDRESS=peer0.orggo.zjnu.com:7051 - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.orggo.zjnu.com:7051 - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.orggo.zjnu.com:7051 - CORE_PEER_LOCALMSPID=OrgGoMSP volumes: - /var/run/:/host/var/run/ - ../crypto-config/peerOrganizations/orggo.zjnu..com/peers/peer0.orggo.zjnu.com/msp:/etc/hyperledger/fabric/msp - ../crypto-config/peerOrganizations/orggo.zjnu..com/peers/peer0.orggo.zjnu.com/tls:/etc/hyperledger/fabric/tls - peer0.orggo.zjnu..com:/var/hyperledger/production ports: - 7051:7051 - 7053:7053 peer1.orggo.zjnu.com: container_name: peer1.orggo.zjnu.com extends: file: peer-base.yaml service: peer-base environment: - CORE_PEER_ID=peer1.orggo.zjnu.com - CORE_PEER_ADDRESS=peer1.orggo.zjnu.com:7051 - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.orggo.zjnu.com:7051 - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.orggo.zjnu.com:7051 - CORE_PEER_LOCALMSPID=OrgGoMSP volumes: - /var/run/:/host/var/run/ - ../crypto-config/peerOrganizations/orggo.zjnu.com/peers/peer1.orggo.zjnu.com/msp:/etc/hyperledger/fabric/msp - ../crypto-config/peerOrganizations/orggo.zjnu.com/peers/peer1.orggo.zjnu.com/tls:/etc/hyperledger/fabric/tls - peer1.orggo.zjnu.com:/var/hyperledger/production ports: - 8051:7051 - 8053:7053 peer0.orgcpp.zjnu.com: container_name: peer0.orgcpp.zjnu.com extends: file: peer-base.yaml service: peer-base environment: - CORE_PEER_ID=peer0.orgcpp.zjnu.com - CORE_PEER_ADDRESS=peer0.orgcpp.zjnu.com:7051 - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.orgcpp.zjnu.com:7051 - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.orgcpp.zjnu.com:7051 - CORE_PEER_LOCALMSPID=OrgCppMSP volumes: - /var/run/:/host/var/run/ - ../crypto-config/peerOrganizations/orgcpp.zjnu.com/peers/peer0.orgcpp.zjnu.com/msp:/etc/hyperledger/fabric/msp - ../crypto-config/peerOrganizations/orgcpp.zjnu.com/peers/peer0.orgcpp.zjnu.com/tls:/etc/hyperledger/fabric/tls - peer0.orgcpp.zjnu.com:/var/hyperledger/production ports: - 9051:7051 - 9053:7053 peer1.orgcpp.zjnu.com: container_name: peer1.orgcpp.zjnu.com extends: file: peer-base.yaml service: peer-base environment: - CORE_PEER_ID=peer1.orgcpp.zjnu.com - CORE_PEER_ADDRESS=peer1.orgcpp.zjnu.com:7051 - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.orgcpp.zjnu.com:7051 - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.orgcpp.zjnu.com:7051 - CORE_PEER_LOCALMSPID=OrgCppMSP volumes: - /var/run/:/host/var/run/ - ../crypto-config/peerOrganizations/orgcpp.zjnu.com/peers/peer1.orgcpp.zjnu.com/msp:/etc/hyperledger/fabric/msp - ../crypto-config/peerOrganizations/orgcpp.zjnu.com/peers/peer1.orgcpp.zjnu.com/tls:/etc/hyperledger/fabric/tls - peer1.orgcpp.zjnu.com:/var/hyperledger/production ports: - 10051:7051 - 10053:7053
-
被 ``docker-compose-base.yaml
依賴的文件 -
base/peer-base.yaml`# base/peer-base.yaml version: '2' services: peer-base: image: hyperledger/fabric-peer:latest environment: - 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=zjnu_fabric_byfn - CORE_LOGGING_LEVEL=INFO #- CORE_LOGGING_LEVEL=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: /opt/gopath/src/github.com/hyperledger/fabric/peer command: peer node start
1.5 啓動docker-compose
注:因爲在前面的章節有啓動官方給的示例,所以節點的端口會被佔用,需要進入到fabric-network裏面執行關掉節點的指令,之後再回到我們自己搭建的目錄裏執行。