区块链部署之 Fabric1.0.5单机部署(金链团队实操成果)

第一章、 前言
1. 目的
主旨为了指引读者简单快速地构建fabric区块链网络,适合初步了解fabric的小伙伴使用,本文主要从环境要求、所依赖软件及fabric网络搭建、维护等方面描述。
2. 概述
- fabric区块链:本文所描述的fabric区块链部署仅适用单机部署,规划1个orderer节点 + 4个peer节点,orderer节点采用solo排序规则,批处理等待时间2秒,最大批处理数1个(避免同时处理一个ID多笔交易问题);
- fabric部署文档:以fabric1.0.5源码例子examples中的e2e_cli为基础,并集合了预先编译的configtxgen、configtxlator、cryptogen三个工具,在修改部署命令中依赖于源码目录的部分命令,形成单独完整的部署文档;
- docker镜像:使用国内docker镜像加速服务(daocloud)下载fabric的1.0.5版本镜像,自定义命令一键pull所有单机部署需要的镜像;
- fabric命令:优化network_setup.sh命令中up和down的逻辑,提供fabric.sh命令操作fabric网络的启动和停止,解决重启fabric会丢失区块的问题;
- 部署文档下载地址:链接: https://pan.baidu.com/s/1dzF5gTgpMnqbglQIimGN3A 密码: 7tv3
第二章、 环境准备
1. 环境要求
1.1. 操作系统
- 内核要求:3.10.0-693.17.1.el7.x86_64及以上
- 查看内核版本uname -r
- 推荐系统:CentOS 7及以上、Ubuntu16.04LTS及以上,本文使用CentOS 7系统
- 查看版本cat /etc/os-release
1.2. 软件版本
- docker版本:13.01.0以上;
- 查看版本命令:docker -v
- docker-compose版本:1.8.0以上;
- 查看版本命令:docker-compose -v
- fabric版本:x86_64-1.0.5
- 查看版本命令:docker images | grep x86_64-1.0.5
2. 软件安装
2.1. 系统安装
2.1.1. 安装CentOS 7
- ¬ 服务器安装:https://www.cnblogs.com/Yiutto/p/5958301.html
- ¬ 虚拟机安装:https://jingyan.baidu.com/article/3065b3b6a00892becef8a467.html
2.1.2. ssh远程
- ¬ 获取ip命令:ip a | grep 255
- ¬ 确认ssh服务:netstat -plnt | grep sshd
2.1.3. 客户端
- ¬ 打开SecureCRT.exe远程工具(如没有该工具请安装),右键新建会话:
- ¬ 选择SSH2,点击下一步:
- ¬ 填写ip(2.1.2中获取的ip)和用户(root),点击下一步:
- ¬ 点击完成
- ¬ 双击建立会话:
- ¬ 输入密码点击OK登录(可勾选保存密码):
- ¬ 成功ssh登录:
2.1.4. 上传下载
2.1.4.1. 命令安装
- ¬ 安装:yum install lrzsz –y
- ¬ 完成安装:
2.1.4.2. 上传
- ¬ 输入命令rz回车,弹出文件浏览框:
- ¬ 选择文件,点击OK进行上传:
- ¬ 上传过程中:
- ¬ 完成上传:
- ¬ 查看已上传文件
2.1.4.3. 下载
- ¬ 输入命令sz 文件名称 回车,如:sz go1.10.1.linux-amd64.tar.gz
- ¬ 完成下载:
- ¬ 查看下载保存目录:
- ν 右键菜单Properties,在弹框中点击X/Y/Zmodem:
- ν Download目录:
- ¬ 查看下载的文件:
2.2. docker安装
2.2.1. 快速安装
- ¬ 命令:curl -sSL https://get.daocloud.io/docker | sh
- ν 过程:更新镜像源
- ν 建立元数据缓存
- ν 安装docker-ce:
- ν 查看安装版本:docker -v
2.2.2. 添加镜像加速器
- ¬ 命令:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://860eaa91.m.daocloud.io
2.2.3. 启动docker服务
- ¬ 命令:service docker start
- ¬ 查看docker状态:docker info
2.2.4. 开机自启动
- ¬ 命令:systemctl enable docker
- ¬ 确认是否生效:systemctl is-enabled docker
2.3. docker-compose安装
2.3.1. 安装依赖
- ¬ 命令:yum -y install epel-release python-pip
- ¬ 完成
2.3.2. 下载安装
- ¬ 命令:
curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
- ν 下载:
- ν 完成安装:
- ¬ 赋予权限命令:chmod +x /usr/local/bin/docker-compose
2.3.3. 查看版本
- ¬ 命令:docker-compose -v
第三章、 Fabric部署
1. 下载部署文档
1.1. 网盘
- ¬ 浏览器直接访问下载,不过多描述:
链接: https://pan.baidu.com/s/1dzF5gTgpMnqbglQIimGN3A 密码: 7tv3
1.2. 上传
- ¬ 创建目录,命令:mkdir -p /home/blockchain
- ¬ 进入目录:cd /home/blockchain
- ¬ 上传:rz回车,选择文件点击OK:
- ¬ 完成上传
- ¬ 查看
1.3. 解压
- ¬ 安装命令:yum install unzip -y
- ¬ 完成
- ¬ 解压:unzip fabric_1.0.5_solo.zip
- ¬ 查看:
- ¬ 进入部署目录:cd fabric_1.0.5_solo
- ¬ 查看部署文件:
- ¬ 赋予权限:chmod +x bin/* scripts/*
2. 下载镜像
2.1. 下载
- ¬ 命令:./bin/download-dockerimages.sh 1.0.5
- ¬ 下载过程:
- ¬ 完成镜像pull
2.2. 查看镜像
- ¬ 命令:docker images
3. 生成证书
3.1. 生成证书
- ¬ 命令:./bin/generateCerts.sh
3.2. 查看证书
- ¬ 命令:ll crypto-config
4. 创世区块
4.1. 清空目录
- ¬ 命令:rm -rf channel-artifacts/*
- ¬ 查看:ll channel-artifacts/
4.2. 生成区块文件
- ¬ 命令:./bin/generateArtifacts.sh mychannel
4.3. 查看文件
- ¬ 命令:ll channel-artifacts
5. 部署fabric
5.1. 部署节点
- ¬ 命令:./bin/network_setup.sh up mychannel 3
5.2. 查看节点
- ¬ 命令:docker ps -a
5.3. 部署区块链网络
- ¬ 命令:docker exec cli bash -c ‘./scripts/script.sh mychannel’ && docker logs -f cli
- ¬ 启动成功:
5.4. 查看节点
- ¬ 命令:docker ps -a
5.5. 停止
- ¬ 命令:./scripts/fabric.sh stop
- ¬ 查看:docker ps -a
5.6. 启动
- ¬ 命令:./scripts/fabric.sh start
6. 交易及查询
6.1. 确认账户资产
6.1.1. 进入cli
- ¬ 命令:docker exec -it cli bash
6.1.2. 查询A账户
- ¬ 命令:peer chaincode query -C mychannel -n mycc -c ‘{“Args”:[“query”,”a”]}’
结果A账户资产为90
6.1.3. 查询B账户
- ¬ 命令:peer chaincode query -C mychannel -n mycc -c ‘{“Args”:[“query”,”b”]}’
结果B账户资产为210
6.2. 从A交易10给B
6.2.1. 执行交易
- ¬ 命令:peer chaincode invoke -o orderer.example.com:7050 –tls $CORE_PEER_TLS_ENABLED –cafile $ORDERER_CA -C mychannel -n mycc -c ‘{“Args”:[“invoke”,”a”,”b”,”10″]}’
6.2.2. 查询A账户
- ¬ 命令:peer chaincode query -C mychannel -n mycc -c ‘{“Args”:[“query”,”a”]}’
结果A账户资产为80(90-10=80)
6.3. 从B交易100给A
6.3.1. 执行交易
- ¬ 命令:peer chaincode invoke -o orderer.example.com:7050 –tls $CORE_PEER_TLS_ENABLED –cafile $ORDERER_CA -C mychannel -n mycc -c ‘{“Args”:[“invoke”,”b”,”a”,”100″]}’
6.3.2. 查询B账户
- ¬ 命令:peer chaincode query -C mychannel -n mycc -c ‘{“Args”:[“query”,”b”]}’
结果B账户资产为120(210+10-100=120)
7. 卸载fabric
7.1. 卸载
- ¬ 命令:./bin/network_setup.sh down
7.2. 查看
- ¬ 命令:docker ps –a