title: Hyperledger fabric环境搭建
tags: Hyperledger, fabric ,区块链
一、需要的环境
注意:本文是在CentOS下演示
1.安装golang
-
下载golang
git clone https://studygolang.com/dl/golang/go1.11.linux-amd64.tar.gz
-
解压文件至 /usr/local目录。
tar -C /usr/local -xzf go1.11.linux-amd64.tar.gz
-
配置环境变量
打开vim /etc/profile
添加下面的内容
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
执行 source /etc/profile
使配置重启
2.安装git
- 安装git
yum install curl-devel expat-devel gettext-devel \ openssl-devel zlib-devel
yum -y install git-core
- 检查安装
git --version
3.安装Docker 、Docker compose
-
安装Docker
可以看我之前的文章 :https://blog.csdn.net/yang731227/article/details/83626090 -
安装docker-compose
- 下载最新版的docker-compose文件
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
- 测试安装结果
docker-compose --version
- 下载最新版的docker-compose文件
4.安装nodejs
-
下载源码
cd /usr/local/src/
wget http://nodejs.org/dist/v0.10.24/node-v0.10.24.tar.gz
-
解压源码
tar zxvf node-v0.10.24.tar.gz
-
编译安装
cd node-v0.10.24./configure --prefix=/usr/local/node/0.10.24 make make install
-
检查安装
通过node -v
检查是否 成功安装
二、下载fabric源码
注意:一定要先设置好 $GOPATH 环境变量
1.获取Fabric源码:
使用 git clone下载源码
git clone https://github.com/hyperledger/fabric.git
下载完毕后 拷贝到 /home/go/src/github.com/hyperledger 里面
如果嫌下面的步骤太烦了,并且你已经安装Golang和Git可以直接使用:
go get -u github.com/hyperledger/fabric
2.进行版本切换
拷贝完好后进入 cd $GOPATH/src/github.com/hyperledger/fabric
执行命令 git checkout release-1.0
切换源码为1.0 版本
3.编译工具configtxgen
和cryptogen
进入目录 cd $GOPATH/src/github.com/hyperledger/fabric/common/configtx/tool/configtxgen
然后使用命令编译工具 go install --tags=nopkcsll
进入目录cd /home/go/src/github.com/hyperledger/fabric/common/tools/cryptogen
然后使用命令编译工具编译工具 go install --tags=nopkcsll
好吧我知道上面的步骤也很繁琐,所以我给你提供简单:
进入目录cd $GOPATH/src/github.com/hyperledger/fabric
分别执行make configtxgen
和make cryptogen
然后我们可以在 $GOPATH/bin/ 目录下看到两个工具configtxgen
和cryptogen
三、下载fabric组件的docker镜像
1.手动下载(不建议)
- Docker store : https://store.dokcer.com/profiles/hyperledger
- 下载fabric组件
docker pull hyperledger/fabric-baseos:x86_64-0.3.0
docker pull hyperledger/fabric-ca:x86_64-1.0.0
docker pull hyperledger/fabric-peer:x86_64-1.0.0
docker pull hyperledger/fabric-ccenv:x86_64-1.0.0
docker pull hyperledger/fabric-orderer:x86_64-1.0.0
docker pull hyperledger/fabric-tools:x86_64-1.0.0
因为fabric版本变动较大,所以我们除了baseos使用0.3.0 其他都使用1.0.0
-
设置tag 为
latest
tag必须要设置,不然Docker 可能识别不了
docker tag hyperledger/fabric-tools:x86_64-1.0.0 hyperledger/fabric-tools:latest
docker tag hyperledger/fabric-orderer:x86_64-1.0.0 hyperledger/fabric-orderer:latest
docker tag hyperledger/fabric-peer:x86_64-1.0.0 hyperledger/fabric-peer:latest
docker tag hyperledger/fabric-ccenv:x86_64-1.0.0 hyperledger/fabric-ccenv:latest
docker tag hyperledger/fabric-ca:x86_64-1.0.0 hyperledger/fabric-baseos:latest
docker tag hyperledger/fabric-baseos:x86_64-0.3.1 hyperledger/fabric-baseos:latest
2.自动下载(建议)
Fabric为我们提供了一个自动化的脚本download-dockerimages.sh
,它放在了e22_cli
目录,这个脚本安装的镜像比我们上面手动的镜像更丰富。
- 进入
fabric/examples/e2e_cli
目录
cd $GOPATH/src/github.com/hyperledger/fabric/examples/e2e_cli
- 获取权限
chmod +x download-dockerimages.sh
- 执行脚本
./download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0
注意:上面的命令我添加了 -c -f 参数 指定了版本, 如果不指定默认安装最新。
- 查看镜像
我们使用docker images
来查看下脚本自动下载的镜像有什么。
四、fabric-samples
1.下载源码
假设你已经配置好我前面的环境
我们直接使用 go get -u github.com/hyperledger/fabric-samples
2.切换版本
依然要进入cd $GOPATH/src/github.com/hyperledger/fabric-samples
然后执行版本切换 git checkout release-1.0
3.输入ll
查看文件结构
我们了解下这些文件:
- .env:存储一些环境变量
- base:存储docker-compose的一些公共服务
- byfn.sh:执行脚本,可以自动生成网络配置、启动网络、关闭网络
- configtx.yaml和crypto-config.yaml:根据之前生成的2个工具,生成相应的配置文件,用来启动网络,放到当前目录的channel-artifacts和crypto-config里面
- dockper-compose:用于启动网络
- scripts:存放测试脚本,做的事:创建通道、加入通道,安装链码,实例化链码,链码交互
下面4-6的过程都需要执行
byfn.sh
脚本,所以需要进first-network
目录,
cd $GOPATH/src/fabric-samples/first-network
4.生成配置
执行byfn.sh脚本生成配置
./byfn.sh -m generate -i 1.0.0
6.启动网络
./byfn.sh -m up -i 1.0.0
7.关闭网络
./byfn.sh -m down -i 1.0.0
由于我下载的fabric-sample为最新版本,运行命令会出现如下错误,所以将fabric-sample切换成1.0版本。