开始之前可以先自行了解一下linux命令、docker 命令和git 命令,这样会更加熟悉下main的教程。同时需要学习一下区块链的原理,以及fabric的架构。
本文选择腾讯云 Ubuntu Server 18.04.1 LTS 64位/CPU 1核/内存 2GB/公网带宽 1Mbps。暂不支持Windows系统开发。
因为在网页操作系统不太方便,所以这里推荐下载PUTTY。
sudo apt install
sudo apt install git
sudo apt-get install vsftpd -y # 下载安装vsftp
sudo netstat -nltp | grep 21
#如果没有启动,可以手动开启 VSFTPD 服务:
sudo systemctl start vsftpd.service
sudo vi /etc/vsftpd.conf #修改上传文件权限
write_enable = YES
Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Fabric 的底层代码又go编译,所以需要安装go。
Ubuntu的apt-get自带的go版本太低,这里我们重新安装,输入指令:
wget https://studygolang.com/dl/golang/go1.13.4.linux-amd64.tar.gz #从国内网络下载较快
wget https://storage.googleapis.com/golang/go1.13.4.linux-amd64.tar.gz # 从国外google下载较慢
然后解压:
tar -xzf go1.13.4.linux-amd64.tar.gz
sudo mv go /usr/local
# 以上两条等价于下面这条命令
sudo tar -C /usr/local -xzf go1.13.4.linux-amd64.tar.gz
接下来编辑当前用户的环境变量
vi ~/.profile
在最后添加以下内容(键入i
表示插入、esc退出,键入:wq
保存并退出)
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin
最后载入环境变量
source ~/.profile
我们把go的目录GOPATH设置在当前用户的文件夹下,所以要创建go文件夹
cd ~ #回到根目录
mkdir go #创建go文件夹
go version #查看版本检查
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
sudo apt install docker.io # 安装docker
docker version # 键入docker version命令 查看安装结果
————————————————
Client:
Version: 18.09.7
API version: 1.39
Go version: go1.10.1
Git commit: 2d0083d
Built: Fri Aug 16 14:20:06 2019
OS/Arch: linux/amd64
Experimental: false
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/version: dial unix /var/run/docker.sock: connect: permission denied
显示没有权限,此时还需要做一些工作
修改当前用户权限,把USERNAME的地方换成当前用户名
sudo usermod -aG docker USERNAME
下面添加阿里云的Docker镜像:为了下载快一点
sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json
将以下内容写入daemon.json
{
"registry-mirrors": ["https://obou6wyb.mirror.aliyuncs.com"]
}
输入如下命令行:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://55hri6m9.mirror.aliyuncs.com"]
}
EOF
接下来输入:
sudo systemctl daemon-reload
sudo systemctl restart docker
docker version
如果还有权限不足提示,输入:
sudo chmod -R 777 /var/run/docker.sock
查看结果为:
ubuntu@VM-0-14-ubuntu:~$ docker version
Client:
Version: 18.09.7
API version: 1.39
Go version: go1.10.1
Git commit: 2d0083d
Built: Fri Aug 16 14:20:06 2019
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.09.7
API version: 1.39 (minimum version 1.12)
Go version: go1.10.1
Git commit: 2d0083d
Built: Wed Aug 14 19:41:23 2019
OS/Arch: linux/amd64
Experimental: false
显示如上则表示安装成功!!
Docker-compose是支持通过模板脚本批量创建Docker容器的一个组件。在安装Docker-Compose之前,需要安装Python-pip(腾讯云里已经安装好了python2.7,如果没有需要先安装python2.7 不能是python3),运行指令:
sudo apt-get install python-pip
sudo pip install docker-compose
docker-compose version
查看结果如下:
ubuntu@VM-0-14-ubuntu:~$ docker-compose version
docker-compose version 1.25.4, build unknown
docker-py version: 4.2.0
CPython version: 2.7.17
OpenSSL version: OpenSSL 1.1.1 11 Sep 2018
安装完成!!!
fabric源码需要下载的东西有:
fabric 源代码
*是从github下载下来的源代码文件,
*里面有安装脚本scripts/bootstrap.sh
fabric-samples 代码
*主要有一些first-network,还有test-network等示例
fabric-binaries 组件
*peer orderer cryptogen configtxlator configtxgen idemixgen discover 几个组件
*oderer.yaml core.yaml configtx.yaml几个配置文件
fabric-ca 组件
*fabric-ca-server fabric-ca-client
现在就分别下载这些东西。
首先建好存放源码的文件夹路径如下:
mkdir –p ~/go/src/github.com/hyperledger
cd ~/go/src/github.com/hyperledger
用git命令下载完整源码
git clone https://github.com/hyperledger/fabric.git
这一步下载会特别慢,因为github的服务器在国外,自己的服务器是国内的网络,再加上买的服务器带宽也很小,所以解决办法就是选择国外的服务器。或者在本地科学上网下载好后,再传到服务器上。
之前已经装好了vsftp,所以通过filezilla来把本地下载的东西传输到服务器上。如果是windows的系统,可以先装一个git,再用相同的命令下载。当然也可以直接从网址https://github.com/hyperledger/fabric下载。下载完成后是一个fabric文件夹,传输到服务器hyperledger文件夹下。
ubuntu@VM-0-14-ubuntu:~go/src/github.com/hyperledger$ cd fabric
ubuntu@VM-0-14-ubuntu:~go/src/github.com/hyperledger/fabric$ git checkout 2.0.0
ubuntu@VM-0-14-ubuntu:~go/src/github.com/hyperledger/fabric$ cd scripts
ubuntu@VM-0-14-ubuntu:~go/src/github.com/hyperledger/fabric/scripts$ cat ./bootstrap.sh
下面是重要的控制语句,可见该脚本就是下载DOCKER、SAMPLES和BINARIES。
DOCKER=true
SAMPLES=true
BINARIES=true
…………
if [ "$SAMPLES" == "true" ]; then
echo "Clone hyperledger/fabric-samples repo"
cloneSamplesRepo
fi
if [ "$BINARIES" == "true" ]; then
echo "Pull Hyperledger Fabric binaries"
pullBinaries
fi
if [ "$DOCKER" == "true" ]; then
echo "Pull Hyperledger Fabric docker images"
pullDockerImages
fi
因为脚本定义的下载方法都特别慢,所以需要通过修改文件来控制三个组件的下载。
下载命令是
git clone https://github.com/hyperledger/fabric-samples.git
当然我们还是选择通过本地下载再传输到云服务器的方式,下载地址
https://github.com/hyperledger/fabric-samples
解压到指定文件夹:
ubuntu@VM-0-14-ubuntu:~go/src/github.com/hyperledger$ tar -xzf fabric-samples-release-1.4.zip
不过,因为samples这个文件比较小,所以也可以用bootstrap.sh脚本来下载。更改,执行./bootstrap.sh 即可自动下载。
DOCKER=false
SAMPLES=true
BINARIES=false
选择我们需要的版本
cd fabric-samples
git checkout 2.0.0
这是最大的几个文件,所以我们也通过本地下载的方式。
下载地址:需要选择和自己系统相匹配的版本
https://github.com/hyperledger/fabric/releases/download/v2.0.0/hyperledger-fabric-darwin-amd64-2.0.0.tar.gz
压缩包传输到服务器指定文件夹hyperledger下,然后解压到文件夹fabric下。
ubuntu@VM-0-14-ubuntu:~go/src/github.com/hyperledger$ sudo tar -C ~go/src/github.com/hyperledger/fabric -xzf hyperledger-fabric-linux-amd64-2.0.0.tar.gz
我们可以切换到fabric/bin目录下,可以看到新增加的几个组件。
https://github.com/hyperledger/fabric-ca/releases/download/v1.4.4/hyperledger-fabric-ca-linux-amd64-1.4.4.tar.gz
压缩包传输到服务器指定文件夹hyperledger下,然后解压。
我们知道,fabric-ca只是fabric的一个证书颁发组件机构,所以这个和网络搭建关系不大,也可以换成其他证书颁发组件。所以这里就把ca组件放在了fabric目录外。
ubuntu@VM-0-14-ubuntu:~go/src/github.com/hyperledger$ sudo tar -xzf hyperledger-fabric-ca-linux-amd64-1.4.4.tar.gz
区块链上有很多节点,每个节点可以理解为一台主机,但实验环境中不可能有那么多的主机,且真实生产环境也不可能有那么多机器,因此docker、k8s等就为我们提供了一个多容器的集群。
现在已经安装了docker,但还没有fabric相关的镜像。
这里我们同样采用fabric/scripts/bootstrap.sh脚本来安装,因为我们已经设置了阿里云镜像,下载会快一点。
#先修改文件,已经下载好的东西就不用再下载了。
DOCKER=true
SAMPLES=false
BINARIES=false
# 执行文件
ubuntu@VM-0-14-ubuntu:~go/src/github.com/hyperledger/fabric/scripts$ ./bootstrap.sh
安装完成后,输入命令docker images
出现如下结果,表示安装成功
REPOSITORY TAG IMAGE ID CREATED SIZE
hyperledger/fabric-tools 2.0 639ab50feac9 3 weeks ago 514MB
hyperledger/fabric-tools 2.0.0 639ab50feac9 3 weeks ago 514MB
hyperledger/fabric-tools latest 639ab50feac9 3 weeks ago 514MB
hyperledger/fabric-peer 2.0 5f8a6b13db9f 3 weeks ago 57.2MB
hyperledger/fabric-peer 2.0.0 5f8a6b13db9f 3 weeks ago 57.2MB
hyperledger/fabric-peer latest 5f8a6b13db9f 3 weeks ago 57.2MB
hyperledger/fabric-orderer 2.0 161632cc3c59 3 weeks ago 39.7MB
hyperledger/fabric-orderer 2.0.0 161632cc3c59 3 weeks ago 39.7MB
hyperledger/fabric-orderer latest 161632cc3c59 3 weeks ago 39.7MB
hyperledger/fabric-ccenv 2.0 6514ca872b68 3 weeks ago 529MB
hyperledger/fabric-ccenv 2.0.0 6514ca872b68 3 weeks ago 529MB
hyperledger/fabric-ccenv latest 6514ca872b68 3 weeks ago 529MB
hyperledger/fabric-baseos 2.0 50075bc26291 3 weeks ago 6.9MB
hyperledger/fabric-baseos 2.0.0 50075bc26291 3 weeks ago 6.9MB
hyperledger/fabric-baseos latest 50075bc26291 3 weeks ago 6.9MB
hyperledger/fabric-javaenv 2.0 ac433f4353e4 4 weeks ago 507MB
hyperledger/fabric-javaenv 2.0.0 ac433f4353e4 4 weeks ago 507MB
hyperledger/fabric-javaenv latest ac433f4353e4 4 weeks ago 507MB
hyperledger/fabric-nodeenv 2.0 c7fe428889ec 4 weeks ago 274MB
hyperledger/fabric-nodeenv 2.0.0 c7fe428889ec 4 weeks ago 274MB
hyperledger/fabric-nodeenv latest c7fe428889ec 4 weeks ago 274MB
hyperledger/fabric-ca 1.4 62a60c5459ae 3 months ago 150MB
hyperledger/fabric-ca 1.4.4 62a60c5459ae 3 months ago 150MB
hyperledger/fabric-ca latest 62a60c5459ae 3 months ago 150MB
hyperledger/fabric-zookeeper 0.4 ede9389347db 3 months ago 276MB
hyperledger/fabric-zookeeper 0.4.18 ede9389347db 3 months ago 276MB
hyperledger/fabric-zookeeper latest ede9389347db 3 months ago 276MB
hyperledger/fabric-kafka 0.4 caaae0474ef2 3 months ago 270MB
hyperledger/fabric-kafka 0.4.18 caaae0474ef2 3 months ago 270MB
hyperledger/fabric-kafka latest caaae0474ef2 3 months ago 270MB
hyperledger/fabric-couchdb 0.4 d369d4eaa0fd 3 months ago 261MB
hyperledger/fabric-couchdb 0.4.18 d369d4eaa0fd 3 months ago 261MB
hyperledger/fabric-couchdb latest d369d4eaa0fd 3 months ago 261MB
至此,fabric相关的所有环境就已经搭建好了。下一节中,将启动第一个区块链网络。