【注意】最后更新于 November 14, 2017,文中内容可能已过时,请谨慎使用。
还记得我在上一篇PutState&GetState理解文章中留下了个疑问,猜测说fabric后台有个守护进程,对chan
进行监听什么的。但是只是猜测不行啊,还得从实际来证明。
怎么看呢?首先我们去找几个文件来看。我们都知道,正常启动一个fabric网络的时候,是执行一个脚本文件,把各种配置文件够给挂载进去。。。为了方便,我们就找./examples/e2e_cli
下面的文件吧。
network_setup.sh文件
首先,我们都知道,为了启动这个网络,我们通常都是执行
来运行的,通过shell文件我们可以定位到启动主函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
function networkUp () {
if [ -f "./crypto-config" ]; then
echo "crypto-config directory already exists."
else
#Generate all the artifacts that includes org certs, orderer genesis block,
# channel configuration transaction
source generateArtifacts.sh $CH_NAME
fi
if [ "${IF_COUCHDB}" == "couchdb" ]; then
CHANNEL_NAME=$CH_NAME TIMEOUT=$CLI_TIMEOUT docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_COUCH up -d 2>&1
else
CHANNEL_NAME=$CH_NAME TIMEOUT=$CLI_TIMEOUT docker-compose -f $COMPOSE_FILE up -d 2>&1
fi
if [ $? -ne 0 ]; then
echo "ERROR !!!! Unable to pull the images "
exit 1
fi
docker logs -f cli
}
|
首先是检查crypto-config
文件夹是否存在,不存在则根据输入的channel名称生成对应的证书等文件。
* 实际上,在运行之前最好删除下,要不然channel名称不匹配会出错的
具体生成的过程我们稍后再看。
fabric存储区块有两种存储格式,一种是levelDB,一种是couchDB,所以就是一个指定与否的关系。
我们发现,启动服务是这一句话
1
|
docker-compose -f $COMPOSE_FILE up -d
|
看来需要看下composefile--compose-cli.yaml
文件了。
docker-compose-cli.yaml文件
这个文件与启动脚本在同一个目录下,内容挺多的,我们分开来看。
根据整体的文件结构,一共启动了orderer
、peer0.org1
、peer1.org1
、peer0.org2
、peer1.org2
、cli
这几个服务。
除了cli
之外,其他全部都是默认继承的base下面的配置文档。我们先看cli
吧。
cli
中制定了container_name
,所使用的镜像,一些系统环境变量,默认工作位置,启动时执行的指令,挂载的卷以及需要依赖的服务等等。
环境这块没有太多奇怪的东西
1
2
3
4
5
6
7
8
9
10
11
12
|
environment:
- GOPATH=/opt/gopath
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- CORE_LOGGING_LEVEL=DEBUG
- CORE_PEER_ID=cli
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051
- CORE_PEER_LOCALMSPID=Org1MSP
- CORE_PEER_TLS_ENABLED=true
- 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/Admin@org1.example.com/msp
|
由于fabric是go开发的嘛,所以肯定得指定GOPATH
啦,其他的是一些为了安全而使用的cert等等文件,知道存在就好了。
* 这多说一句话,这些就是刚刚那个generateArtifacts.sh
文件生成的。
继续往下看执行的指令是
1
|
/bin/bash -c './scripts/script.sh ${CHANNEL_NAME}; sleep $TIMEOUT'
|
是在这个目录下执行一个scripts.sh
文件。
这个文件是通过volumes
挂载进去的
1
2
3
4
5
|
- /var/run/:/host/var/run/
- ../chaincode/go/:/opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go
- ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
- ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
- ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
|
可以看到就是在物理目录下的scripts文件夹。
打开之后看了下,就是执行的一个正常的client的操作,安装,查询等等操作。就不再赘述了。
docker-compose-base.yaml
好了,总算看到这个了,又一个非常大的文件,不过我们刚刚看的那几个继承的在这都有了。我们主要看两个,一个orderer
,一个peer0.org1
,其他的都大同小异。
首先是orderer
.
为了占空,显得文章多我就都粘贴上来。
由于好多内容都一样,我们就关注几个核心的点。
一个是command
,含简单,只有一句话orderer
,工作位置是/opt/gopath/src/github.com/hyperledger/fabric
然后端口映射值外部7050,内部7050.
然后来看peer0.org1
.
又来了一个继承的文件peer-base.yaml
文件,这个地方主要做了端口映射,目录挂载等操作,没有太复杂的操作。
peer-base.yaml
这个地方我们主要就是关注command
是peer node start
,工作位置是/opt/gopath/src/github.com/hyperledger/fabric/peer
。
总结
通过上面那么多乱七八糟的阅读,我们可以这样来说fabric的启动流程了。
首先通过启动脚本配置一些用户的自定义参数,生成需要的秘钥啦证书等文件,然后找到对应的yaml文件,按照orderer
、peer
、cli
的顺序启动起来,完成。
通过这个我们就看到了fabric的启动peer node start
以及orderer
这两条指令,接下来就要看源码了。