1. 环境:
- 阿里云海外(硅谷)服务器2核4G
- 系统:ubuntu16.04
2.前置安装(Git和CURL)
在ubuntu中打开终端,输入以下命令
更新软件源
sudo apt update
安装git
sudo apt install git
安装curl
sudo apt install curl
3.安装docker-ce
本地虚拟机ubuntu 安装成功参考
获取安装docker-ce的脚本
curl -fsSL get.docker.com -o get-docker.sh
查看当前目录是否获取到了脚本
ls get*
执行脚本(安装需要一些时间)
sudo sh get-docker.sh
安装成功后试着run一下测试镜像
sudo docker run hello-world
4.安装docker-compose(此版本新fabric不支持,后序有新的安装方法 )
安装
sudo apt install docker-compose
安装成功后查看版本
docker-compose --version
5.下载GO,参考
按照官网要求下载:
-
推荐下载1.15版本,高于此版本,fabric不支持
-
在/usr/local文件夹下下载
# 在/usr/local文件夹下下载
wget https://studygolang.com/dl/golang/go1.15.5.linux-amd64.tar.gz
# 删除以前安装的go版本,并解压当前下载的版本
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.15.5.linux-amd64.tar.gz
# 只在当前窗体以及子窗体有效
export PATH=$PATH:/usr/local/go/bin
$ go version
6.下载Fabric和Fabric-samples(此处开始不成功,可直接跳到方法二)
# 获取fabirc并切换版本
git clone https://gitee.com/arxin/fabric.git
# 进入fabric 文件夹下,再切换
git checkout -b v1.2.0
# 获取fabric-samples并切换版本
git clone -b master https://github.com/hyperledger/fabric-samples.git
# 进入fabric-samples 文件夹下执行, 切换分支
git checkout -b v1.2.0
7.下载Fabric相关镜像
使用filezilla连接上远程服务器 (提前在安全组中开放端口)
执行脚本
修改脚本权限
chmod 755 bootstrap.sh
执行脚本并指定版本号
sudo ./bootstrap.sh 1.2.0 1.2.0 0.4.10
提示在fabric-samples中执行
执行报错,原因是nexus.hyperledger.org这个网站不再维护了,
从官网上找到最新的脚本文件
https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh
重新执行该文件,失败。哭。。。。。。
方法二
- 阿里云服务器按量选购,地区选择美国硅谷
- 完成以上前置安装 git curl docker docker-compose以后,把之前安装的fabric 以及fabric-samples删除,即从第六步开始
- 然后直接执行一行命令,安装所有的fabric镜像以及fabric-samples文件
curl -sSL https://bit.ly/2ysbOFE | bash -s
由于使用的国外服务器,安装贼快
- 把
fabric-samples/bin
中的二进制文件移动到/usr/local/bin
中,以便全局使用
进入fabric-samples /bin文件中执行cp * /usr/local/bin/
* 查看所有安装的docker 镜像
以上安装完毕~
运行测试网络官网地址
# 进入测试网络文件夹
cd fabric-samples/test-network
# 把之前运行的容器移除
./network.sh down
- 发现docker-compose版本太低不支持,重新卸掉重装,参考
# 卸载
sudo rm /usr/local/bin/docker-compose
# 如果显示没有这个文件,看看/usr/bin下有没有docker-compose,有就删掉
- 安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 授权
sudo chmod +x /usr/local/bin/docker-compose
# 添加链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 检测
docker-compose --version
-
重新执行
./network.sh down
-
运行网络
# 运行网络
./network.sh up
# 生成两个peer节点和一个排序节点,没有channel,会在后序创建
# 官网:The test network includes two peer organizations, Org1 and Org2. It also includes a single orderer organization that maintains the ordering service of the network.
- 创建channel
./network.sh createChannel
# 默认生成名字为mychannel的通道,可以自定义名称,详情看官网
- 安装链码
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
bilibili博主声明:执行该命令会失败,原因是 在…/asset-transfer-basic/chaincode-go 文件夹下没有vendor,需要手动使用命令 go mod vendor
下载,国内需要替换go的源,我这里是国外服务器就不用替换源了hiahiahiahiahia~
安装vendor成功
再次执行安装链码成功
- 和网络交互
# 在test-network目录下,添加环境变量,读取配置文件
export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/
# You can now set the environment variables that allow you to operate the peer CLI as Org1:
# Environment variables for Org1
# 导入机构1的环境变量,以便对Org1 的cli peer进行执行操作
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051
# 初始化链码资产账本
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"InitLedger","Args":[]}'
# Org1 peer CLi查询所有资产
peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'
# 执行转账操作
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"TransferAsset","Args":["asset6","Christopher"]}'
执行成功
同理,可以导入组织二Org2的环境变量,然后对链码资产进行查询,转账操作
- 关闭网络
./network.sh down
- tips
将软件包下的/bin 文件夹中的命令复制到/usr/local/bin 中,可以在全局使用这些命令