首先说明,我目前所用的fisco-bcos generator企业部署版本尚不支持docker部署,只能在主机上直接部署。
下面进入正题
我们本次搭建的是三机构A、B、C组成的联盟链,AB首先组成群组Group1,C后期加入Group1。
本文所有的操作目录都是基于generator文件夹
在A、B、C三台机器上下载并安装generator工具
也可以在一台机器上完成这些操作后,把generator文件夹复制给其它两台机器。
git clone https://gitee.com/FISCO-BCOS/generator.git
cd ~/generator && bash ./scripts/install.sh
安装完成后,查看一下版本
./generator -v
下载启动节点的必要文件
./generator --download_fisco ./meta --cdn
首先要设立CA中心给ABC三个机构服务器颁发证书。
我们假设在A上设立CA中心。
1、CA中心先生成自己的证书。
角色:中心
#生成国密版证书,用(ls ./dir_chain_ca)查看
./generator --generate_chain_certificate ./dir_chain_ca -g
#生成普通证书,用(ls ./dir_chain_ca_normal)查看
./generator --generate_chain_certificate ./dir_chain_ca_normal
此时generator文件夹下生成了这样的两个文件夹,里面放着普通和国密的两种证书
2、中心生成机构ABC的授权证书
角色:中心
#生成其它机构的证书(ls dir_agency_ca/agencyA/)
#A证书
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyA -g
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca_normal agencyA_normal
#B证书
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyB -g
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca_normal agencyB_normal
#C证书
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyC -g
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca_normal agencyC_normal
此时在generator文件夹下产生了
里面整整齐齐的放着3个机构的证书
以机构A为例,它的两个授权文件夹下面放着这些
3、把授权证书发给ABC三个机构
角色:中心
#把A的证书放到A服务器的generator/meta文件夹内
#这里以把证书给A为例,其它两个机构也需要进行这部操作
cp ./dir_agency_ca/agencyA/* A的generator/meta/
cp ./dir_agency_ca/agencyA_normal/* A的generator/meta/
1、机构设置自己的节点信息
角色:A
#A机构在配置文件中设置自己的节点信息,实际地址可以根据你的需求修改
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 see https://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
[node1]
p2p_ip=127.0.0.1
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
#机构根据配置生成节点信息(ls ./node_info)
./generator --generate_all_certificates ./node_info -g
B机构也同样操作,设置配置文件、然后生成节点信息
此时在node_info文件夹下有节点的证书信息文件
2、AB两个机构互相告诉对方自己的节点地址。
操作步骤:
(1)A把自己的node_info/peers.txt
文件,放到B的meta
文件夹下,B把自己meta
文件夹里收到的A节点文件重命名为peersA.txt
(表示这是机构A的节点信息,方便以后的管理)
(2)B把自己的node_info/peers.txt
和node_info/gmcert*.crt
文件,放到A的meta
文件夹下,A把自己meta
文件夹里收到的B节点文件重命名为peersB.txt
这一步做完后,A的meta
文件夹中得到B的节点地址文件peersB.txt
和节点证书gmcert*.crt
B的meta
文件夹中得到A的节点地址文件peerA.txt
3、A机构生成创世区块
角色:A
#设置创世区块的配置文件,里面写入群组id和节点信息
#A、B机构想加入这个群组的节点都写进去
#这里的ip地址和端口号仅是示例,请根据你的实际情况修改
cat > ./conf/group_genesis.ini << EOF
[group]
group_id=1
[nodes]
node0=127.0.0.1:30300
node1=127.0.0.1:30301
node2=127.0.0.1:30302
node3=127.0.0.1:30303
EOF
#生成创世区块
./generator --create_group_genesis ./group -g
此时新产生出一个文件夹group
,里面放着刚生成的创世区块
4、把创世区块给B机构
把A刚刚生成的group.1.genesis
,放到B的meta
文件夹下
5、生成并启动节点
角色:A
#生成自己的节点(ls ./node)
./generator --build_install_package ./meta/peersB.txt ./node -g
#启动自己的节点
bash ./node/start_all.sh
角色:B
#B:机构生成并启动节点
./generator --build_install_package ./meta/peersA.txt ./node -g
bash ./node/start_all.sh
6、完成
此时AB组成的Group1已经启动成功。
#查看节点是否启动
ps -ef | grep fisco
#查看节点共识状态(如果启动正常,此时会不停的弹出共识信息)
tail -f ./node*/node*/log/log* | grep +++
1、下载控制台
curl -#LO https://gitee.com/FISCO-BCOS/console/raw/master/tools/download_console.sh
Ps:控制台需要java环境,要先安装java
2、配置控制台
控制台需要机构的sdk和知道节点地址
#节点产生sdk
#这一步需要CA中心颁发给机构的授权证书,本教程中,我把证书文件放在了meta文件夹内,实际根据你的情况做调整
#下面的二选一执行
#生成普通版sdk证书
./generator --generate_sdk_certificate ./sdk ./meta
#生成国密版sdk证书
./generator --generate_sdk_certificate ./sdk ./meta -g
此时生成了机构的sdk证书,在generator/sdk/sdk
文件夹下(普通版没有gm文件夹)
把sdk/sdk
文件夹下的sdk文件,根据需要,放到控制台的console/conf
下
NON-SM表示非国密
SM表示国密
修改控制台的console/conf/config.toml
文件(没有的话就把config-example.toml
修改后重命名成config.toml
)
根据自己的实际环境修改节点地址和端口
3、启动控制台
配好地址和sdk证书后,启动控制台
在console文件夹下
bash start.sh
控制台的详细操作可以参考官方文档
https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/console/console_of_java_sdk.html
1、机构C安装generator(之前已做)
2、首先CA中心给机构C颁发授权证书(之前一开始我们已经把证书给C了)
3、机构C设置自己的节点配置文件/conf/node_deployment.ini
,生成节点信息
4、A、B把自己的节点地址/node_info/peers.txt
给C(放到C的meta
文件夹下)
5、A或B其中一个把它们群组的创世区块group.1.genesis
给C(放到C的meta
文件夹下)
6、此时C收到来自A和B的两个peers.txt
,C手动把A、B的地址拼成一个txt文件,并命名为peersAB.txt
放在C自己的meta
文件夹下
7、C生成自己的节点,C启动节点
8、C把自己的节点地址发给A、B,A、B收到C的地址命名为peersC.txt
9、A、B把C的节点地址添加进自己的节点通讯列表中,并重启节点
./generator --add_peers ./meta/peersC.txt ./nodeA
10、此时C并没有参与共识和观察、A使用控制台addSealer ${nodeid}
命令将C的节点注册为共识节点,addObserver ${nodeid}
将C的节点设置成观察者。
例如
nodeid可以在 node/node_*_*/conf/
文件夹下找到一个后缀是nodeid
的文件。
国密版是gmnode.nodeid
,普通版是node.nodeid
#查看nodeid
cat node/node_*_*/conf/文件名.nodeid
9、此时C已经加入了AB的群组Group1
如何让C在产生时只和B建立一个群组Group2
BC的Group2如何再融入AB的Group1内
可以参考官方的操作
https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/enterprise_tools/tutorial_detail_operation_gm.html#