FISCO-BCOS区块链网络环境搭建(亲测成功)

前言

因项目技术选型需要,需要搭建一个FISCO-BCOS区块链网络环境,该文记录一下搭载过程,或遇到的一个坑及其解决方法

目标

一个如图所示的6节点3机构2群组的组网模式。机构B和机构C分别位于群组1和群组2中。机构A同属于群组1和群组2中
在这里插入图片描述

参考文章:FISCO-BCOS区块链网络环境搭建

下载安装

下载

cd ~/
git clone https://github.com/FISCO-BCOS/generator.git
# 若因为网络问题导致长时间无法下载,请尝试以下命令:
git clone https://gitee.com/FISCO-BCOS/generator.git

在这里插入图片描述

安装

此操作要求用户具有sudo权限。

cd ~/generator && bash ./scripts/install.sh

遇到pip版本不对等问题,解决博文详细见:pip not fond问题解决
成功后如下图所示
在这里插入图片描述
检查是否安装成功,若成功,输出 usage: generator xxx

./generator -h

在这里插入图片描述

获取节点二进制

拉取最新fisco-bcos二进制文件到meta中,如果网络较差,可以尝试通过其他方式下载fisco-bcos,或使用–cdn选项,并将下载好的二进制放置于meta文件夹下

./generator --download_fisco ./meta
 ./generator --download_fisco ./meta --cdn # 网络较差可用选项

在这里插入图片描述
检查二进制版本
2.5 及以前版本,若成功,输出 FISCO-BCOS Version : x.x.x-x
2.6 版本之后,直接输出 FISCO-BCOS Version : x.x.x-x

./meta/fisco-bcos -v

在这里插入图片描述

联盟链初始化

为了操作简洁,本示例所有操作在同一台机器上进行,用不同的目录模拟不同的机构环境。用文件复制操作来模拟网络的发送。进行了教程中的下载安装后,请将generator复制到对应机构的generator目录中。

机构初始化

我们以教程中下载的generator作为证书颁发机构。
初始化机构A

cp -r ~/generator ~/generator-A

初始化机构B

cp -r ~/generator ~/generator-B

初始化链证书

由于FISCO BCOS节点与SDK通信时采用非国密方式,因此节点需要生成非国密版本的证书
在证书颁发机构上进行操作,一条联盟链拥有唯一的链证书ca.crt和gmca.crt
用 --generate_chain_certificate 命令生成链证书

cd ~/generator   # 在证书生成机构目录下操作
./generator --generate_chain_certificate ./dir_chain_ca -g # 生成国密证书
./generator --generate_chain_certificate ./dir_chain_ca_normal # 生成普通证书
ls ./dir_chain_ca # 查看链证书及私钥

在这里插入图片描述

# 上述命令解释
# 从左至右分别为链证书、链私钥
gmca.crt  gmca.key
# 上述命令解释
# 从左至右分别为链证书、链私钥
ca.crt  ca.key

在这里插入图片描述

机构A、B构建群组1

初始化机构A

教程中为了简化操作直接生成了机构证书和私钥,实际应用时应该由机构本地生成私钥agency.key和gmagency.key,再生成证书请求文件,向证书签发机构获取机构证书agency.crt和gmagency.crt。

在证书生成机构目录下操作,生成机构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

查看机构A证书及私钥:

ls dir_agency_ca/agencyA/
ls dir_agency_ca/agencyA_normal/

在这里插入图片描述

# 上述命令解释
# 从左至右分别为机构证书、机构私钥、链证书
gmagency.crt  gmagency.key  gmca.crt
# 上述命令解释
# 从左至右分别为机构证书、机构私钥、链证书
agency.crt  agency.key  ca.crt

发送链证书、机构证书、机构私钥至机构A,示例是通过文件拷贝的方式,从证书授权机构将机构证书发送给对应的机构,放到机构的工作目录的meta子目录下

cp ./dir_agency_ca/agencyA/* ~/generator-A/meta/
cp ./dir_agency_ca/agencyA_normal/* ~/generator-A/meta/

在这里插入图片描述
查看结果
在这里插入图片描述

初始化机构B

步骤类似机构A

cd ~/generator   # 在证书生成机构目录下操作:
# 生成机构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

发送链证书、机构证书、机构私钥至机构B,示例是通过文件拷贝的方式,从证书授权机构将机构证书发送给对应的机构,放到机构的工作目录的meta子目录下

cp ./dir_agency_ca/agencyB/* ~/generator-B/meta/
cp ./dir_agency_ca/agencyB_normal/* ~/generator-B/meta/

在这里插入图片描述
重要:一条联盟链中只能用到一个根证书ca.crt,多服务器部署时不要生成多个根证书和私钥。一个群组只能有一个群组创世区块group.x.genesis

机构A修改配置文件

node_deployment.ini为节点配置文件,运维部署工具会根据node_deployment.ini下的配置生成相关节点证书,及生成节点配置文件夹等。
机构A修改conf文件夹下的node_deployment.ini如下图所示:
在~/generator-A目录下执行下述命令

cd ~/generator-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=10.241.35.7
; 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=0.0.0.0
channel_ip=0.0.0.0
p2p_listen_port=30300
channel_listen_port=20200
jsonrpc_listen_port=8545

[node1]
p2p_ip=10.241.35.7
rpc_ip=0.0.0.0
channel_ip=0.0.0.0
p2p_listen_port=30301
channel_listen_port=20201
jsonrpc_listen_port=8546
EOF

在这里插入图片描述

修改机构B的配置文件

机构B修改conf文件夹下的node_deployment.ini如下图所示:
在~/generator-B目录下执行下述命令

cd ~/generator-B

机构B配置文件修改

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=10.241.35.7
; 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=0.0.0.0
channel_ip=0.0.0.0
p2p_listen_port=30302
channel_listen_port=20202
jsonrpc_listen_port=8547

[node1]
p2p_ip=10.241.35.7
rpc_ip=127.0.0.1
channel_ip=0.0.0.0
p2p_listen_port=30303
channel_listen_port=20203
jsonrpc_listen_port=8548
EOF

在这里插入图片描述

机构A生成并发送节点信息

在~/generator-A目录下执行下述命令

cd ~/generator-A

机构A生成节点证书及P2P连接信息文件,此步需要用到上述配置的node_deployment.ini,及机构meta文件夹下的机构证书与私钥,机构A生成节点证书及P2P连接信息文件

./generator --generate_all_certificates ./agencyA_node_info -g
# 查看生成文件:
ls ./agencyA_node_info
# 上述命令解释
# 从左至右分别为需要交互给机构A的节点证书,节点P2P连接地址文件(根据node_deployment.ini生成的本机构节点信息)
gmcert_127.0.0.1_30300.crt gmcert_127.0.0.1_30301.crt peers.txt

机构生成节点时需要指定其他节点的节点P2P连接地址,因此,A机构需将节点P2P连接地址文件发送至机构B

cp ./agencyA_node_info/peers.txt ~/generator-B/meta/peersA.txt

在这里插入图片描述

机构B生成并发送节点信息

在~/generator-B目录下执行下述命令

cd ~/generator-B

机构B生成节点证书及P2P连接信息文件:

./generator --generate_all_certificates ./agencyB_node_info -g

生成创世区块的机构需要节点证书,示例中由A机构生成创世区块,因此B机构除了发送节点P2P连接地址文件外,还需发送节点证书至机构A发送证书

cp ./agencyB_node_info/gmcert*.crt ~/generator-A/meta/

发送节点P2P连接地址文件

cp ./agencyB_node_info/peers.txt ~/generator-A/meta/peersB.txt

在这里插入图片描述

机构A生成群组1创世区块

在~/generator-A目录下执行下述命令

cd ~/generator-A

机构A修改conf文件夹下的group_genesis.ini,配置项可参考手册。:

cat > ./conf/group_genesis.ini << EOF
[group]
group_id=1

[nodes]
node0=10.241.35.7:30300
node1=10.241.35.7:30301
node2=10.241.35.7:30302
node3=10.241.35.7:30303
EOF

上述命令解释:

;命令解释
[group]
;群组id
group_id=1

[nodes]
;机构A节点p2p地址
node0=127.0.0.1:30300
;机构A节点p2p地址
node1=127.0.0.1:30301
;机构B节点p2p地址
node2=127.0.0.1:30302
;机构B节点p2p地址
node3=127.0.0.1:30303

教程中选择机构A生成群组创世区块,实际生产中可以通过联盟链委员会协商选择。

此步会根据机构A的meta文件夹下配置的节点证书,生成group_genesis.ini配置的群组创世区块,教程中需要机构A的meta下有名为gmcert_127.0.0.1_30300.crt,gmcert_127.0.0.1_30301.crt,gmcert_127.0.0.1_30302.crt,gmcert_127.0.0.1_30303.crt的节点证书,此步需要用到机构B的节点证书。

./generator --create_group_genesis ./group -g

分发群组1创世区块至机构B:

cp ./group/group.1.genesis ~/generator-B/meta

在这里插入图片描述

机构A生成所属节点

在~/generator-A目录下执行下述命令

cd ~/generator-A

生成机构A所属节点,此命令会根据用户配置的node_deployment.ini文件生成相应的节点配置文件夹:

注意,此步指定的节点P2P连接信息peers.txt为群组内其他节点的连接信息,多个机构组网的情况下需要将其合并。

./generator --build_install_package ./meta/peersB.txt ./nodeA -g

查看生成节点配置文件夹:

ls ./nodeA
# 命令解释 此处采用tree风格显示
# 生成的文件夹nodeA信息如下所示,
├── monitor # monitor脚本
├── node_127.0.0.1_30300 # 127.0.0.1服务器 端口号30300的节点配置文件夹
├── node_127.0.0.1_30301
├── scripts # 节点的相关工具脚本
├── start_all.sh # 节点批量启动脚本
└── stop_all.sh # 节点批量停止脚本

机构A启动节点:

bash ./nodeA/start_all.sh

查看节点进程:

ps -ef | grep fisco
# 命令解释
# 可以看到如下进程
fisco  15347     1  0 17:22 pts/2    00:00:00 ~/generator-A/nodeA/node_127.0.0.1_30300/fisco-bcos -c config.ini
fisco  15402     1  0 17:22 pts/2    00:00:00 ~/generator-A/nodeA/node_127.0.0.1_30301/fisco-bcos -c config.ini

在这里插入图片描述

机构B生成所属节点

在~/generator-B目录下执行下述命令

cd ~/generator-B

生成机构B所属节点,此命令会根据用户配置的node_deployment.ini文件生成相应的节点配置文件夹:

./generator --build_install_package ./meta/peersA.txt ./nodeB -g

查看生成节点配置文件夹:

ls ./nodeB

机构B启动节点:

bash ./nodeB/start_all.sh

查看节点进程:

ps -ef | grep fisco

在这里插入图片描述

注解:节点启动只需要推送对应ip的node文件夹即可,如127.0.0.1的服务器,只需node_127.0.0.1_port对应的节点配置文件夹。多机部署时,只需要将生成的节点文件夹推送至对应服务器即可。

查看群组1节点运行状态

查看进程:

ps -ef | grep fisco
# 命令解释
# 可以看到如下所示的进程
fisco  15347     1  0 17:22 pts/2    00:00:00 ~/generator-A/nodeA/node_127.0.0.1_30300/fisco-bcos -c config.ini
fisco  15402     1  0 17:22 pts/2    00:00:00 ~/generator-A/nodeA/node_127.0.0.1_30301/fisco-bcos -c config.ini
fisco  15457     1  0 17:22 pts/2    00:00:00 ~/generator-B/nodeB/node_127.0.0.1_30302/fisco-bcos -c config.ini
fisco  15498     1  0 17:22 pts/2    00:00:00 ~/generator-B/nodeB/node_127.0.0.1_30303/fisco-bcos -c config.ini

查看节点log:

tail -f ./node*/node*/log/log*  | grep +++

结果如图所示:
在这里插入图片描述
至此,我们完成了如图所示机构A、B搭建群组1的操作
在这里插入图片描述

证书授权机构初始化机构C

在证书生成机构目录下操作:

cd ~/generator

初始化机构C,请注意,此时generator目录下有链证书及私钥,实际环境中机构C无法获取链证书及私钥。

cp -r ~/generator ~/generator-C

生成机构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

发送链证书、机构证书、机构私钥至机构C,示例是通过文件拷贝的方式,从证书授权机构将机构证书发送给对应的机构,放到机构的工作目录的meta子目录下

cp ./dir_agency_ca/agencyC/* ~/generator-C/meta/
cp ./dir_agency_ca/agencyC_normal/* ~/generator-C/meta/

在这里插入图片描述

机构A、C构建群组2

接下来,机构C需要与A进行新群组建立操作,示例中以C生成创世区块为例。

机构A发送节点信息

由于机构A已经生成过节点证书及peers文件,只需将之前生成的节点P2P连接信息以及节点证书发送至机构C,操作如下:
在~/generator-A目录下执行下述命令

cd ~/generator-A

示例中由机构C生成群组创世区块,因此需要机构A的节点证书和节点P2P连接地址文件,将上述文件发送至机构C发送证书

cp ./agencyA_node_info/gmcert*.crt ~/generator-C/meta/

发送节点P2P连接地址文件

cp ./agencyA_node_info/peers.txt ~/generator-C/meta/peersA.txt

在这里插入图片描述

机构C修改配置文件

机构C修改conf文件夹下的node_deployment.ini如下图所示:
在~/generator-C目录下执行下述命令

cd ~/generator-C
cat > ./conf/node_deployment.ini << EOF
[group]
group_id=2

[node0]
; host ip for the communication among peers.
; Please use your ssh login ip.
p2p_ip=10.241.35.7
; 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=0.0.0.0
channel_ip=0.0.0.0
p2p_listen_port=30304
channel_listen_port=20204
jsonrpc_listen_port=8549

[node1]
p2p_ip=10.241.35.7
rpc_ip=0.0.0.0
channel_ip=0.0.0.0
p2p_listen_port=30305
channel_listen_port=20205
jsonrpc_listen_port=8550
EOF

机构C生成并发送节点信息

在~/generator-C目录下执行下述命令

cd ~/generator-C

机构C生成节点证书及P2P连接信息文件:

./generator --generate_all_certificates ./agencyC_node_info -g

查看生成文件:

ls ./agencyC_node_info
# 上述命令解释
# 从左至右分别为需要交互给机构A的节点证书,节点P2P连接地址文件(根据node_deployment.ini生成的本机构节点信息)
gmcert_127.0.0.1_30304.crt gmcert_127.0.0.1_30305.crt peers.txt

机构生成节点时需要指定其他节点的节点P2P连接地址,因此,C机构需将节点P2P连接地址文件发送至机构A

cp ./agencyC_node_info/peers.txt ~/generator-A/meta/peersC.txt

在这里插入图片描述

机构C生成群组2创世区块

在~/generator-C目录下执行下述命令

cd ~/generator-C

机构C修改conf文件夹下的group_genesis.ini如下图所示:

cat > ./conf/group_genesis.ini << EOF
[group]
group_id=2

[nodes]
node0=10.241.35.7:30300
node1=10.241.35.7:30301
node2=10.241.35.7:30304
node3=10.241.35.7:30305
EOF

命令执行之后会修改./conf/group_genesis.ini文件:

;命令解释
[group]
group_id=2

[nodes]
node0=127.0.0.1:30300
;机构A节点p2p地址
node1=127.0.0.1:30301
;机构A节点p2p地址
node2=127.0.0.1:30304
;机构C节点p2p地址
node3=127.0.0.1:30305
;机构C节点p2p地址

教程中选择机构C生成群组创世区块,实际生产中可以通过联盟链委员会协商选择。
此步会根据机构C的meta文件夹下配置的节点证书,生成group_genesis.ini配置的群组创世区块。

./generator --create_group_genesis ./group -g

分发群组2创世区块至机构A:

cp ./group/group.2.genesis ~/generator-A/meta/

在这里插入图片描述

机构C生成所属节点

在~/generator-C目录下执行下述命令

cd ~/generator-C
./generator --build_install_package ./meta/peersA.txt ./nodeC -g

机构C启动节点:

bash ./nodeC/start_all.sh
ps -ef | grep fisco

在这里插入图片描述

机构A为现有节点初始化群组2

在~/generator-A目录下执行下述命令

cd ~/generator-A

添加群组2配置文件至已有节点,此步将群组2创世区块group.2.genesis添加至./nodeA下的所有节点内:

./generator --add_group ./meta/group.2.genesis ./nodeA

添加机构C节点连接文件peers至已有节点,此步将peersC.txt的节点P2P连接地址添加至./nodeA下的所有节点内:

./generator --add_peers ./meta/peersC.txt ./nodeA

重启机构A节点:

bash ./nodeA/stop_all.sh
bash ./nodeA/start_all.sh

在这里插入图片描述

查看群组2节点运行状态

查看节点进程:

ps -ef | grep fisco

查看节点log:
在~/generator-C目录下执行下述命令

cd ~/generator-C
tail -f ./node*/node*/log/log*  | grep +++
# 命令解释
# log中打印的+++即为节点正常共识
info|2019-02-25 17:25:56.028692| [g:2][p:264][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,myIdx=0,hash=833bd983...
info|2019-02-25 17:25:59.058625| [g:2][p:264][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,myIdx=0,hash=343b1141...
info|2019-02-25 17:25:57.038284| [g:2][p:264][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,myIdx=1,hash=ea85c27b...

在这里插入图片描述
至此,我们完成了如图所示的机构A、C搭建群组2构建:
在这里插入图片描述

<think>好的,用户想了解如何搭建FISCO BCOS区块链环境。我需要根据提供的引用内容来组织答案。首先,我需要确定用户的需求是什么。他们可能是一个刚入门的开发者,想要搭建自己的区块链网络,所以需要详细的步骤说明。 根据引用[5],里面有提到创建目录、下载安装脚本、执行build_chain.sh这些步骤。我应该先整理这些步骤,确保逻辑清晰。另外,引用[1]提到了官方文档,可能用户需要参考官方指南,但引用里的链接不可见,所以可能需要建议用户查阅官方文档获取最新信息。 接下来,需要注意系统级指令中的要求,比如使用中文回答,生成相关问题,正确使用LaTeX格式。不过这个问题可能涉及代码和命令,数学公式可能不多,但如果有的话需要正确应用$符号。比如,如果有路径或变量可能需要用行内公式格式,但这里可能更多是代码块。 需要检查是否有其他引用内容相关。引用[5]中的步骤比较详细,包括下载脚本、配置节点、启动等。引用[3]和[4]可能涉及后续的Java SDK连接和智能合约调用,但用户目前只需要搭建环境,这部分可能在后续步骤中提及,但当前问题可能不需要深入。 用户的问题可能分为几个步骤:环境准备、下载安装脚本、生成节点配置、启动节点、验证运行状态。每个步骤需要简明扼要地说明,给出示例命令,比如curl命令和build_chain.sh的使用。 另外,用户可能需要了解系统要求,比如操作系统、依赖项安装,比如openssl等。引用[5]中的步骤可能没有提到这些,但根据经验,可能需要补充依赖安装的部分,比如安装openssl, curl等工具。 还需要注意可能的常见问题,比如权限问题(chmod +x),或者端口冲突。可以建议用户检查端口是否被占用,或者查看日志排查错误。 生成的相关问题应该围绕搭建过程中可能遇到的后续步骤,比如节点配置优化、多群组搭建、节点扩容、连接SDK等,参考已有的引用内容,比如引用[3][4]提到的Java SDK连接和智能合约调用,可以作为相关问题。 最后,确保回答结构清晰,分步骤说明,代码块使用正确的格式,自然添加引用标识。例如,在关键步骤后添加[^5],因为引用[5]提供了搭建的具体步骤。</think>### FISCO BCOS区块链环境搭建指南 根据官方文档和社区实践经验,搭建FISCO BCOS区块链环境主要分为以下步骤: --- #### 一、环境准备 1. **操作系统**:推荐使用Ubuntu 16.04+/CentOS 7.2+ 2. **依赖安装**: ```bash sudo apt install -y openssl curl ``` 3. **创建操作目录** ```bash mkdir -p ~/fisco && cd ~/fisco # 创建专用目录 ``` --- #### 二、快速搭建单群组网络 1. **下载安装脚本** ```bash curl -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.11.0/build_chain.sh && chmod u+x build_chain.sh ``` 2. **生成节点配置** ```bash ./build_chain.sh -l "127.0.0.1:4" -p 30300,20200,8545 # 本地生成4节点[^5] ``` 关键参数说明: - `-l`:节点IP和数量 - `-p`:指定P2P/RPC/Channel端口序列 3. **启动区块链节点** ```bash bash nodes/127.0.0.1/start_all.sh # 启动所有节点 ``` --- #### 三、验证运行状态 1. **进程检查** ```bash ps -ef | grep fisco-bcos ``` 2. **日志监控** ```bash tail -f nodes/127.0.0.1/node0/log/* | grep +++ ``` 当看到`+++`日志表示节点共识正常[^5] --- #### 四、进阶配置(可选) - **多群组搭建**:修改`group.group_id`配置文件实现多群组 - **节点扩容**:通过`gen_node_cert.sh`生成新节点证书后加入网络 - **网络拓扑优化**:配置`nodes.json`文件定义网络连接关系[^1] ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值