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

1、前言

 Hyperledger Fabric是一个提供分布式账本解决方案的平台。Hyperledger Fabric由模块化架构支撑,并具备极佳的保密性、可伸缩性、灵活性和可扩展性。Hyperledger Fabric被设计成支持不同的模块组件直接拔插启用,并能适应在经济生态系统中错综复杂的各种场景。
 目前Fabric在区块链溯源场景应用的挺多,农产品,奢侈品,艺术品,红酒等方面都看过到案例,区块链可以保存产品各个环节的数据,并上链,用户最后可能只需扫描一个二维码,就可以查出某个产品整个的生产过程,与中心化数据不同的是,区块链溯源项目数据一旦上链后不可更改,而且数据公开透明,任何一方都没有权利来更改它,同时每个环节需要为你上链的数据负责,如果哪天消费查出某个环节的数据是假的,由于账本数据是分布式的、不可更改的,大家只相信数据,商家也无法抵赖,最后商家只能认错,名誉扫地,所以区块链本质上是解决一个多方协作的一个信任问题,而对于一件事情需要多方协作,共同记账来一起完成的,Fabric作为联盟链,显然很符合这种需求。

2、环境安装及服务器配置

2.1 环境安装

在配置Fabric网络之前,需要安装一下相关环境,包括GO语言安装和Docker的安装

2.1.1 GO语言安装

1、从官网下载它的安装包,地址:https://golang.org/dl/,根据自己电脑或服务器不同系统下载对应的安装包。
2、下载后解压包

tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz

3、配置GO的环境变量

export PATH=$PATH:/usr/local/go/bin
export GOPATH=/opt/gopath

最后执行source命令,使其生效

source profile

最后打印一下GO版本

go version
go version go1.10.1 darwin/amd64

ubuntu系统下安装

sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go

设置环境变量

export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

自定义安装
打开golang官网,根据自己的系统下载对应的安装包,可以用curl直接在服务器下载,如果在服务器上下载不了,也可以先下载到本地,然后使用scp上传到服务器上,如我下载了一个ceontos的go1.11.4.linux-amd64.tar.gz包到本地,再使用scp上传到服务器

使用scp上传到服务器上
scp go1.11.4.linux-amd64.tar.gz root@1x.xx.xx.xx:/opt/

登录服务器,进入安装包所在的位置,使用命令解压到对应的文件夹

tar -C /usr/local -xzf go1.11.4.linux-amd64.tar.gz

设置环境变量

export PATH=$PATH:/usr/local/go/bin

最后查看go版本

$ go version
go version go1.11.4 linux/amd64

不同系统安装略有不同,具体建议查看官方文档 https://golang.org/doc/install

2.1.2 Docker、Docker-Compose的安装

docker安装不同系统也是有区别的,我是mac电脑,安装也相对简单,到docker官网下载一个包,直接安装就行,装好后可以查一下docker的版本,值得注意的是,mac电脑只安装docker就行,docker版本已经包括了compose和其它docker应用,所以无需再另行安装compose

docker version
#docker的版本信息
Client:
 Version:           18.06.1-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        e68fc7a
 Built:             Tue Aug 21 17:21:31 2018
 OS/Arch:           darwin/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.1-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       e68fc7a
  Built:            Tue Aug 21 17:29:02 2018
  OS/Arch:          linux/amd64
  Experimental:     true

如果是Linux系统,需要安装docker和docker-compose,可以参考这里https://yeasy.gitbooks.io/docker_practice/install/,针对不同的linux系统,都有安装方法,写的比较详细,也可以参考官网信息https://docs.docker.com/compose/install/

ubuntu系统安装docker、docker-compose

卸载旧版本的docker

$ sudo apt-get remove docker \
               docker-engine \
               docker.io

鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。
为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥。

$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
    "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
    $(lsb_release -cs) \
    stable"

安装docker-ce

$ sudo apt-get update

$ sudo apt-get install docker-ce

安装docker-compose,在 Linux 上的也安装十分简单,从 官方 GitHub Release 处直接下载编译好的二进制文件即可。
例如,在 Linux 64 位系统上直接下载对应的二进制包。

curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
2.1.3 nodejs安装

 因为我们项目用的是nodejs SDK,所以实际项目中还需要安装nodejs和npm来跑项目,因为Fabric目前只支持nodejs v8.4.0~v9.0.0的版本(2018-10),所以建议安装的时候指定一个固定的版本,比如v8.9.0,我用的是这个版本,还是很稳定的,当然也可以先下载一个nvm来管理nodejs的版本,不同项目需要不同的node版本,使用nvm可以管理不同的node版本。
1、安装nvm,执行下面命令下载安装脚本

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
#输出

=> Close and reopen your terminal to start using nvm or run the following to use it now:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

检查下是否安装成功

nvm --version
0.33.11

2、安装nodejs,使用nvm ls-remote查看远程可安装的node版本

nvm ls-remote 
v8.0.0
v8.1.0
v8.1.1
v8.1.2
v8.1.3
v8.1.4
v8.2.0
v8.2.1
v8.3.0
v8.4.0
v8.5.0
v8.6.0
v8.7.0
v8.8.0
v8.8.1
v8.9.0

找到自己想要安装的版本来安装nodejs

nvm install 8.9.0

使用node命令查看是否安装成功

node -v
v8.9.1

也可以使用nvm ls来查看当前环境有几个node版本

nvm ls

->       v8.9.1
         system
default -> 8.9.1 (-> v8.9.1)
node -> stable (-> v8.9.1) (default)
stable -> 8.9 (-> v8.9.1) (default)
iojs -> N/A (default)
lts/* -> lts/dubnium (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.15.0 (-> N/A)
lts/carbon -> v8.14.0 (-> N/A)
lts/dubnium -> v10.14.1 (-> N/A)

可以看到目前只安装了8.9.0,而且系统默认使用的就是8.9.0,如果想改变系统的默认版本,可以使用如下命令

nvm use 8.9.0
Now using node v10.13.0 (npm v6.4.1)
2.1.4 Git工具安装

Git安装就简单了吧,做过开发的人应该都安装过,这里贴个安装教程,
https://git-scm.com/book/en/v2/Getting-Started-Installing-Git,跟着上面安装就行。

2.2 服务器配置说明

 说明一下服务器的整个情况,我申请了4台服务器, 做4个peer,两个orderer,具体的crypto-config.yaml配置如下:


OrdererOrgs:
  # ---------------------------------------------------------------------------
  # Orderer
  # ---------------------------------------------------------------------------
  - Name: Orderer
    Domain: xuyao.com
    # ---------------------------------------------------------------------------
    # "Specs" - See PeerOrgs below for complete description
    # ---------------------------------------------------------------------------
    Specs:
      - Hostname: orderer1
      - Hostname: orderer2
# ---------------------------------------------------------------------------
# "PeerOrgs" - Definition of organizations managing peer nodes
# ---------------------------------------------------------------------------
PeerOrgs:
  # ---------------------------------------------------------------------------
  # Org1
  # ---------------------------------------------------------------------------
  - Name: Org1
    Domain: org1.xuyao.com
    EnableNodeOUs: true
    # ---------------------------------------------------------------------------
    # "Specs"
    # ---------------------------------------------------------------------------
    # Uncomment this section to enable the explicit definition of hosts in your
    # configuration.  Most users will want to use Template, below
    #
    # Specs is an array of Spec entries.  Each Spec entry consists of two fields:
    #   - Hostname:   (Required) The desired hostname, sans the domain.
    #   - CommonName: (Optional) Specifies the template or explicit override for
    #                 the CN.  By default, this is the template:
    #
    #                              "{{.Hostname}}.{{.Domain}}"
    #
    #                 which obtains its values from the Spec.Hostname and
    #                 Org.Domain, respectively.
    # ---------------------------------------------------------------------------
    # Specs:
    #   - Hostname: foo # implicitly "foo.org1.example.com"
    #     CommonName: foo27.org5.example.com # overrides Hostname-based FQDN set above
    #   - Hostname: bar
    #   - Hostname: baz
    # ---------------------------------------------------------------------------
    # "Template"
    # ---------------------------------------------------------------------------
    # Allows for the definition of 1 or more hosts that are created sequentially
    # from a template. By default, this looks like "peer%d" from 0 to Count-1.
    # You may override the number of nodes (Count), the starting index (Start)
    # or the template used to construct the name (Hostname).
    #
    # Note: Template and Specs are not mutually exclusive.  You may define both
    # sections and the aggregate nodes will be created for you.  Take care with
    # name collisions
    # ---------------------------------------------------------------------------
    Template:
      Count: 2
      # Start: 5
      # Hostname: {{.Prefix}}{{.Index}} # default
    # ---------------------------------------------------------------------------
    # "Users"
    # ---------------------------------------------------------------------------
    # Count: The number of user accounts _in addition_ to Admin
    # ---------------------------------------------------------------------------
    Users:
      Count: 1
  # ---------------------------------------------------------------------------
  # Org2: See "Org1" for full specification
  # ---------------------------------------------------------------------------
  - Name: Org2
    Domain: org2.xuyao.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 1

  # ---------------------------------------------------------------------------
  # Org3: See "Org1" for full specification
  # ---------------------------------------------------------------------------
  - Name: Org3
    Domain: org3.xuyao.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 1

  # ---------------------------------------------------------------------------
  # Org4: See "Org1" for full specification
  # ---------------------------------------------------------------------------
  - Name: Org4
    Domain: org4.xuyao.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 1

每台服务器的运行大致如下

服务器名称 功能标识
server1 Org1, Peer1,Orderer1,Ca1,Kafka1, Zookeeper1
server1 Org2, Peer2,Orderer2,Ca2,Kafka2, Zookeeper2
server3 Org3, Peer3,Ca3,Kafka3, Zookeeper3
server4 Org4, Peer4,Ca4,Kafka4

每台服务器一个Org组织,和一个节点, 其中两台服务器有Orderer服务,四台服务器都有Ca认证。

未完待续.....
参考资料

https://golang.org/doc/install
https://github.com/golang/go/wiki/Ubuntu
https://yeasy.gitbooks.io/docker_practice/install/
https://github.com/docker/compose/releases
https://linuxize.com/post/how-to-install-node-js-on-centos-7
https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
https://www.cnblogs.com/aberic/p/7527831.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容