今天配置fabric试过各种博客,踩过无数坑,原因就是fabric版本不一样,配置的好多地方都会不一样,即使版本一样,好多方法也都不能用了。所以想写一下最新的配置方法,本来想配置最新版本的,结果发现fabric2.0下面好多文件夹都改了。
环境介绍
在VM上安装的CentOS 7 linux3.10.0
前期准备
安装Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
安装Docker-Compose
# github太慢了,换了一个源
curl -L "https://get.daocloud.io/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v
这些网上有很多教程,遇到错误直接百度也很容易解决,这里就不多介绍了
Fabric环境部署
1.下载fabric源码
# 进入gopath,我这里gopath设置的是/opt/gopath
cd $GOPATH
# 创建文件夹
mkdir -p /opt/gopath/src/github.com/hyperledger/
好多教程都是直接用命令拷贝代码,再切换至release1.1分支,期间会遇到许多问题,我这里直接在网页上下载好https://github.com/hyperledger/fabric/tree/release-1.1(记得是在VM客户机里下,我第一次在主机里下载,出现了问题),然后把代码这个文件夹重命名为fabric放在之前创建的hyperledger文件夹中
2.下载fabric-samples源码
同理,也是在网页上下载https://github.com/hyperledger/fabric-samples/tree/release-1.1,把代码文件夹重命名为fabric-samples,也放在hyperledger文件夹中
3.下载fabric镜像
遇到问题最多的地方!!要么就是版本不匹配,要么就是网速慢各种下载不下来。这里有个极其简单的方法!
还是在网页上先下载下来,https://github.com/hyperledger/fabric/releases/download/v1.1.0/hyperledger-fabric-linux-amd64-1.1.0.tar.gz,就不需要执行./bootstrap.sh 文件了,下载后是bin文件和config文件,把他放在fabric-samples文件里面就完成了
ca的镜像在https://github.com/hyperledger/fabric/releases/download/v1.1.0/hyperledger-fabric-ca-linux-amd64-1.1.0.tar.gz这里
4.chainnode测试
进入fabric-samples里的first-network文件
cd first-network
启动first-network网络
./byfn.sh up
直到出现这个就表示成功了
4.1 问题
不知道为什么,过了几天之后再次运行后又出现了一大堆问题
问题1Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?解决方法:
systemctl daemon-reload
service docker restart
service docker status
docker run hello-world
问题2 BAD_REQUEST – error authorizing update: error validating ReadSet: readset expected key [Group] /Channel/Application at version 0, but got version 2
上次运行的fist-network没有关闭,解决方法:
./byfn.sh down
问题3 manifest for hyperledger/fabric-orderer:latest not found: manifest unknown:解决方法
# 先下载对应版本镜像,再将它重命名为最新版本的就可以了,如果其他镜像也报这样的错,方法是一样的
docker pull hyperledger/fabric-orderer:x86_64-1.1.0
docker tag hyperledger/fabric-orderer:x86_64-1.1.0 hyperledger/fabric-orderer:latest
- 运行e2e_cli
# 进入e2e_cli并启动
cd /opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli
bash network_setup.sh up
这样就是成功了
5.1 问题
解决问题之前要
sudo bash network_setup.sh down
问题1 没有权限 解决方法:sudo
问题2 Error: Error endorsing chaincode: rpc error: code = Unknown desc = error starting container: API error (404): {“message”:“network e2ecli_default not found”} 解决方法
# 修改/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/base目录下的peer-base.yaml
CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2e_cli_default
docker命令
# 删除镜像
docker rmi <image id>
#强制删除镜像
docker rmi -f <image id>
# 删除所有镜像
docker rmi $(docker images -q)
# 删除所有docker
docker rm $(docker ps -aq)
# 查看docker
docker ps
# 删除这个ID的docker
docker stop ID
# 清理网络
docker network prune
# 启动整个网络
docker-compose up -d
# 产看日志
docker logs
# 查看peer节点日志
docker logs orderer.imocc.com
# 查看某个peer节点日志
docker logs peeer0.org0.imocc.com
# 进入cli
docker exec -it cli bash
# peer channel [command]
create Create a channel
fetch Fetch a block
getinfo get blockchain information of a specified channel.
join Joins the peer to a channel.
list List of channels peer has joined.
signconfigtx Signs a configtx update.
update Send a configtx update.
# 创建通道 -o向哪一个order进行通信 -c使用哪一个创世交易
peer channel create -o orderer.imocc.com:7050 -c assetschannel -f /etc/hyperledger/config/assetschannel.tx
# 加入通道 assetschannel.block是通道创建时生成的
peer channel join -b assetschannel.block
# 查看当前peer节点已经加入了哪些channel
peer channel list
# 设置主节点
peer channel update -o orderer.imocc.com:7050 -c assetschannel -f /etc/hyperledger/config/Org1MSPanchors.tx
# 链码安装在peer节点 -n链码名 -v参数 -l语言 -p链码所在路径
peer chaincode install -n assets -v 1.0.0 -l golang -p github.com/chaincode/assetsExchange
# 进入某个peer节点容器
docker exec -it peer0.org1.imocc.com bash
# 查看该peer节点相关数据
cd /var/hyperled
# 退出
exit
# 链码实例化 -o向哪一个order进行通信 -C指定通道名字 -n链码名字 -l语言 -v版本 -c初始化参数
peer chaincode instantiate -o orderer.imocc.com:7050 -C assetschannel -n assets -l golang -v 1.0.0 -c '{"Args":["init"]}'