区块链之Solo多机部署

规划

我只有三台虚拟机,所以计划一个orderer节点,一个org下两个peer节点

搭建网络环境

  1. 修改三台虚拟机hosts配置文件
vim /etc/hosts

在这里插入图片描述

  1. 在/opt/gopath/src/github.com/hyperledger/fabric目录下新建a_test文件夹(文件夹建在哪里都可以,不必纠结,随意),并传入bin文件夹和相关配置文件(包括configtx.yaml和crypto-config.yaml),配置文件内容参考:https://blog.csdn.net/weixin_42770598/article/details/88715847
    在这里插入图片描述

  2. 新建crypto-config文件夹,生成证书文件

./bin/cryptogen generate --config=./crypto-config.yaml --output ./crypto-config

在这里插入图片描述

  1. 配置环境变量
export CHANNEL_NAME="mychannel"
  1. 新建channel-artifacts文件夹,生成创世块,通道配置文件和org1MSP文件
mkdir channel-artifacts
./bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
./bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx
./bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -asOrg Org1MSP

在这里插入图片描述

###############################################################################################
注意:::以上基本环境配置不必纠结在哪台电脑执行,任意一台电脑都可以,以上步骤只是为了准备启动orderer和peer所需要的部分文件
###############################################################################################

配置orderer启动环境

  1. 在/opt下新建orderder目录(文件夹建在哪里都可以,随意,只是后面的配置文件修改路径时一定要注意!!!),传入相关的文件,之前生成的证书文件msp和tls,系统创世块genesis.block,orderer.yaml和crypto-config.yaml(这个文件不是必须,不要也可以)文件,用于启动orderer,新建data文件夹,用于存放数据,log文件是启动order自动生成的日志文件,orderer的启动文件,从a_test/bin下面的文件夹复制即可
cp -r /opt/gopath/src/github.com/hyperledger/fabric/a_test/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp /opt/orderer
cp -r /opt/gopath/src/github.com/hyperledger/fabric/a_test/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls /opt/orderer
mkdir data

orderer文件夹下所有文件如下:
在这里插入图片描述

  1. orderer配置文件详解,这是很重要的一定要注意的地方,很多部署报错都是因为配置文件错误

crypto-config.yaml:
解释orderer节点和peer节点,如果有两个组织的话就是两个PeerOrgs
在这里插入图片描述
orderer.yaml:
这是tls证书路径,可以改为相对路径
在这里插入图片描述
这是创世块路径,可以改为相对路径
在这里插入图片描述
这是数据输出位置,新建data文件夹就是为了存放数据的
在这里插入图片描述

  1. 启动orderer
./orderer

配置peer0.org1启动环境

  1. 在/opt下新建peer目录,并传入相关文件(都是从orderer文件夹下复制过来的,data文件夹新建的,core.yaml新建的),如下:
    在这里插入图片描述
    (crypto-config.yaml这个文件不是必须,不要也可以)

  2. peer启动配置文件详解
    core.yaml:
    内容如下:

    扫描二维码关注公众号,回复: 5899661 查看本文章
logging:
    peer:       debug
    cauthdsl:   warning
    gossip:     warning
    ledger:     info
    msp:        warning
    policies:   warning
    grpc:       error
    format: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}'
peer:
    id: peer0.org1.example.com
    networkId: dev
    listenAddress: 0.0.0.0:7051
    address: 0.0.0.0:7051
    addressAutoDetect: false
    gomaxprocs: -1
    gossip:
        bootstrap: 127.0.0.1:7051
        bootstrap: peer0.org1.example.com:7051
        useLeaderElection: true
        orgLeader: false
        endpoint:
        maxBlockCountToStore: 100
        maxPropagationBurstLatency: 10ms
        maxPropagationBurstSize: 10
        propagateIterations: 1
        propagatePeerNum: 3
        pullInterval: 4s
        pullPeerNum: 3
        requestStateInfoInterval: 4s
        publishStateInfoInterval: 4s
        stateInfoRetentionInterval:
        publishCertPeriod: 10s
        skipBlockVerification: false
        dialTimeout: 3s
        connTimeout: 2s
        recvBuffSize: 20
        sendBuffSize: 200
        digestWaitTime: 1s
        requestWaitTime: 1s
        responseWaitTime: 2s
        aliveTimeInterval: 5s
        aliveExpirationTimeout: 25s
        reconnectInterval: 25s
        externalEndpoint: peer0.org1.example.com:7051
        election:
            startupGracePeriod: 15s
            membershipSampleInterval: 1s
            leaderAliveThreshold: 10s
            leaderElectionDuration: 5s
    events:
        address: 0.0.0.0:7053
        buffersize: 100
        timeout: 10ms
    tls:
        enabled: true
        cert:
            file: ./tls/server.crt
        key:
            file: ./tls/server.key
        rootcert:
            file: ./tls/ca.crt
        serverhostoverride:
    fileSystemPath: /opt/peer/data
    BCCSP:
        Default: SW
        SW:
            Hash: SHA2
            Security: 256
            FileKeyStore:
                KeyStore:
    mspConfigPath: msp
    localMspId: Org1MSP
    profile:
        enabled:    true
        listenAddress: 0.0.0.0:6060
vm:
    endpoint: unix:///var/run/docker.sock
    docker:
        tls:
            enabled: false
            ca:
                file: docker/ca.crt
            cert:
                file: docker/tls.crt
            key:
                file: docker/tls.key
        attachStdout: false
        hostConfig:
            NetworkMode: host
            Dns:
               # - 192.168.0.1
            LogConfig:
                Type: json-file
                Config:
                    max-size: "50m"
                    max-file: "5"
            Memory: 2147483648
chaincode:
    peerAddress:
    id:
        path:
        name:
    builder: $(DOCKER_NS)/fabric-ccenv:$(ARCH)-$(PROJECT_VERSION)
    golang:
        runtime: $(BASE_DOCKER_NS)/fabric-baseos:$(ARCH)-$(BASE_VERSION)
    car:
        runtime: $(BASE_DOCKER_NS)/fabric-baseos:$(ARCH)-$(BASE_VERSION)
    java:
        Dockerfile:  |
            from $(DOCKER_NS)/fabric-javaenv:$(ARCH)-$(PROJECT_VERSION)
    startuptimeout: 300s
    executetimeout: 30s
    mode: net
    keepalive: 0
    system:
        cscc: enable
        lscc: enable
        escc: enable
        vscc: enable
        qscc: enable
    logging:
      level:  info
      shim:   warning
      format: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}'
ledger:
  blockchain:
  state:
    stateDatabase: goleveldb
    couchDBConfig:
       couchDBAddress: 127.0.0.1:5984
       username:
       password:
       maxRetries: 3
       maxRetriesOnStartup: 10
       requestTimeout: 35s
       queryLimit: 10000
  history:
    enableHistoryDatabase: true

这些地方都要改为peer相对应的id:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
这是tls文件夹下证书路径,这里用的是相对路径;
以及数据输出路径data:
在这里插入图片描述
MSP一定要改为相应的id:
在这里插入图片描述

  1. 启动peer
./peer node start

配置peer1.org1启动环境

过程与peer0.org1相同

创建客户端

注:客户端无乱放在哪台服务器都可以,可以是orderer或任意peer服务器,或者其他服务器,orderer节点是为了给peer节点产生的交易排序,peer节点是由客户端控制的

  1. 在/opt下新建cli文件夹,并传入相应文件
    从peer文件夹下复制core.yaml文件,从a_test下复制channel-artifacts和crypto-config文件夹,从a_test/bin下复制peer文件
    在这里插入图片描述
  2. 配置环境变量
export CHAINCODE_NAME="mychaincode" //链码名称
export CHANNEL_NAME="mychannel"//通道名字

//orderer证书路径
export ORDERER_CA=/opt/cli/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

//peer0.org1的证书路径
export PEER0_ORG1_CA=/opt/cli/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

//peer1.org1的证书路径
export PEER1_ORG1_CA=/opt/cli/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt

//设置peer0.org1全局配置
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG1_CA
export CORE_PEER_MSPCONFIGPATH=/opt/cli/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=peer0.org1.example.com:7051

//设置peer1.org1全局配置
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=$PEER1_ORG1_CA
export CORE_PEER_MSPCONFIGPATH=/opt/cli/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=peer1.org1.example.com:7051

猜你喜欢

转载自blog.csdn.net/weixin_42770598/article/details/88815737