参考文档:https://hyperledger-fabric.readthedocs.io/en/release-1.1/index.html
- 前言:此文章主要由三部分组成:第一部分是整个完整的部署过程,第二部分是整个过程中的问题的汇总,最后是整个过程的个人小结部分
- 用的机子最好内存不低于4g
一、部署过程
(一)更改aptget源
(本机是Ubuntu16.04,下载软件默认是从国外下载的,速度较慢,也容易出现问题,所以在进行环境的部署之前,最好先更新)
- 复制原文件备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
- 编辑源列表文件(这里稍微讲一下vim的简单操作)
sudo vim /etc/apt/sources.list
a.进入vim的命令模式,输入i/a进行编辑
b.输入G,将光标移到最后一行,输入1,.d
将文件内容全部删除,将下面的内容复制粘贴进去
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable
# deb-src [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable
c.输入Esc退出输入模式,输入:w
保存内容,输入:q
退出vim
(二)基本环境部署(Docker,Docker-compose,Go,Git)
1、Docker安装
- 安装需要的工具
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
- 添加Docker的GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 设置源
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
- 更新apt软件包
sudo apt-get update
安装
sudo apt-get install docker-ce
- 查看docker版本信息
docker version
结果图如下
2、Docker-compose安装
- 安装python-pip
sudo apt-get install python-pip
- 安装Docker-Compose
sudo curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
- 查看Docker-Compose版本
docker-compose version
结果图如下
3、Go安装
- 下载Golang
wget https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz
- 解压安装包
sudo tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz
- 设置环境变量
vim /etc/profile
修改内容为(在path后添加)
export GOROOT=/usr/local/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
export GOPATH=/opt/gopath
- 刷新修改的配置,并测试是否成功
source /etc/profile
go version
结果如下
4、git安装
- 检查系统是否安装
git version
- 输入
sudo apt-get install git
结果如下
至此,基本环境安装完成
(三)源代码的部署
1、下载fabric
- 进入go的path目录
cd $GOPATH
- 新建文件夹
mkdir -p src/github.com/hyperledger
- 进入文件夹
/go/src/github.com/hyperledger
- 下载fabric
git clone https://github.com/hyperledger/fabric.git
- 进入到fabric目录查看fabric的git版本,一般默认是最新版本的,本文以1.1.0版本
cd fabric/
git branch -a
- 切换到release-1.1分支
git checkout release-1.1
2、下载fabric-samples
- 进入fabric同级目录
git clone -b master https://github.com/hyperledger/fabric-samples.git
- 下载完成后进入到fabric-samples目录
cd fabric-samples
- 使用git tag命令查看版本列表,根据个人需要将源码切换到对应的版本,本次使用的是1.1版。
git checkout release-1.1
完成后,目录结构如下:
3、下载镜像和要执行的二进制文件
- 进到fabric目录下的scripts,查看你的bootstrap.sh
cd fabric/scripts/
vim bootstrap.sh
如果不是如下的版本v1.1.0
将以下内容复制到你的.sh文件中,保存后退出
#!/bin/bash
#
# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
# if version not passed in, default to latest released version
export VERSION=${1:-1.1.0}
# if ca version not passed in, default to latest released version
export CA_VERSION=${2:-$VERSION}
# current version of thirdparty images (couchdb, kafka and zookeeper) released
export THIRDPARTY_IMAGE_VERSION=0.4.6
export ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')" | awk '{print tolower($0)}')
#Set MARCH variable i.e ppc64le,s390x,x86_64,i386
MARCH=`uname -m`
dockerFabricPull() {
local FABRIC_TAG=$1
for IMAGES in peer orderer ccenv javaenv tools; do
echo "==> FABRIC IMAGE: $IMAGES"
echo
- 运行bookstrap.sh镜像(这个过程有点久,而且可能网络不好的话会出现问题)
sudo ./bootstrap.sh
- 顺利下载后,查看镜像
sudo docker image
- 下载二进制文件,进入fabric-samples文件
cd fabric-samples/
wget https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/linux-amd64-1.1.0/hyperledger-fabric-linux-amd64-1.1.0.tar.gz
- 解压下载的文件,会发现多了bin和config两个个文件夹
tar -zxvf hyperledger-fabric-linux-amd64-1.1.0.tar.gz
- 把bin路径配置环境变量,用pwd命令得到路径
/opt/go/src/github.com/hyperledger/fabric-samples/bin
cd bin/
pwd
export PATH=$PATH:/opt/go/src/github.com/hyperledger/fabric-samples/bin
- 查看环境变量
export
(四)运行和测试
1、运行
- 进入first-netwok:
cd first-network
- 生成 配置文件
sudo ./byfn.sh -m generate
- 启动项目,遇到提示就输入“y"
sudo ./byfn.sh up
结果图如下,说明网络结构生成,整个网络有两个组织,整个网络启动包括执行了一下操作:
1、生成创世区块、通道、每个组织的msp等信息,保存在channel-artifacts文件夹中,配置信息对应configtx.yaml文件。
2、生成orderer和peer使用的公私钥和证书等信息,保存在crypto-config文件夹中,配置信息对应crypto-config.yaml文件。
3、创建channel、加入channel、为通道的每个组织设置锚节点,安装chaincode,实例化chaincode,查询chaincode,调用chaincode等操作。
- 添加组织:
sudo ./eyfn.sh up
效果如下,成功添加第三个组织
2、测试
- 测试chaincode,需要先进入到cli容器,后续的操作都在容器内进行。
docker exec -it cli bash
- 按照官方给出的,有a和b两个账户,查看a账户的余额。
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
- a账户的余额是80。
- 查看b账户的余额
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'
- b账户的余额是220
- 下面做以下转账测试,把b账户的钱转给a账户20。
peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -c '{"Args":["invoke","b","a","20"]}'
测试成功
- 关闭
sudo ./byfn.sh -m down
二、部署过程中的问题
1、一开始未更改aptget源,下载docker镜像的时候出现错误,多方百度后找到上文给出的源
2、一开始执行一些文件的时候,没有加上sudo开头出现如下错误,百度的解释也是千奇百怪,最后询问师兄才知道docker需要root权限
3、文档中给出了用curl -sSL https://goo.gl/6wtTN5 | bash -s 1.1.0
这样的命令来下载镜像,但是,返回了443错误,原因是,需要翻墙,所以只能另找出路。
1)一开始到处找资源,找到了一个可以运行的文件,后来下载完成之后发现它不是v1.1.0,删除镜像重新下载
2)直接去下载了整个fabric v1.1.0的tar包,然后找到里面的bootstrap.sh的内容复制粘贴到我的fabric的bootstrap.sh文件中,再执行这个文件,时间有点久,需要耐心等待,顺利下载
三、个人小结
1、Linux部署环境要比windows方便快捷很多,出现的问题也相对少一写
2、找解决方法的时候,文章要全部看完再尝试里面的解决方法,也要看清楚相关的版本,不然操作完以后发现错误再来解决就可能会很麻烦
3、文件的存放路径要分配好,才不会出现找不到的情况
4、每下载一个包解压以后,要习惯性打开看看里面的目录结构,接下来的任务就是将fabric里面的相关的目录结构和文件的功能进行了解,之后再对文档中的其他模块进行尝试