联盟链快速部署指南
联盟链快速部署指南
一、环境准备
1.1 基础环境要求
# 检查系统环境
uname -a
# Linux/Unix系统
# 检查Docker
docker --version
# Docker 20.10+
# 检查内存
free -h
# 至少4GB内存
# 检查磁盘
df -h
# 至少20GB可用空间
1.2 安装必要工具
# Ubuntu/Debian
sudo apt update
sudo apt install -y curl wget git vim net-tools
# CentOS/RHEL
sudo yum install -y curl wget git vim net-tools
# macOS
brew install curl wget git
二、FISCO BCOS快速部署(推荐)
2.1 一键部署脚本
#!/bin/bash
# fisco-quick-deploy.sh
echo "=== FISCO BCOS快速部署 ==="
# 创建目录
WORKDIR="$HOME/fisco-testnet"
mkdir -p $WORKDIR && cd $WORKDIR
echo "1. 下载部署脚本..."
curl -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v3.6.0/build_chain.sh
chmod u+x build_chain.sh
echo "2. 构建4节点测试网络..."
./build_chain.sh -l "127.0.0.1:4" -p 30300,20200,8545 -i -v 3.6.0
echo "3. 启动所有节点..."
bash nodes/127.0.0.1/start_all.sh
echo "4. 检查节点状态..."
sleep 3
ps aux | grep -v grep | grep fisco-bcos | wc -l
echo "5. 安装控制台..."
curl -#LO https://github.com/FISCO-BCOS/console/releases/download/v3.6.0/download_console.sh
bash download_console.sh
echo "6. 配置控制台..."
cd console
cp conf/config-example.toml conf/config.toml
sed -i 's/127.0.0.1:20200/127.0.0.1:20200,127.0.0.1:20201,127.0.0.1:20202,127.0.0.1:20203/' conf/config.toml
echo "=== 部署完成 ==="
echo "节点目录: $WORKDIR/nodes"
echo "控制台目录: $WORKDIR/console"
echo "启动控制台: cd $WORKDIR/console && bash start.sh"
2.2 Docker Compose部署
# docker-compose-fisco.yml
version: '3'
services:
fisco-node0:
image: fiscoorg/fiscobcos:v3.6.0
container_name: fisco-node0
ports:
- "30300:30300"
- "20200:20200"
- "8545:8545"
volumes:
- ./data/node0:/data
command: -c /data/config.ini
restart: unless-stopped
fisco-node1:
image: fiscoorg/fiscobcos:v3.6.0
container_name: fisco-node1
ports:
- "30301:30300"
- "20201:20200"
- "8546:8545"
volumes:
- ./data/node1:/data
command: -c /data/config.ini
restart: unless-stopped
fisco-console:
image: fiscoorg/console:v3.6.0
container_name: fisco-console
depends_on:
- fisco-node0
- fisco-node1
volumes:
- ./console:/console
stdin_open: true
tty: true
部署命令:
# 创建目录
mkdir fisco-docker && cd fisco-docker
# 创建docker-compose文件
cat > docker-compose.yml << 'EOF'
# 上面的docker-compose-fisco.yml内容
EOF
# 启动服务
docker-compose up -d
# 查看状态
docker-compose ps
# 进入控制台
docker exec -it fisco-console /bin/bash
cd /console
bash start.sh
三、长安链快速部署
3.1 Docker快速体验
#!/bin/bash
# chainmaker-quick-deploy.sh
echo "=== 长安链快速部署 ==="
# 创建目录
WORKDIR="$HOME/chainmaker-testnet"
mkdir -p $WORKDIR && cd $WORKDIR
echo "1. 下载docker-compose配置..."
git clone https://github.com/chainmaker/chainmaker-docker-compose.git
cd chainmaker-docker-compose/simple
echo "2. 启动4节点网络..."
docker-compose up -d
echo "3. 等待节点启动..."
sleep 10
echo "4. 检查运行状态..."
docker-compose ps
echo "5. 进入节点容器..."
echo "执行: docker exec -it chainmaker-node0 /bin/bash"
echo "在容器中: cd /home/chainmaker/chainmaker-go"
echo "使用命令行: ./bin/cmc client status"
echo "=== 部署完成 ==="
echo "管理界面: http://localhost:12301 (如果开放)"
3.2 配置文件生成
# 生成证书和配置
docker exec -it chainmaker-node0 /bin/bash
# 在容器内执行
cd /home/chainmaker/chainmaker-go
./bin/certgen -config=config/certgen/config.yml
# 查看生成的证书
ls -la build/cert/
四、京东JD Chain部署
4.1 Docker快速部署
#!/bin/bash
# jdchain-quick-deploy.sh
echo "=== 京东JD Chain快速部署 ==="
# 创建目录
WORKDIR="$HOME/jdchain-testnet"
mkdir -p $WORKDIR && cd $WORKDIR
echo "1. 拉取镜像..."
docker pull jdchain/jdchain-peer:latest
echo "2. 运行测试节点..."
docker run -d \
--name jdchain-peer \
-p 8080:8080 \
-p 7080:7080 \
-v $PWD/data:/data \
jdchain/jdchain-peer
echo "3. 等待节点启动..."
sleep 15
echo "4. 查看日志..."
docker logs jdchain-peer --tail 20
echo "5. 访问管理界面..."
echo "管理界面: http://localhost:8080"
echo "默认账号: admin/admin"
echo "=== 部署完成 ==="
4.2 多节点配置
# 创建多节点docker-compose
cat > docker-compose-jdchain.yml << 'EOF'
version: '3'
services:
jdchain-peer1:
image: jdchain/jdchain-peer:latest
container_name: jdchain-peer1
ports:
- "8081:8080"
- "7081:7080"
volumes:
- ./data/peer1:/data
environment:
- PEER_HOST=jdchain-peer1
- PEER_PORT=7080
command: ["--spring.profiles.active=peer1"]
jdchain-peer2:
image: jdchain/jdchain-peer:latest
container_name: jdchain-peer2
ports:
- "8082:8080"
- "7082:7080"
volumes:
- ./data/peer2:/data
environment:
- PEER_HOST=jdchain-peer2
- PEER_PORT=7080
command: ["--spring.profiles.active=peer2"]
EOF
# 启动多节点
docker-compose -f docker-compose-jdchain.yml up -d
五、BSN开放联盟链接入
5.1 注册和配置
# BSN使用步骤
echo "1. 访问 https://www.bsnbase.com"
echo "2. 注册账号并完成实名认证"
echo "3. 创建新项目"
echo "4. 选择开放联盟链(推荐泰安链或文昌链)"
echo "5. 获取接入信息:"
echo " - 项目ID"
echo " - 项目密钥"
echo " - API端点"
echo " - 链ID"
5.2 Node.js SDK示例
// bsn-test.js
const { BSNClient } = require('bsn-sdk');
const client = new BSNClient({
endpoint: 'https://api.bsnbase.com',
projectId: 'your-project-id',
apiKey: 'your-api-key',
chainType: 'taian', // 泰安链(基于FISCO BCOS)
});
async function testBSN() {
try {
// 1. 获取链信息
const chainInfo = await client.getChainInfo();
console.log('链信息:', chainInfo);
// 2. 部署合约
const deployResult = await client.deployContract({
contractName: 'HelloWorld',
contractCode: '0x...', // 合约字节码
abi: [...], // 合约ABI
});
console.log('部署结果:', deployResult);
// 3. 调用合约
const callResult = await client.invokeContract({
contractAddress: deployResult.contractAddress,
functionName: 'set',
args: ['key', 'value'],
});
console.log('调用结果:', callResult);
} catch (error) {
console.error('错误:', error);
}
}
testBSN();
六、智能合约开发测试
6.1 FISCO BCOS合约测试
// SimpleStorage.sol
pragma solidity ^0.8.0;
contract SimpleStorage {
uint256 private value;
event ValueChanged(uint256 newValue);
function set(uint256 newValue) public {
value = newValue;
emit ValueChanged(newValue);
}
function get() public view returns (uint256) {
return value;
}
function increment() public {
value += 1;
emit ValueChanged(value);
}
}
部署和测试脚本:
# deploy-test.sh
#!/bin/bash
echo "=== 智能合约部署测试 ==="
cd $HOME/fisco-testnet/console
# 启动控制台
bash start.sh << EOF
# 部署合约
deploy SimpleStorage
# 获取合约地址
# 记录输出的合约地址,如: 0x123...
# 调用set方法
call SimpleStorage 0x123... set 100
# 调用get方法
call SimpleStorage 0x123... get
# 调用increment方法
call SimpleStorage 0x123... increment
# 再次获取值
call SimpleStorage 0x123... get
exit
EOF
6.2 长安链合约测试
// simple_storage.go
package main
import (
"strconv"
"chainmaker.org/chainmaker/contract-sdk-go/v2/sdk"
)
type SimpleStorage struct {
}
func (s *SimpleStorage) InitContract() sdk.Response {
return sdk.Success([]byte("init success"))
}
func (s *SimpleStorage) Set(ctx sdk.Context) sdk.Response {
valueStr := string(ctx.Args()["value"])
_, err := strconv.ParseUint(valueStr, 10, 64)
if err != nil {
return sdk.Error("invalid value")
}
err = ctx.PutState("simple_storage", "value", []byte(valueStr))
if err != nil {
return sdk.Error("put state error")
}
return sdk.Success([]byte("set success"))
}
func (s *SimpleStorage) Get(ctx sdk.Context) sdk.Response {
value, err := ctx.GetState("simple_storage", "value")
if err != nil {
return sdk.Error("get state error")
}
return sdk.Success(value)
}
func main() {
err := sdk.Start(new(SimpleStorage))
if err != nil {
sdk.Instance.Errorf(err.Error())
}
}
七、监控和运维
7.1 基础监控脚本
#!/bin/bash
# monitor-blockchain.sh
echo "=== 区块链网络监控 ==="
echo "时间: $(date)"
echo ""
# 检查Docker容器
echo "1. Docker容器状态:"
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
echo ""
echo "2. 节点进程状态:"
ps aux | grep -E "(fisco-bcos|chainmaker|jdchain)" | grep -v grep
echo ""
echo "3. 端口监听状态:"
netstat -tlnp | grep -E "(30300|20200|8545|12301|8080|7080)"
echo ""
echo "4. 磁盘使用情况:"
df -h | grep -E "(/home|/data)"
echo ""
echo "5. 内存使用情况:"
free -h
echo ""
echo "6. 最近日志检查:"
for log in $(find ~ -name "*.log" -type f -mtime -1 | head -5); do
echo "检查日志: $log"
tail -5 $log
echo "---"
done
7.2 Prometheus监控配置
# prometheus-blockchain.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'fisco-bcos'
static_configs:
- targets:
- 'localhost:8545' # JSON-RPC端口
metrics_path: '/metrics'
- job_name: 'system'
static_configs:
- targets: ['localhost:9100'] # node-exporter
- job_name: 'docker'
static_configs:
- targets: ['localhost:9323'] # docker metrics
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093']
rule_files:
- "alerts.yml"
八、故障排除
8.1 常见问题解决
问题1: 节点无法启动
# 检查端口占用
sudo lsof -i :30300
# 检查日志
tail -f ~/fisco-testnet/nodes/127.0.0.1/node0/log/log_*.log
# 解决方案
# 1. 修改端口配置
# 2. 杀死占用进程
# 3. 检查防火墙
问题2: 交易失败
# 查看交易详情
cd ~/fisco-testnet/console
bash start.sh << EOF
getTransactionReceipt "交易哈希"
EOF
# 常见原因和解决
# 1. Gas不足: 增加gas limit
# 2. 合约错误: 检查合约代码
# 3. 权限问题: 检查账户权限
问题3: 节点不同步
# 检查节点状态
cd ~/fisco-testnet/console
bash start.sh << EOF
getBlockNumber
getPeers
EOF
# 解决方案
# 1. 重启问题节点
# 2. 检查网络连接
# 3. 同步区块数据
8.2 性能优化建议
# 调整系统参数
sudo sysctl -w net.core.somaxconn=65535
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=65535
sudo sysctl -w net.core.netdev_max_backlog=65535
# 调整Docker资源限制
docker update --memory=4g --memory-swap=8g container_name
# 优化存储
# 使用SSD硬盘
# 调整数据库缓存大小
九、扩展和升级
9.1 添加新节点
# FISCO BCOS添加节点
cd ~/fisco-testnet
./build_chain.sh -l "127.0.0.1:1" -p 30304,20204,8549 -i -v 3.6.0
# 修改已有节点配置,添加新节点信息
vim nodes/127.0.0.1/node0/config.ini
# 在[p2p]部分添加: node.4=127.0.0.1:30304
# 重启所有节点
bash nodes/127.0.0.1/stop_all.sh
bash nodes/127.0.0.1/start_all.sh
9.2 版本升级
# 备份数据
cp -r ~/fisco-testnet ~/fisco-testnet-backup-$(date +%Y%m%d)
# 下载新版本
cd ~/fisco-testnet
curl -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v3.7.0/build_chain.sh
chmod u+x build_chain.sh
# 升级节点(逐个升级)
# 1. 停止节点
# 2. 替换二进制文件
# 3. 启动节点
# 4. 验证功能
十、学习资源
10.1 官方文档
- FISCO BCOS: https://fisco-bcos-documentation.readthedocs.io
- 长安链: https://docs.chainmaker.org.cn
- 京东JD Chain: https://jdchain.readthedocs.io
- BSN: https://www.bsnbase.com/doc
10.2 示例项目
```bash
克隆示例项目
git clone https