三台ARM架构服务器,以麒麟V10 系统为例(类centos)
IP | 节点名称 |
192.168.10.32 | orderer.example.com |
192.168.10.29 | peer0.org1.example.com |
192.168.10.31 | peer0.org2.example.com |
准备必要条件:docker docker-compose go docker-images fabric-samples
可在上述地址提取hyper-fabric-2.5.9-arm.tgz包进行解压。
安装环境:
一、docker
解压docker压缩包并将内容拷贝到/usr/bin/目录下
tar -xvzf docker-27.0.1.tgz && cp docker/* /usr/bin/
另麒麟v10 需要特殊执行一步
mv /usr/local/bin/runc /usr/local/bin/runc2
有网络的情况下需要更换docker源,无网络可忽略此步
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://yxzrazem.mirror.aliyuncs.com"]
}
EOF
创建docker.server
vim /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
执行如下命令
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
二、安装docker-compose
将docker-compose 拷贝到/usr/bin/目录下,并赋予执行权限
cp docker-compose /usr/bin/ && chmod +x /usr/bin/docker-compose
三、编辑环境变量设置go
mv go /opt/
vim /etc/profile
export goroot=/opt/go
export PATH=$PATH:$goroot/bingo version
四、加载docker镜像
docker load -i fabric-images.tar
docker images 查看镜像
以上是三个主机都需要操作的步骤。
接下来验证环境
1、生成Fabric证书
# orderer节点(本文中是把fabric-samples 放到了/data目录下,注意修改理解)
1、编写证书文件
# 创建存放yaml文件夹
mkdir /data/fabric-samples/multinodes
cd /data/fabric-samples/multinodes
# 创建crypto-config.yaml文件
cryptogen showtemplate > crypto-config.yaml
# 修改crypto-config.yaml
vim crypto-config.yaml
EnableNodeOUs: true # 修改为true2.生成证书文件
cryptogen generate --config=crypto-config.yaml
org1.example.com
org2.example.com
结果应如下图:
2、生成创世块通道文件
1.编写configtx.yaml文件(注意:文件内包含域名,请在每个机器上编写hosts文件,加上对应的域名和IP)
# orderer节点
vim configtx.yaml
---
Organizations:- &OrdererOrg
Name: OrdererOrg
ID: OrdererMSP
MSPDir: ./crypto-config/ordererOrganizations/example.com/msp
Policies:
Readers:
Type: Signature
Rule: "OR('OrdererMSP.member')"
Writers:
Type: Signature
Rule: "OR('OrdererMSP.member')"
Admins:
Type: Signature
Rule: "OR('OrdererMSP.admin')"
OrdererEndpoints:
- orderer.example.com:7050- &Org1
Name: Org1MSP
ID: Org1MSP
MSPDir: ./crypto-config/peerOrganizations/org1.example.com/msp
Policies:
Readers:
Type: Signature
Rule: "OR('Org1MSP.admin', 'Org1MSP.peer', 'Org1MSP.client')"
Writers:
Type: Signature
Rule: "OR('Org1MSP.admin', 'Org1MSP.client')"
Admins:
Type: Signature
Rule: "OR('Org1MSP.admin')"
Endorsement:
Type: Signature
Rule: "OR('Org1MSP.peer')"
AnchorPeers:
- Host: peer0.org1.example.com
Port: 7051- &Org2
Name: Org2MSP
ID: Org2MSP
MSPDir: ./crypto-config/peerOrganizations/org2.example.com/msp
Policies:
Readers:
Type: Signature
Rule: "OR('Org2MSP.admin', 'Org2MSP.peer', 'Org2MSP.client')"
Writers:
Type: Signature
Rule: "OR('Org2MSP.admin', 'Org2MSP.client')"
Admins:
Type: Signature
Rule: "OR('Org2MSP.admin')"
Endorsement:
Type: Signature
Rule: "OR('Org2MSP.peer')"AnchorPeers:
- Host: peer0.org2.example.com
Port: 7051
Capabilities:Channel: &ChannelCapabilities
V2_0: true
Orderer: &OrdererCapabilities
V2_0: true
Application: &ApplicationCapabilities
V2_0: true
Applic