联盟链快速部署指南

83 字

联盟链快速部署指南

一、环境准备

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