Hyperledger fablic 1.0 在centos7环境下的安装与部署和动态增加节点
一、安装docker
- 执行代码如下:
curl -sSL https://get.daocloud.io/docker | sh
- 1
- 安装完成后,查看安装情况:
docker -v
- 1
二、安装docker-compose
先安装python-pip,具体安装步奏如下:
- 1.首先安装epel扩展源:
sudo yum -y install epel-release
- 1
- 2.然后安装python-pip
sudo yum -y install python-pip
- 1
- 3.安装完成后,清除以下缓存 cache
sudo yum clean all
- 1
下面开始安装docker-compose
- 1.安装docker-compose:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.9.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
- 1
- 2.为docker-compose添加执行权限:
chmod +x /usr/local/bin/docker-compose
- 1
- 3.查看安装情况:
下面配置一下docker镜像加速,目的是下载镜像速度更快:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://860eaa91.m.daocloud.io
- 1
最后重启一下docker服务:
sudo service docker restart
- 1
三、安装git
1.安装依赖包:
sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
- 1
2.下载git源码并解压:
$ wget https://github.com/git/git/archive/v2.3.0.zip
$ unzip v2.3.0.zip
$ cd git-2.3.0
- 1
- 2
- 3
3.编译安装:
make prefix=/usr/local/git all
sudo make prefix=/usr/local/git install
- 1
- 2
4.修改环境变量:
sudo vim /etc/profile
然后在文件的最后一行,添加下面的内容,然后保存退出。
export PATH=/usr/local/git/bin:$PATH
- 1
- 2
- 3
5.使用source命令立即保存:
source /etc/profile
- 1
6.查看版本
git version
- 1
四、下载镜像
- 下载镜像命令如下:
docker pull yeasy/hyperledger-fabric-base:latest
&& docker pull yeasy/hyperledger-fabric-peer:latest
&& docker pull yeasy/hyperledger-fabric-orderer:latest
&& docker pull yeasy/hyperledger-fabric-ca:latest
&& docker pull yeasy/blockchain-explorer:latest
&& docker tag yeasy/hyperledger-fabric-peer hyperledger/fabric-peer
&& docker tag yeasy/hyperledger-fabric-orderer hyperledger/fabric-orderer
&& docker tag yeasy/hyperledger-fabric-ca hyperledger/fabric-ca
&& docker tag yeasy/hyperledger-fabric-base hyperledger/fabric-baseimage
&& docker tag yeasy/hyperledger-fabric-base hyperledger/fabric-ccenv:x86_64-1.0.0-preview
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 下载完成后,查看下载镜像
docker images
- 1
五、设置网络
创建2个docker网络,如下:
docker network create fabric_noops
- 1
docker network create fabric_pbft
- 1
六、启动集群
- 1.首先,下载 Compose 模板文件。
git clone https://github.com/yeasy/docker-compose-files
- 1
- 2.查看下载情况:
- 3.进入 hyperledger/1.0 目录,查看包括若干模板文件
- 4.快速 启动一个 MVE fabric 集群:
docker-compose up
- 1
- 5.查看 启动后的容器镜像:
docker ps -a
- 1
容器如下:
c10f128ab8f5 hyperledger/fabric-peer "peer node start" 16 hours ago Up 16 hours 7050/tcp, 7052-7059/tcp, 0.0.0.0:7051->7051/tcp fabric-vp0
443083f3b2b9 hyperledger/fabric-orderer "orderer" 16 hours ago Up 16 hours 0.0.0.0:7050->7050/tcp fabric-orderer
08330f858c6f hyperledger/fabric-cop "cop server start ..." 16 hours ago Up 16 hours 0.0.0.0:8888->8888/tcp fabric-cop
- 1
- 2
- 3
容器如图:
七、开始部署chaincode
- 集群启动后,进入 VP 节点,节点名称为 fabric-vp0
docker exec -it fabric-vp0 bash
- 1
- 部署example02
peer chaincode deploy -n test_cc -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{"Args":["init","a","100","b","200"]}'
- 1
- 查询
peer chaincode invoke -n test_cc -c '{"Args":["query","a"]}'
- 1
a的值如下:
peer chaincode invoke -n test_cc -c '{"Args":["query","b"]}'
- 1
b的值如下:
- 这时查询容器,会生成一个新的链码的容器,除了原先的3个。
- 转账
交易,a向b转账10元,如下:
peer chaincode invoke -n test_cc -c '{"Args":["invoke","a","b","10"]}'
- 1
- 转账后,再次查询
查询a的值,结果如下:
peer chaincode invoke -n test_cc -c '{"Args":["query","a"]}'
- 1
这时“a”的值为:**90** ![这里写图片描述](https://img-blog.csdn.net/20170124115510812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpYW5nMTEzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
再次查询b的值,结果如下:
peer chaincode invoke -n test_cc -c '{"Args":["query","b"]}'
- 1
这时“b”的值为:**210** ![这里写图片描述](https://img-blog.csdn.net/20170124115633646?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpYW5nMTEzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 已经完成超级账本的 转账的实例,每转一次,都会记录一个块。
八、动态增加节点
- 新建一个增加节点的文件,文件名为:add-peer.yml
文件的内容如下:
# This compose file will start a cluster with 1 hyperledger peer nodes
# vp1: validating node as peer
# https://github.com/yeasy/docker-compose-files
version: '2.0'
services:
vp1:
extends:
file: peer.yml
service: peer
container_name: fabric-vp1
hostname: vp1
environment:
- CORE_PEER_ID=vp1
- CORE_PEER_DISCOVERY_ROOTNODE=172.17.0.2:7051
- CORE_PEER_COMMITTER_LEDGER_ORDERER=172.17.0.2:7050
#networks:
# default:
# external:
# name: fabric_pbft
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 执行动态增加节点
docker-compose -f add-peer.yml up
- 1
- 查询现在的容器
b67e34917f38 hyperledger/fabric-peer "peer node start" 4 hours ago Up 4 hours 7050-7059/tcp fabric-vp1
b826ea7b9260 hyperledger/fabric-peer "peer node start" 4 hours ago Up 4 hours 7050/tcp, 7052-7059/tcp, 0.0.0.0:7051->7051/tcp fabric-vp0
a35046f53af3 hyperledger/fabric-orderer "orderer" 4 hours ago Up 4 hours 0.0.0.0:7050->7050/tcp fabric-orderer
78acca35125b hyperledger/fabric-ca "fabric-ca server ..." 4 hours ago Up 4 hours 7054/tcp, 0.0.0.0:8888->8888/tcp fabric-ca
- 1
- 2
- 3
- 4
- 5
说明动态创建已经成功。下面验证一下这些节点是否关联一块。
- 进入动态创建的”fabric-vp1”容器里
docker exec -it fabric-vp1 bash
- 1
- 执行查询
查询a的值为:
peer chaincode invoke -n test_cc -c '{"Args":["query","a"]}'
- 1
这时“a”的值为:90
查询b的值为:
peer chaincode invoke -n test_cc -c '{"Args":["query","b"]}'
- 1
这时“b”的值为:210
- 执行转账
在 fabric-vp1容器里 ,执行交易,a再向b转账10元,如下:
peer chaincode invoke -n test_cc -c '{"Args":["invoke","a","b","10"]}'
- 1
- 转账后,再次查询
在“fabric-vp1”容器里,查询a的值,结果如下:
peer chaincode invoke -n test_cc -c '{"Args":["query","a"]}'
- 1
这时“a”的值为:**80** ![这里写图片描述](https://img-blog.csdn.net/20170206192205707?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpYW5nMTEzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
再次查询b的值,结果如下:
peer chaincode invoke -n test_cc -c '{"Args":["query","b"]}'
- 1
这时“b”的值为:**220** ![这里写图片描述](https://img-blog.csdn.net/20170206192328771?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpYW5nMTEzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
我们进入 “fabric-vp0”执行查询看看数值是否变化,在vp0容器里查询a的值应该为“80”,b的值应该为“220”。下面我们来验证下:
- 进入”fabric-vp0”容器里
docker exec -it fabric-vp0 bash
- 1
- 执行查询
查询a的值为:
peer chaincode invoke -n test_cc -c '{"Args":["query","a"]}'
- 1
这时“a”的值为:80,说明已经关联在一起
查询b的值为:
peer chaincode invoke -n test_cc -c '{"Args":["query","b"]}'
- 1
这时“b”的值为:220,说明节点是关联在一起的。
Hyperledger fablic 1.0 在centos7环境下的安装与部署和动态增加节点
一、安装docker
- 执行代码如下:
curl -sSL https://get.daocloud.io/docker | sh
- 1
- 安装完成后,查看安装情况:
docker -v
- 1
二、安装docker-compose
先安装python-pip,具体安装步奏如下:
- 1.首先安装epel扩展源:
sudo yum -y install epel-release
- 1
- 2.然后安装python-pip
sudo yum -y install python-pip
- 1
- 3.安装完成后,清除以下缓存 cache
sudo yum clean all
- 1
下面开始安装docker-compose
- 1.安装docker-compose:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.9.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
- 1
- 2.为docker-compose添加执行权限:
chmod +x /usr/local/bin/docker-compose
- 1
- 3.查看安装情况:
下面配置一下docker镜像加速,目的是下载镜像速度更快:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://860eaa91.m.daocloud.io
- 1
最后重启一下docker服务:
sudo service docker restart
- 1
三、安装git
1.安装依赖包:
sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
- 1
2.下载git源码并解压:
$ wget https://github.com/git/git/archive/v2.3.0.zip
$ unzip v2.3.0.zip
$ cd git-2.3.0
- 1
- 2
- 3
3.编译安装:
make prefix=/usr/local/git all
sudo make prefix=/usr/local/git install
- 1
- 2
4.修改环境变量:
sudo vim /etc/profile
然后在文件的最后一行,添加下面的内容,然后保存退出。
export PATH=/usr/local/git/bin:$PATH
- 1
- 2
- 3
5.使用source命令立即保存:
source /etc/profile
- 1
6.查看版本
git version
- 1
四、下载镜像
- 下载镜像命令如下:
docker pull yeasy/hyperledger-fabric-base:latest
&& docker pull yeasy/hyperledger-fabric-peer:latest
&& docker pull yeasy/hyperledger-fabric-orderer:latest
&& docker pull yeasy/hyperledger-fabric-ca:latest
&& docker pull yeasy/blockchain-explorer:latest
&& docker tag yeasy/hyperledger-fabric-peer hyperledger/fabric-peer
&& docker tag yeasy/hyperledger-fabric-orderer hyperledger/fabric-orderer
&& docker tag yeasy/hyperledger-fabric-ca hyperledger/fabric-ca
&& docker tag yeasy/hyperledger-fabric-base hyperledger/fabric-baseimage
&& docker tag yeasy/hyperledger-fabric-base hyperledger/fabric-ccenv:x86_64-1.0.0-preview
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 下载完成后,查看下载镜像
docker images
- 1
五、设置网络
创建2个docker网络,如下:
docker network create fabric_noops
- 1
docker network create fabric_pbft
- 1
六、启动集群
- 1.首先,下载 Compose 模板文件。
git clone https://github.com/yeasy/docker-compose-files
- 1
- 2.查看下载情况:
- 3.进入 hyperledger/1.0 目录,查看包括若干模板文件
- 4.快速 启动一个 MVE fabric 集群:
docker-compose up
- 1
- 5.查看 启动后的容器镜像:
docker ps -a
- 1
容器如下:
c10f128ab8f5 hyperledger/fabric-peer "peer node start" 16 hours ago Up 16 hours 7050/tcp, 7052-7059/tcp, 0.0.0.0:7051->7051/tcp fabric-vp0
443083f3b2b9 hyperledger/fabric-orderer "orderer" 16 hours ago Up 16 hours 0.0.0.0:7050->7050/tcp fabric-orderer
08330f858c6f hyperledger/fabric-cop "cop server start ..." 16 hours ago Up 16 hours 0.0.0.0:8888->8888/tcp fabric-cop
- 1
- 2
- 3
容器如图:
七、开始部署chaincode
- 集群启动后,进入 VP 节点,节点名称为 fabric-vp0
docker exec -it fabric-vp0 bash
- 1
- 部署example02
peer chaincode deploy -n test_cc -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{"Args":["init","a","100","b","200"]}'
- 1
- 查询
peer chaincode invoke -n test_cc -c '{"Args":["query","a"]}'
- 1
a的值如下:
peer chaincode invoke -n test_cc -c '{"Args":["query","b"]}'
- 1
b的值如下:
- 这时查询容器,会生成一个新的链码的容器,除了原先的3个。
- 转账
交易,a向b转账10元,如下:
peer chaincode invoke -n test_cc -c '{"Args":["invoke","a","b","10"]}'
- 1
- 转账后,再次查询
查询a的值,结果如下:
peer chaincode invoke -n test_cc -c '{"Args":["query","a"]}'
- 1
这时“a”的值为:**90** ![这里写图片描述](https://img-blog.csdn.net/20170124115510812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpYW5nMTEzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
再次查询b的值,结果如下:
peer chaincode invoke -n test_cc -c '{"Args":["query","b"]}'
- 1
这时“b”的值为:**210** ![这里写图片描述](https://img-blog.csdn.net/20170124115633646?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpYW5nMTEzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 已经完成超级账本的 转账的实例,每转一次,都会记录一个块。
八、动态增加节点
- 新建一个增加节点的文件,文件名为:add-peer.yml
文件的内容如下:
# This compose file will start a cluster with 1 hyperledger peer nodes
# vp1: validating node as peer
# https://github.com/yeasy/docker-compose-files
version: '2.0'
services:
vp1:
extends:
file: peer.yml
service: peer
container_name: fabric-vp1
hostname: vp1
environment:
- CORE_PEER_ID=vp1
- CORE_PEER_DISCOVERY_ROOTNODE=172.17.0.2:7051
- CORE_PEER_COMMITTER_LEDGER_ORDERER=172.17.0.2:7050
#networks:
# default:
# external:
# name: fabric_pbft
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 执行动态增加节点
docker-compose -f add-peer.yml up
- 1
- 查询现在的容器
b67e34917f38 hyperledger/fabric-peer "peer node start" 4 hours ago Up 4 hours 7050-7059/tcp fabric-vp1
b826ea7b9260 hyperledger/fabric-peer "peer node start" 4 hours ago Up 4 hours 7050/tcp, 7052-7059/tcp, 0.0.0.0:7051->7051/tcp fabric-vp0
a35046f53af3 hyperledger/fabric-orderer "orderer" 4 hours ago Up 4 hours 0.0.0.0:7050->7050/tcp fabric-orderer
78acca35125b hyperledger/fabric-ca "fabric-ca server ..." 4 hours ago Up 4 hours 7054/tcp, 0.0.0.0:8888->8888/tcp fabric-ca
- 1
- 2
- 3
- 4
- 5
说明动态创建已经成功。下面验证一下这些节点是否关联一块。
- 进入动态创建的”fabric-vp1”容器里
docker exec -it fabric-vp1 bash
- 1
- 执行查询
查询a的值为:
peer chaincode invoke -n test_cc -c '{"Args":["query","a"]}'
- 1
这时“a”的值为:90
查询b的值为:
peer chaincode invoke -n test_cc -c '{"Args":["query","b"]}'
- 1
这时“b”的值为:210
- 执行转账
在 fabric-vp1容器里 ,执行交易,a再向b转账10元,如下:
peer chaincode invoke -n test_cc -c '{"Args":["invoke","a","b","10"]}'
- 1
- 转账后,再次查询
在“fabric-vp1”容器里,查询a的值,结果如下:
peer chaincode invoke -n test_cc -c '{"Args":["query","a"]}'
- 1
这时“a”的值为:**80** ![这里写图片描述](https://img-blog.csdn.net/20170206192205707?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpYW5nMTEzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
再次查询b的值,结果如下:
peer chaincode invoke -n test_cc -c '{"Args":["query","b"]}'
- 1
这时“b”的值为:**220** ![这里写图片描述](https://img-blog.csdn.net/20170206192328771?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpYW5nMTEzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
我们进入 “fabric-vp0”执行查询看看数值是否变化,在vp0容器里查询a的值应该为“80”,b的值应该为“220”。下面我们来验证下:
- 进入”fabric-vp0”容器里
docker exec -it fabric-vp0 bash
- 1
- 执行查询
查询a的值为:
peer chaincode invoke -n test_cc -c '{"Args":["query","a"]}'
- 1
这时“a”的值为:80,说明已经关联在一起
查询b的值为:
peer chaincode invoke -n test_cc -c '{"Args":["query","b"]}'
- 1
这时“b”的值为:220,说明节点是关联在一起的。
- 最后查看下镜像和容器
查看镜像:
docker images
- 1
可以看到vp1也有一个镜像,说明vp1已经创建好容器