规划
我只有三台虚拟机,所以计划一个orderer节点,一个org下两个peer节点
搭建网络环境
- 修改三台虚拟机hosts配置文件
vim /etc/hosts
-
在/opt/gopath/src/github.com/hyperledger/fabric目录下新建a_test文件夹(文件夹建在哪里都可以,不必纠结,随意),并传入bin文件夹和相关配置文件(包括configtx.yaml和crypto-config.yaml),配置文件内容参考:https://blog.csdn.net/weixin_42770598/article/details/88715847
-
新建crypto-config文件夹,生成证书文件
./bin/cryptogen generate --config=./crypto-config.yaml --output ./crypto-config
- 配置环境变量
export CHANNEL_NAME="mychannel"
- 新建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启动环境
- 在/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文件夹下所有文件如下:
- orderer配置文件详解,这是很重要的一定要注意的地方,很多部署报错都是因为配置文件错误
crypto-config.yaml:
解释orderer节点和peer节点,如果有两个组织的话就是两个PeerOrgs
orderer.yaml:
这是tls证书路径,可以改为相对路径
这是创世块路径,可以改为相对路径
这是数据输出位置,新建data文件夹就是为了存放数据的
- 启动orderer
./orderer
配置peer0.org1启动环境
-
在/opt下新建peer目录,并传入相关文件(都是从orderer文件夹下复制过来的,data文件夹新建的,core.yaml新建的),如下:
(crypto-config.yaml这个文件不是必须,不要也可以) -
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:
- 启动peer
./peer node start
配置peer1.org1启动环境
过程与peer0.org1相同
创建客户端
注:客户端无乱放在哪台服务器都可以,可以是orderer或任意peer服务器,或者其他服务器,orderer节点是为了给peer节点产生的交易排序,peer节点是由客户端控制的
- 在/opt下新建cli文件夹,并传入相应文件
从peer文件夹下复制core.yaml文件,从a_test下复制channel-artifacts和crypto-config文件夹,从a_test/bin下复制peer文件
- 配置环境变量
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