老徐

Never underestimate your power to change yourself!

Fabric多台服务器的部署(二)

| Comments

3、下载Fabric镜像

3.1.1 下载Fabric 源码

1、在后面的例子中,有些地方需要用到源码中提到的工具来编译和生成证书等,这里需要下载一下Fabric的源码,在本地下载Fabric官方提供的源码

1
git clone git@github.com:hyperledger/fabric.git

需要注意的时候,需要把下载好的源码放在$GOPATH里,这个环境变量是最初安装GO的设置的,如

1
2
echo $GOPATH
/Users/xuyao/go

那么fabric的源码地址路径应该是

1
/Users/xuyao/go/src/github.com/hyperledger/fabric/
3.1.2 下载Fabric镜像

 如果你看过Fabric官方的快速入门文档https://hyperledgercn.github.io/hyperledgerDocs/getting_started/,应该会对Fabric的镜像文件有个了解,在fabric/examples/e2e_cli文件夹下有个download-dockerimages.sh的脚本文件,他会帮你一键下载所需的镜像文件。

1
2
3
4
# 使脚本可执行
chmod +x download-dockerimages.sh
# 执行脚本
./download-dockerimages.sh

当然也可以使用下面命令下载镜像(需要翻墙)

1
2
curl -sSL http://bit.ly/2ysbOFE | bash -s 1.2.0 
#此处是下载fabric-samples,如果想快速使用byfn可以参考此脚本,后面1.2.0是对应的版本号

也可以根据自己项目需求下载不同的版本

1
2
3
curl -sSL http://bit.ly/2ysbOFE | bash -s <fabric> <fabric-ca> <thirdparth>
curl -sSL http://bit.ly/2ysbOFE | bash -s 1.2.0 1.2.0 0.4.10
#后面三个参数分别代表Fabric, Fabric-ca和第三方平台镜像版本号

无法翻墙,可以用下面命令

1
curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh | bash -s 1.2.0 1.2.0 0.4.10

下载完成后使用docker images可以看到下载的镜像文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
docker images #查看所以镜像文件
hyperledger/fabric-ca          latest               35311d8617b4        7 days ago          240 MB
hyperledger/fabric-ca          x86_64-1.0.0-alpha   35311d8617b4        7 days ago          240 MB
hyperledger/fabric-couchdb     latest               f3ce31e25872        7 days ago          1.51 GB
hyperledger/fabric-couchdb     x86_64-1.0.0-alpha   f3ce31e25872        7 days ago          1.51 GB
hyperledger/fabric-kafka       latest               589dad0b93fc        7 days ago          1.3 GB
hyperledger/fabric-kafka       x86_64-1.0.0-alpha   589dad0b93fc        7 days ago          1.3 GB
hyperledger/fabric-zookeeper   latest               9a51f5be29c1        7 days ago          1.31 GB
hyperledger/fabric-zookeeper   x86_64-1.0.0-alpha   9a51f5be29c1        7 days ago          1.31 GB
hyperledger/fabric-orderer     latest               5685fd77ab7c        7 days ago          182 MB
hyperledger/fabric-orderer     x86_64-1.0.0-alpha   5685fd77ab7c        7 days ago          182 MB
hyperledger/fabric-peer        latest               784c5d41ac1d        7 days ago          184 MB
hyperledger/fabric-peer        x86_64-1.0.0-alpha   784c5d41ac1d        7 days ago          184 MB
hyperledger/fabric-javaenv     latest               a08f85d8f0a9        7 days ago          1.42 GB
hyperledger/fabric-javaenv     x86_64-1.0.0-alpha   a08f85d8f0a9        7 days ago          1.42 GB
hyperledger/fabric-ccenv       latest               91792014b61f        7 days ago          1.29 GB
hyperledger/fabric-ccenv       x86_64-1.0.0-alpha   91792014b61f        7 days ago          1.29 GB
3.1.3 常用的Docker 命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#停止正在运行的所有网络
docker stop -f $(docker ps -aq)

#删除正在运行的所有网络
docker rm -f $(docker ps -aq)

#删除某个镜像
docker rmi <IMAGE ID>

#查看某个容器的日志
docker logs -f  < container-id >

#进入某个容器内部
docker exec -it < container-id > bash

#查看docker 运行状态
service docker status

# 启动/关闭docker
sudo service docker start|stop

4、下载 Fabric-sample 源码

1、fabric-sample里有很多快速启动fabric的例子,官方文档给了一个快速启动first-network的例子 https://hyperledgercn.github.io/hyperledgerDocs/build_network_zh/,在first-network里面,每个组织持有2个peer节点,以及一个“solo”排序服务,这里一个比较简单的fabric网络,如果只是想跑一下fabric网络,试下手感的话,可以按照官方的文档来跑一篇。
  这里我们用的是官网提供的另一个例子,balance-transfer,它是一个集成了nodejs sdk的一个node.js的简单例子。

1
2
#下载fabric-sample
git clone git@github.com:hyperledger/fabric-samples.git

2、后期我们的项目都是用nodejs来做的,所以很多基础的东西可以复用balance-transfer里的,现在我们可以自己建了项目仓库叫trace_redwine,把fabric-samples/balance-transfer/里的文件全部copy到我们的trace_redwine里,删除一些不必要的文件,这里一个自己的fabric项目雏形就出来了。

5、修改配置脚本

5.1.1 修改crypto-config.yaml文件

  crypto-config.yaml文件是配置节点信息的,你可以配置你的orderer,peer数量,以及域名的设置,主要配置的是OrdererOrgs和PeerOrgs
OrdererOrgs的配置

1
2
3
4
5
6
OrdererOrgs:
  - Name: Orderer
    Domain: xuyao.com
    Specs:
      - Hostname: orderer1
      - Hostname: orderer2

PeerOrgs的配置信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PeerOrgs:
  - Name: Org1 #组织1
    Domain: org1.xuyao.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 1
  - Name: Org2 #组织2
    Domain: org2.xuyao.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 1
5.1.2 使用generateArtifacts.sh脚本生成证书文件

  现在我们需要生成一些证书和启动这个fabric网络,生成证书的话我们可以使用官网提供的generateArtifacts.sh脚本来生成,文件路径在/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/下,稍微修改,因为我只需要生成证书,创世纪块,和channel.tx,具体脚本如下,需要说明的是如果你只是运行官方的first-network,可以忽略这些配置,因为first-network已经帮你生成好了这些东西

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/env bash
CRYPTOGEN=$PWD/bin/cryptogen
CONFIGTXGEN=$PWD/bin/configtxgen
CHANNEL_NAME=$1
: ${CHANNEL_NAME:="mychannel"}
function buildCryptogenTools(){
  if [ -f "$CONFIGTXGEN" ]; then
      echo
  else
      echo "configtxgen not found"
      exit 1
  fi
}

function createPeerTemplate() {
    cp ../docker-composer-peer-template.yaml ../docker-composer
}

## Generates Org certs using cryptogen tool
function generateCerts (){
  echo
  echo "##########################################################"
  echo "##### Generate certificates using cryptogen tool #########"
  echo "##########################################################"
  if [ -d "crypto-config" ]; then
      rm -Rf crypto-config
    fi
  ${CRYPTOGEN} generate --config=./crypto-config.yaml
  echo
}

## Generate orderer genesis block , channel configuration transaction and anchor peer update transactions
function generateChannelArtifacts() {
  echo "##########################################################"
  echo "#########  Generating Orderer Genesis block ##############"
  echo "##########################################################"
  ${CONFIGTXGEN} -profile TwoOrgsOrdererGenesis -outputBlock ./genesis.block

  echo
  echo "#################################################################"
  echo "### Generating channel configuration transaction 'channel.tx' ###"
  echo "#################################################################"
  ${CONFIGTXGEN} -profile TwoOrgsChannel -outputCreateChannelTx ./mychannel.tx -channelID ${CHANNEL_NAME} 
}

buildCryptogenTools
generateCerts
generateChannelArtifacts

generateCerts是生成证书的方法,它会加载crypto-config.yaml里的配置信息,并根据你的配置信息来生成相应的证书。
generateChannelArtifacts是生成orderer的创世纪块(genesis.block)和channel.tx文件。
上面的脚本运行之后,整个Fabric网络需要的一些证书就完成了,以本地例子为例,生成如下的一些文件数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
├── crypto-config
│   ├── ordererOrganizations
│   │   └── mbasechain.com
│   │       ├── ca
│   │       │   ├── 2ae1db347d3137d66fda66f59fb33cd2c3c22a4aadf7f97f800491fb91a20c32_sk
│   │       │   └── ca.mbasechain.com-cert.pem
│   │       ├── msp
│   │       │   ├── admincerts
│   │       │   │   └── Admin@mbasechain.com-cert.pem
│   │       │   ├── cacerts
│   │       │   │   └── ca.mbasechain.com-cert.pem
│   │       │   └── tlscacerts
│   │       │       └── tlsca.mbasechain.com-cert.pem
│   │       ├── orderers
│   │       │   ├── orderer.mbasechain.com
│   │       │   │   └── msp
│   │       │   │       └── keystore
│   │       │   ├── orderer1.mbasechain.com
│   │       │   │   ├── msp
│   │       │   │   │   ├── admincerts
│   │       │   │   │   │   └── Admin@mbasechain.com-cert.pem
│   │       │   │   │   ├── cacerts
│   │       │   │   │   │   └── ca.mbasechain.com-cert.pem
│   │       │   │   │   ├── keystore
│   │       │   │   │   │   └── 9af18a6c9dd8f34db73a70c1d066e6948216db534af9e4f89029158089d56cf1_sk
│   │       │   │   │   ├── signcerts
│   │       │   │   │   │   └── orderer1.mbasechain.com-cert.pem
│   │       │   │   │   └── tlscacerts
│   │       │   │   │       └── tlsca.mbasechain.com-cert.pem
│   │       │   │   └── tls
│   │       │   │       ├── ca.crt
│   │       │   │       ├── server.crt
│   │       │   │       └── server.key
│   │       │   └── orderer2.mbasechain.com
│   │       │       ├── msp
│   │       │       │   ├── admincerts
│   │       │       │   │   └── Admin@mbasechain.com-cert.pem
│   │       │       │   ├── cacerts
│   │       │       │   │   └── ca.mbasechain.com-cert.pem
│   │       │       │   ├── keystore
│   │       │       │   │   └── fb54a7774228bf31311b5aa0ab58b4c0d3f9aa0e83bb1906cb6926c033445976_sk
│   │       │       │   ├── signcerts
│   │       │       │   │   └── orderer2.mbasechain.com-cert.pem
│   │       │       │   └── tlscacerts
│   │       │       │       └── tlsca.mbasechain.com-cert.pem
│   │       │       └── tls
│   │       │           ├── ca.crt
│   │       │           ├── server.crt
│   │       │           └── server.key
│   │       ├── tlsca
│   │       │   ├── 9ceda704a49805f19c0f3cde2c1d42096d8e14da697567b0a02b051656f735de_sk
│   │       │   └── tlsca.mbasechain.com-cert.pem
│   │       └── users
│   │           └── Admin@mbasechain.com
│   │               ├── msp
│   │               │   ├── admincerts
│   │               │   │   └── Admin@mbasechain.com-cert.pem
│   │               │   ├── cacerts
│   │               │   │   └── ca.mbasechain.com-cert.pem
│   │               │   ├── keystore
│   │               │   │   └── 1c7c1a76c08e30990192ed0f6eb24c2efd7492b684f92ebf844591fb38d8b020_sk
│   │               │   ├── signcerts
│   │               │   │   └── Admin@mbasechain.com-cert.pem
│   │               │   └── tlscacerts
│   │               │       └── tlsca.mbasechain.com-cert.pem
│   │               └── tls
│   │                   ├── ca.crt
│   │                   ├── client.crt
│   │                   └── client.key
│   └── peerOrganizations
│       ├── org1.mbasechain.com
│       │   ├── ca
│       │   │   ├── 6cb226be4aec981541e6cbdd66742139c1157e88afe06edfb16f12ecc3056bf5_sk
│       │   │   └── ca.org1.mbasechain.com-cert.pem
│       │   ├── msp
│       │   │   ├── admincerts
│       │   │   │   └── Admin@org1.mbasechain.com-cert.pem
│       │   │   ├── cacerts
│       │   │   │   └── ca.org1.mbasechain.com-cert.pem
│       │   │   ├── config.yaml
│       │   │   └── tlscacerts
│       │   │       └── tlsca.org1.mbasechain.com-cert.pem
│       │   ├── peers
│       │   │   ├── peer0.org1.mbasechain.com
│       │   │   │   ├── msp
│       │   │   │   │   ├── admincerts
│       │   │   │   │   │   └── Admin@org1.mbasechain.com-cert.pem
│       │   │   │   │   ├── cacerts
│       │   │   │   │   │   └── ca.org1.mbasechain.com-cert.pem
│       │   │   │   │   ├── config.yaml
│       │   │   │   │   ├── keystore
│       │   │   │   │   │   └── b9d2875104a103f635c8ec21757710455eec0fbfb2c59f7b33a09461b4138267_sk
│       │   │   │   │   ├── signcerts
│       │   │   │   │   │   └── peer0.org1.mbasechain.com-cert.pem
│       │   │   │   │   └── tlscacerts
│       │   │   │   │       └── tlsca.org1.mbasechain.com-cert.pem
│       │   │   │   └── tls
│       │   │   │       ├── ca.crt
│       │   │   │       ├── server.crt
│       │   │   │       └── server.key
│       │   │   └── peer1.org1.mbasechain.com
│       │   │       ├── msp
│       │   │       │   ├── admincerts
│       │   │       │   │   └── Admin@org1.mbasechain.com-cert.pem
│       │   │       │   ├── cacerts
│       │   │       │   │   └── ca.org1.mbasechain.com-cert.pem
│       │   │       │   ├── config.yaml
│       │   │       │   ├── keystore
│       │   │       │   │   └── 68da53988aa0b3e50b6a90ac90495b4021fdb3456bbca375aca13cf206d18b0c_sk
│       │   │       │   ├── signcerts
│       │   │       │   │   └── peer1.org1.mbasechain.com-cert.pem
│       │   │       │   └── tlscacerts
│       │   │       │       └── tlsca.org1.mbasechain.com-cert.pem
│       │   │       └── tls
│       │   │           ├── ca.crt
│       │   │           ├── server.crt
│       │   │           └── server.key
│       │   ├── tlsca
│       │   │   ├── b2ef19d2488129396546090955ddf2d1ec267cd699dc2218516df72f5ea235f4_sk
│       │   │   └── tlsca.org1.mbasechain.com-cert.pem
│       │   └── users
│       │       ├── Admin@org1.mbasechain.com
│       │       │   ├── msp
│       │       │   │   ├── admincerts
│       │       │   │   │   └── Admin@org1.mbasechain.com-cert.pem
│       │       │   │   ├── cacerts
│       │       │   │   │   └── ca.org1.mbasechain.com-cert.pem
│       │       │   │   ├── keystore
│       │       │   │   │   └── 12f72b7332170a7b8e4214eb268c419053a2386f34b149f3e7c5820f767a2d30_sk
│       │       │   │   ├── signcerts
│       │       │   │   │   └── Admin@org1.mbasechain.com-cert.pem
│       │       │   │   └── tlscacerts
│       │       │   │       └── tlsca.org1.mbasechain.com-cert.pem
│       │       │   └── tls
│       │       │       ├── ca.crt
│       │       │       ├── client.crt
│       │       │       └── client.key
│       │       └── User1@org1.mbasechain.com
│       │           ├── msp
│       │           │   ├── admincerts
│       │           │   │   └── User1@org1.mbasechain.com-cert.pem
│       │           │   ├── cacerts
│       │           │   │   └── ca.org1.mbasechain.com-cert.pem
│       │           │   ├── keystore
│       │           │   │   └── 610899489aa3d881dcc6e9f3d421981003b1504e5b15c00426edd69505ef3519_sk
│       │           │   ├── signcerts
│       │           │   │   └── User1@org1.mbasechain.com-cert.pem
│       │           │   └── tlscacerts
│       │           │       └── tlsca.org1.mbasechain.com-cert.pem
│       │           └── tls
│       │               ├── ca.crt
│       │               ├── client.crt
│       │               └── client.key
│       ├── org2.mbasechain.com
│       │   ├── ca
│       │   │   ├── 018041cad6bac4a43ab80e736ba333a759a14ee6e88226944ec904dfcba633ab_sk
│       │   │   └── ca.org2.mbasechain.com-cert.pem
│       │   ├── msp
│       │   │   ├── admincerts
│       │   │   │   └── Admin@org2.mbasechain.com-cert.pem
│       │   │   ├── cacerts
│       │   │   │   └── ca.org2.mbasechain.com-cert.pem
│       │   │   ├── config.yaml
│       │   │   └── tlscacerts
│       │   │       └── tlsca.org2.mbasechain.com-cert.pem
│       │   ├── peers
│       │   │   ├── peer0.org2.mbasechain.com
│       │   │   │   ├── msp
│       │   │   │   │   ├── admincerts
│       │   │   │   │   │   └── Admin@org2.mbasechain.com-cert.pem
│       │   │   │   │   ├── cacerts
│       │   │   │   │   │   └── ca.org2.mbasechain.com-cert.pem
│       │   │   │   │   ├── config.yaml
│       │   │   │   │   ├── keystore
│       │   │   │   │   │   └── cfb79d8ab3c543a8732227cd2b441ce30e82ff1d4aad5f59c1338454edeeddf1_sk
│       │   │   │   │   ├── signcerts
│       │   │   │   │   │   └── peer0.org2.mbasechain.com-cert.pem
│       │   │   │   │   └── tlscacerts
│       │   │   │   │       └── tlsca.org2.mbasechain.com-cert.pem
│       │   │   │   └── tls
│       │   │   │       ├── ca.crt
│       │   │   │       ├── server.crt
│       │   │   │       └── server.key
│       │   │   └── peer1.org2.mbasechain.com
│       │   │       ├── msp
│       │   │       │   ├── admincerts
│       │   │       │   │   └── Admin@org2.mbasechain.com-cert.pem
│       │   │       │   ├── cacerts
│       │   │       │   │   └── ca.org2.mbasechain.com-cert.pem
│       │   │       │   ├── config.yaml
│       │   │       │   ├── keystore
│       │   │       │   │   └── b92cbb64895e522299770c9f84ad9954753f348d926da956d4458cf545b99ef6_sk
│       │   │       │   ├── signcerts
│       │   │       │   │   └── peer1.org2.mbasechain.com-cert.pem
│       │   │       │   └── tlscacerts
│       │   │       │       └── tlsca.org2.mbasechain.com-cert.pem
│       │   │       └── tls
│       │   │           ├── ca.crt
│       │   │           ├── server.crt
│       │   │           └── server.key
│       │   ├── tlsca
│       │   │   ├── 2674e511ae5eb66b4964a2a93cc917f5e8fbd49e95fc97d12b546c9ce933e932_sk
│       │   │   └── tlsca.org2.mbasechain.com-cert.pem
│       │   └── users
│       │       ├── Admin@org2.mbasechain.com
│       │       │   ├── msp
│       │       │   │   ├── admincerts
│       │       │   │   │   └── Admin@org2.mbasechain.com-cert.pem
│       │       │   │   ├── cacerts
│       │       │   │   │   └── ca.org2.mbasechain.com-cert.pem
│       │       │   │   ├── keystore
│       │       │   │   │   └── 4ca087cf7e8ecd260b84782ec8456b693ada673b902d525fb0dfcbf4bc797e38_sk
│       │       │   │   ├── signcerts
│       │       │   │   │   └── Admin@org2.mbasechain.com-cert.pem
│       │       │   │   └── tlscacerts
│       │       │   │       └── tlsca.org2.mbasechain.com-cert.pem
│       │       │   └── tls
│       │       │       ├── ca.crt
│       │       │       ├── client.crt
│       │       │       └── client.key
│       │       └── User1@org2.mbasechain.com
│       │           ├── msp
│       │           │   ├── admincerts
│       │           │   │   └── User1@org2.mbasechain.com-cert.pem
│       │           │   ├── cacerts
│       │           │   │   └── ca.org2.mbasechain.com-cert.pem
│       │           │   ├── keystore
│       │           │   │   └── 950ff48168df356652a4fa6d5f9d3aa7d6d7694045cc3bb7f83587686794a345_sk
│       │           │   ├── signcerts
│       │           │   │   └── User1@org2.mbasechain.com-cert.pem
│       │           │   └── tlscacerts
│       │           │       └── tlsca.org2.mbasechain.com-cert.pem
│       │           └── tls
│       │               ├── ca.crt
│       │               ├── client.crt
│       │               └── client.key
├── crypto-config.yaml
├── genesis.block
├── mychannel.tx
未完待续。。。
参考资料

https://hyperledgercn.github.io/hyperledgerDocs/getting_started/
https://www.codetd.com/article/2709144
https://hyperledgercn.github.io/hyperledgerDocs/build_network_zh/

Comments