FISCO BCOS-多服务器部署区块链(1)-搭建两服务两节点单群组区块链
参考官方技术文档,构建两节点两机构单群组的区块链,组网模式如下图节点组网拓扑图。
机器环境,每个节点的IP和端口号如下(实际部署的时候一定要填写物理机的IP哟~):
一、下载安装
1.下载
cd~/&&git clonehttps://github.com/FISCO-BCOS/generator.git
出现问题:服务器没有git,且直接安装无效,如下图。
此时需要先执行 apt-get update,再进行apt-get install git。
安装成功git之后,执行上面命令。
2.安装(此步骤要求有sudo权限)
2.1 cd~/generator&&bash ./scripts/install.sh
2.2 验证是否安装成功./generator -h,看到usage:generator ***,如下图,表示成功安装。
3.获取节点二进制
3.1 拉取最新fisco-bcos二进制文件到meta中
./generator --download_fisco ./meta
如下图所示,成功拉取
3.2 检查是否成功,./meta/fisco-bcos -v
如下图所示,即成功。
二、机构初始化
进行完第一步“下载安装”之后,下载的generator就作为证书颁发机构,用来初始化机构A/B/C...等
1.机构初始化
1.1 初始化机构A
cp -r ~/generator ~/generator-A
1.2 初始化机构B
cp -r ~/generator ~/generator-B
2.初始化链证书
在证书颁发机构上进行操作,注意一条链拥有唯一的链证书ca.crt
2.1 在证书生成机构目录下操作,即先进入目录。
cd~/generator
2.2 用命令生成链证书
./generator --generate_chain_certificate ./dir_chain_ca
2.3 查看链证书及私钥
ls ./dir_chain_ca
3.机构A、B构建群组1
3.1 初始化机构A
实际应用时应该由机构本地生成私钥agency.key,再生成证书请求文件,向证书签发机构获取机构证书agency.crt。
3.1.1 进入在证书机构目录
cd~/generator
3.1.2 生成机构A证书
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyA
3.1.3 查看机构证书及私钥
ls dir_agency_ca/agencyA/
3.1.4 发送机构证书、机构私钥、链证书给机构A,采用文件拷贝的方式,从证书授权机构将机构证书发送给对应的机构,放在机构的工作目录的meta子目录下。
cp ./dir_agency_ca/agencyA/* ~/generator-A/meta/
3.2 初始化机构B
3.2.1 进入证书生成机构目录
cd~/generator
3.2.2 生成机构B证书
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyB
3.2.3 发送证书至机构B的meta子目录
cp ./dir_agency_ca/agencyB/* ~/generator-B/meta/
注意事项:一条联盟链中只能用到一个根证书ca.crt,多服务器部署时不要生成多个根证书和私钥。一个群组只能有一个群组创世区块group.x.genesis
3.3 机构A修改配置文件
3.3.1 进入生成机构A的目录
cd~/generator-A
3.3.2 修改配置文件
cat > ./conf/node_deployment.ini<<EOF
[group]
group_id=1
[node0]
; host ip for the communication among peers.
; Please use your ssh login ip.
p2p_ip=127.0.0.1
; listen ip for the communication between sdk clients.
; This ip is the same as p2p_ip for physical host.
; But for virtual host e.g. vps servers, it is usually different from p2p_ip.
; You can check accessible addresses of your network card.
; Please seehttps://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
; for more instructions.
rpc_ip=127.0.0.1
channel_ip=0.0.0.0
p2p_listen_port=30300
channel_listen_port=20200
jsonrpc_listen_port=8545
EOF
3.3.3 查看配置文件内容
cd~/generator-A
vim./conf/node_deployment.ini
同时按下shift Esc :,输入q退出。
3.4 机构B修改配置文件
3.4.1 进入生成机构B的目录
cd~/generator-B
3.4.2 修改配置文件
cat > ./conf/node_deployment.ini<<EOF
[group]
group_id=1
[node0]
; host ip for the communication among peers.
; Please use your ssh login ip.
p2p_ip=127.0.0.1
; listen ip for the communication between sdk clients.
; This ip is the same as p2p_ip for physical host.
; But for virtual host e.g. vps servers, it is usually different from p2p_ip.
; You can check accessible addresses of your network card.
; Please seehttps://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
; for more instructions.
rpc_ip=127.0.0.1
channel_ip=0.0.0.0
p2p_listen_port=30301
channel_listen_port=20201
jsonrpc_listen_port=8546
EOF
3.4.3 查看配置文件内容
cd~/generator-B
vim./conf/node_deployment.ini
3.5 机构A生成并发送节点信息
3.5.1 进入生成机构A目录
cd~/generator-A
3.5.2 机构A生成节点证书及P2P链接信息文件
./generator --generate_all_certificates ./agencyA_node_info
3.5.3 查看生成文件
ls ./agencyA_node_info
上图中,从左至右分别为需要交互给机构A的节点证书,节点P2P连接地址文件(根据node_deployment.ini生成的本机构节点信息)
3.5.4 A机构需将节点P2P连接地址文件发送至机构B
(因为机构生成节点时需要指定其他节点的节点P2P连接地址)
cp ./agencyA_node_info/peers.txt ~/generator-B/meta/peersA.txt
3.6 机构B生成并发送节点信息
3.6.1 进入生成机构B目录
cd~/generator-B
3.6.2 机构B生成节点证书及P2P连接信息文件
./generator --generate_all_certificates ./agencyB_node_info
3.6.3 机构B发送节点证书至机构A
因为生成创世区块的机构需要节点证书,咱们这个是由A机构生成创世区块,因此B机构除了发送节点P2P连接地址文件外,还需发送节点证书至机构A
cp ./agencyB_node_info/cert*.crt ~/generator-A/meta/
3.6.4 机构B发送节点P2P连接地址文件
cp ./agencyB_node_info/peers.txt ~/generator-A/meta/peersB.txt
3.7 机构A生成群组1创世区块
此处是选择机构A生成群组创世区块,实际生产中可以通过联盟链委员会协商选择
3.7.1 进入生成机构A目录
cd~/generator-A
3.7.2 机构A修改配置文件conf文件下的group_genesis.ini
cat > ./conf/group_genesis.ini<< EOF
[group]group_id=1
[nodes]
node0=127.0.0.1:30300
node1=127.0.0.1:30301
EOF
3.7.3 修改./conf/group_genesis.ini文件,即添加注释
vim ./conf/group_genesis.ini
;命令解释
[group]
;群组id
group_id=1
[nodes]
;机构A节点p2p地址
node0=127.0.0.1:30300
;机构B节点p2p地址
node1=127.0.0.1:30301
3.7.4 生成group_genesis.ini配置的群组创世区块
./generator --create_group_genesis ./group
3.7.5 分发群组1创世区块至机构B
cp ./group/group.1.genesis ~/generator-B/meta
3.8 机构A生成所属节点
生成机构A所属节点,此命令会根据用户配置的node_deployment.ini文件生成相应的节点配置文件夹
3.8.1 进入生成机构A目录
cd~/generator-A
3.8.2 生成机构A所属节点
./generator --build_install_package ./meta/peersB.txt ./nodeA
3.8.3 查看生成节点配置文件夹
ls ./nodeA
3.8.4 机构A启动节点
bash ./nodeA/start_all.sh
3.8.5 查看节点进程
ps -ef|grep fisco
3.9 机构B生成所属节点
3.9.1 进入生成机构B目录
cd~/generator-B
3.9.2 生成机构B所属节点
./generator --build_install_package ./meta/peersA.txt ./nodeB
3.9.3 机构B启动节点
bash ./nodeB/start_all.sh
注意事项:节点启动只需要推送对应ip的node文件夹即可,如127.0.0.1的服务器,只需node_127.0.0.1_port对应的节点配置文件夹。多机部署时,只需要将生成的节点文件夹推送至对应服务器即可
3.10 查看群组1节点运行状态
3.10.1 查看进程
ps -ef|grep fisco
3.10.2 查看节点log
tail -f ./node*/node*/log/log*|grep +++
ctrl c 结束查看
4.推送机构B的生成文件夹到目标服务器
scp -r /root/generator-B/ root@172.**.***.**:~/
为了操作简单,以上生成B的系列操作在同一个服务器上,那么多机构链就需要那么生成好的文件夹generator-B,就可以传输到另一台服务器即可。
多机构搭建群组1的操作完成!