一、简介
当我们在搭建日常运维环境时,通常需要安装指定版本的服务,来与其他服务进行适配,在这种情况下,通过我们会采用源码包来安装,通过下载指定版本的包。通常为了实现自动化管理,运维人员通常会利用fabric来进行一个集成化管理。
fabric是对ssh的一个集成工具,对我们而言只需要使用相应的接口,来高效的完成工作。
我们常用到的功能基本是:本地或者远端执行命令,分发文件,收集文件,还有一些权限相关的操作。这些fabric都给我们提供了对应的接口。

这里:fabric常用的接口方法可以参考我的这篇文章:
https://blog.csdn.net/xu710263124/article/details/116499057

一般在线上环境下,不建议yum安装,因为许多相关依赖的工具都有版本方面的限制,这会使得环境变的混乱,各个服务之间版本不适配。所以一般情况下,我们采用源码自主安装,规避不必要的因素。

那么如何进行fabric的搭建呢,接下来做出详细解释:
首先,在搭建Fabric系统时,需要提前进行如下环境准备:

1、Linux(Centos):Fabric运行的系统平台;【因为这里是基于Centos搭建】
2、docker,docker-compose:部署虚拟化镜像容器,学习时减少机器开销;链码运行环境为docker容器的沙箱环境;
3、golang:Fabric运行的基础环境,编译Fabric项目。

二、Fabric安装
1.1、安装git

sudo yum install git

1.2、安装和配置Golang(版本>=1.7)
1.2.1、卸载低版本的golang

sudo yum remove golang
sudo yum autoremove

1.2.2、下载并解压go二进制包
下载链接:https://storage.googleapis.com/golang/go1.8.1.linux-amd64.tar.gz
可通过FileZilla、或者scp将下载的包上传至服务器中。
然后解压:

sudo tar -xvf go1.8.1.linux-amd64.tar.gz -C /usr/local/

1.2.3、设置环境变量
在/etc/profile文件末尾(所有用户有效)中添加:

export GOROOT=/usr/local/go
export GOPATH=/home/go
export PATH=$PATH:/usr/local/go/bin

使得环境变量生效:

source /etc/profile

1.2.4、测试

go version

在这里插入图片描述

1.3、安装和配置Docker(这里docker版本要>=1.12)
如果已经安装了docker,可通过docker version查看本机docker版本,若版本较低,需要重新安装,如下:
1.3.1、卸载低版本docker

sudo yum remove docker \
                  docker-common \
                  container-selinux \
                  docker-selinux \
                  docker-engine

1.3.2、安装docker-ce(from repository)
安装yum-utils和wget

sudo yum install -y yum-utils
sudo yum install -y wget

配置系统镜像(如果没有配置)

cd /etc/yum.repos.d
sudo wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
sudo yum clean all
sudo yum makecache
sudo yum update -y

添加stable repository

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

安装docker-ce

sudo yum makecache fast
sudo yum install docker-ce

启动docker

sudo systemctl start docker

1.3.3、配置免sudo使用docker
添加docker用户组【如果不存在】

sudo groupadd docker

将用户添加到docker用户组中

sudo gpasswd -a ubuntu docker

重启docker服务

sudo systemctl restart docker

重启group或者重启x会话

newgrp - docker
或
pkill X

1.3.4、配置快速docker镜像

sudo curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f8c3f422.m.daocloud.io

重启docker服务

sudo systemctl restart docker

1.3.5、测试docker
执行docker version查看版本
在这里插入图片描述
1.4、安装和配置Docker Compose(版本>=1.8.1)
1.4.1、获取

sudo curl -L "https://github.com/docker/compose/releases/download/1.12.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

执行结果如图:
在这里插入图片描述
然后添加执行权限

sudo chmod +x /usr/local/bin/docker-compose

在这里插入图片描述
1.4.2、测试
执行docker-compose version,得到结果如下:

docker-compose version

在这里插入图片描述
成功~
1.5、安装pip及其他包
安装gcc

sudo yum install -y gcc gcc-c++ kernel-devel
sudo yum install -y python-devel libxslt-devel libffi-devel openssl-devel

下载get-pip.py

wget https://bootstrap.pypa.io/get-pip.py

安装pip

sudo python get-pip.py

安装其他包

sudo pip install --upgrade pip
sudo pip install behave nose docker-compose
sudo pip install -I flask python-dateutil pytz pyyaml couchdb flask-cors request pyOpenSSL pysha3 grpcio
sudo pip install urllib3 ndg-httpsclient pyasn1 ecdsa python-slugify grpcio-tools jinja2 b3j0f.aop six

2、编译fabric源码
2.1、获取fabric源码
克隆源码
1、首先要到/home目录下新建go文件夹,用来存放后续fabric源码。

cd /home
mkdir go
cd go
mkdir pkg src bin

2、然后用git获取fabric开源代码
注意:在go的src目录下执行
此时,需要确保本机有装有git,如果没有,可通过

yum install -y git

进行安装,然后进行如下执行:

cd /home/go/src
git clone https://github.com/hyperledger/fabric.git

在这里插入图片描述
耐心等候~~

如果git clone速度过慢的话,可以参考我的这篇文章:
https://blog.csdn.net/xu710263124/article/details/116661363?spm=1001.2014.3001.5502

当下载完毕后,进入fabric目录将版本切换至fabric1.4.3:

#在fabric目录下执行
cd /home/go/src/fabric
git checkout v1.4.3

3、拉取fabric镜像
3.1.1、编辑/home/go/src/fabric/scripts 中的bootstrap.sh 脚本

cd /home/go/src/fabric/scripts
vim bootstrap.sh

可以注释掉以下两个方法:
samplesInstall() 和 binariesInstall() 两个方法
在这里插入图片描述
在这里插入图片描述
3.1.2、然后将该脚本bootstrap.sh 移动到与fabric 同级目录下

mv bootstrap.sh  /home/go/src/
ls

在这里插入图片描述
3.1.3、获取fabric镜像服务
获取fabric镜像服务

wget https://github.com/hyperledger/fabric/releases/download/v1.4.4/hyperledger-fabric-linux-amd64-1.4.4.tar.gz

如下图:
在这里插入图片描述

wget https://github.com/hyperledger/fabric-ca/releases/download/v1.4.4/hyperledger-fabric-ca-linux-amd64-1.4.4.tar.gz

在这里插入图片描述
下载成功后,ls即可看到两个fabric安装包

[root@server1 src]# ls
bin  bootstrap.sh  config  fabric  hyperledger-fabric-ca-linux-amd64-1.4.4.tar.gz  hyperledger-fabric-linux-amd64-1.4.4.tar.gz

3.1.4、然后通过tar指令将压缩包解压到/home/go/src目录下(和fabric同级目录)
执行命令:

[root@server1 src]# pwd
/home/go/src
[root@server1 src]# ls
bin  bootstrap.sh  config  fabric  hyperledger-fabric-ca-linux-amd64-1.4.4.tar.gz  hyperledger-fabric-linux-amd64-1.4.4.tar.gz
tar -xvf hyperledger-fabric-linux-amd64-1.4.4.tar.gz -C /home/go/src
tar -xvf hyperledger-fabric-ca-linux-amd64-1.4.4.tar.gz -C /home/go/src

执行完成后,可看到bin目录下会出现以下结果,config目录会出现以下结果
在这里插入图片描述
3.2.1、获取fabric-samples

cd /home/go/src   #在fabric的同级目录下获取fabric-samples
git clone https://github.com/hyperledger/fabric-samples.git

在这里插入图片描述
下载完成后,

cd fabric-samples
git checkout v1.4.3    #把这个版本也改成1.4.3

3.2.2、将bin和config复制到fabric-samples目录下

cd /home/go/src#如果本来就在此目录下,可以跳过此步骤
cp -r bin/ fabric-samples/
cp -r config/ fabric-samples/

3.2.3、使用./执行编辑过的bootstrap.sh

./bootstrap.sh 1.4.3 1.4.3 0.4.15

执行后,便开始通过docker pull构建镜像,显示如下:
在这里插入图片描述
3.2.4、执行完毕后,可通过docker images查看镜像是否拉取成功

docker images

在这里插入图片描述
3.2.5、最后把fabric-samples的bin加入路径PATH

vim /etc/profile
#在profile最后加上
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin:/home/go/src/fabric-samples/bin

#wq保存退出后执行

source /etc/profile

3.3、Fabric网络搭建
3.3.1、生成Fabric网络
进入目录/home/go/src/fabric-samples/first-network下:

cd /home/go/src/fabric-samples/first-network
./byfn.sh -m generate

自动化脚本 byfn.sh 可以自动帮我们创建网络环境运行时所需的所有内容,但在一些特定情况之下,我们根据不同的需求需要自定义一些设置。
执行结果如下:
在这里插入图片描述
3.3.2、生成组织结构与身份证书
在/home/go/src/fabric-samples/first-network 目录下执行:

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

得到如下输出:

org1.example.com 
org2.example.com

配置文件 crypto-config.yaml 生成 Hyperledger Fabric 网络环境中所需的组织结构及身份证书信息,组织中的成员提供节点服务,相应的证书代表身份,可以在实体间进行通信以及交易时进行签名与验证。
crypto-config.yaml,其配置文件包含如下内容:

OrdererOrgs:
  - Name: Orderer    # Orderer的名称
    Domain: Example Domain    # 域名
    Specs:
      - Hostname: orderer    # hostname + Domain的值组成Orderer节点的完整域名

PeerOrgs:
  - Name: Org1
    Domain: org1.example.com
    EnableNodeOUs: true      # 在msp下生成config.yaml文件
    Template:
      Count: 2
    Users:
      Count: 1

  - Name: Org2
    Domain: org2.example.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 1

该配置文件指定了 OrdererOrgs 及 PeerOrgs 两个组织信息。在 PeerOrgs 配置信息中指定了 Org1 与 Org2 两个组织。每个组织使用Template属性下的 Count 指定了两个节点,Users属性下的 Count 指定了一个用户。

证书和密钥(即MSP材料)将被输出到当前一个名为 crypto-config 的目录中,该目录下有两个子目录:

[root@server1 first-network]# cd crypto-config
[root@server1 crypto-config]# ls
ordererOrganizations  peerOrganizations
[root@server1 crypto-config]# ll
总用量 0
drwxr-xr-x 3 root root 25 511 20:13 ordererOrganizations
drwxr-xr-x 4 root root 54 511 20:13 peerOrganizations

在这里插入图片描述
注:
ordererOrganizations:子目录下包括构成 Orderer 组织(1个 Orderer 节点)的身份信息;
peerOrganizations:子目录下为所有的 Peer 节点组织(2个组织,4个节点)的相关身份信息。其中最关键的是 MSP 目录,代表了实体的身份信息。
3.3.3、生成初始区块
在 fabric-samples/first-network 目录下创建 Orderer 服务启动初始区,指定使用configtx.yaml 文件中定义的 TwoOrgsOrdererGenesis 模板,,生成 Orderer 服务系统通道的初始区块文件。

../bin/configtxgen -profile TwoOrgsOrdererGenesis-outputBlock ./channel-artifacts/genesis.block

在这里插入图片描述
注:configtx.yaml 文件用于创建服务启动初始区块及应用通道交易配置文件,同时指定了指定 Orderer 服务的相关配置以及当前的联盟信息

其中,Orderer部分指定了Orderer节点的信息:

OrdererType 指定了共识排序服务的实现方式,有两种选择(solo 及 Kafka);
1、Addresses 指定了 Orderer 节点的服务地址与端口号;
2、BatchSize 指定了批处理大小,如最大交易数量,最大字节数及建议字节数。

Profiles 部分指定了两个模板:
1、TwoOrgsOrdererGenesis 模板用来生成Orderer服务的初始区块文件;
2、TwoOrgsChannel 模板用来生成应用通道交易配置文件。

3.4、启动first-network
进入fabric-samples目录下的first-network后,执行byfn.sh脚本

#进入first-network目录后执行启动文件
cd /home/go/src/fabric-samples/first-network
./byfn.sh up   

在这里插入图片描述
此时说明启动成功
如果顺利执行到END,则表明fabric环境搭建完毕
在这里插入图片描述
当最终出现了All GOOD, BYFN execution completed就表示已经成功了。

使用top命令可以查看到会有4个peer节点进程
在这里插入图片描述

注:如果中途报错error getting endorser client for channel,先把上面的channel关闭,再编辑resolv.conf

./byfn.sh down
vim /etc/resolv.conf

把这一行注释掉,options timeout:2 attempts:3 rotate single-request-reopen
在这里插入图片描述
注意:最后一定要记得将channel关掉!

OK~至此,fabric的搭建就算完成了
Nice

Logo

更多推荐