30分钟极速部署AElf区块链节点:从环境搭建到多节点集群完整指南
开篇:你是否还在为区块链节点部署而头疼?
作为开发者,你是否经历过:
- 官方文档零散不成体系,跟着操作仍频频踩坑
- 环境依赖复杂,配置项繁多,不知从何下手
- 单节点运行OK,多节点组网却始终无法同步
- 部署完成后,不知如何验证节点是否正常工作
本文将彻底解决这些痛点,提供企业级AElf节点部署全流程,包含Docker快速部署与源码编译两种方案,以及多节点集群搭建实战。读完本文,你将获得:
- 3种部署方式的详细操作指南(Docker/源码编译/多节点)
- 常见错误排查与性能优化技巧
- 节点健康状态监控与管理方法
- 完整的部署流程图与配置示例
AElf节点部署全景图
一、环境准备:系统与依赖检查清单
1.1 支持的操作系统
| 操作系统 | 版本要求 | 推荐指数 |
|---|---|---|
| Ubuntu | 20.04 LTS及以上 | ★★★★★ |
| CentOS | 8.0及以上 | ★★★★☆ |
| macOS | Big Sur及以上 | ★★★★☆ |
| Windows | Windows 10/11专业版 | ★★★☆☆ |
1.2 硬件配置建议
| 节点类型 | CPU | 内存 | 存储 | 网络 |
|---|---|---|---|---|
| 开发测试节点 | 4核 | 8GB | 100GB SSD | 100Mbps |
| 生产环境节点 | 8核 | 16GB | 500GB SSD | 1Gbps |
| 共识节点 | 16核 | 32GB | 1TB SSD | 1Gbps+ |
1.3 必备依赖安装
1.3.1 通用依赖安装脚本
Ubuntu/Debian系统:
# 更新系统包
sudo apt update && sudo apt upgrade -y
# 安装基础工具
sudo apt install -y git curl wget unzip software-properties-common
CentOS/RHEL系统:
# 安装基础工具
sudo dnf install -y git curl wget unzip epel-release
sudo dnf groupinstall -y "Development Tools"
macOS系统(使用Homebrew):
# 安装Homebrew(如未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 安装基础工具
brew install git curl wget unzip
1.3.2 Node.js安装
# Ubuntu/Debian
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install -y nodejs
# CentOS/RHEL
curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo -E bash -
sudo dnf install -y nodejs
# macOS
brew install node@16
# 验证安装
node -v # 应输出v16.x.x
npm -v # 应输出7.x.x以上
1.3.3 Redis数据库安装(推荐)
# Ubuntu/Debian
sudo apt install -y redis-server
sudo systemctl enable redis-server
sudo systemctl start redis-server
# CentOS/RHEL
sudo dnf install -y redis
sudo systemctl enable redis
sudo systemctl start redis
# macOS
brew install redis
brew services start redis
# 验证安装
redis-cli ping # 应返回PONG
Redis配置优化(生产环境):
# 修改配置文件
sudo vim /etc/redis/redis.conf
# 推荐修改以下参数
maxmemory 4gb
maxmemory-policy volatile-lru
appendonly yes
1.3.4 .NET Core SDK安装
# 添加Microsoft包源
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
# 安装.NET Core SDK 3.1
sudo apt update && sudo apt install -y dotnet-sdk-3.1
# 验证安装
dotnet --version # 应输出3.1.x
1.3.5 Protobuf编译器安装
# Ubuntu/Debian
sudo apt install -y protobuf-compiler
# CentOS/RHEL
sudo dnf install -y protobuf-devel
# macOS
brew install protobuf@3.11
brew link --force --overwrite protobuf@3.11
# 验证安装
protoc --version # 应输出3.11.x
1.3.6 Docker与Docker Compose(可选)
# 安装Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER # 允许当前用户运行docker命令(需注销重登录)
# 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker --version
docker-compose --version
二、Docker极速部署:5分钟启动AElf节点
2.1 Docker部署优势
- 环境隔离,避免依赖冲突
- 一键部署,无需复杂配置
- 版本控制,轻松切换节点版本
- 资源限制,提高系统安全性
2.2 单节点Docker部署步骤
步骤1:拉取官方镜像
docker pull aelf/node:latest
步骤2:创建数据目录
mkdir -p ~/aelf-node/data
mkdir -p ~/aelf-node/logs
chmod -R 777 ~/aelf-node # 生产环境建议更精细的权限控制
步骤3:启动节点容器
docker run -d \
--name aelf-node \
-p 8000:8000 \
-p 6800:6800 \
-v ~/aelf-node/data:/app/data \
-v ~/aelf-node/logs:/app/logs \
-e "ConnectionStrings__BlockchainDb=redis://host.docker.internal:6379?db=1" \
-e "ConnectionStrings__StateDb=redis://host.docker.internal:6379?db=1" \
aelf/node:latest
注意:host.docker.internal在Linux系统可能需要替换为实际的Redis服务器IP地址
步骤4:查看容器运行状态
docker ps | grep aelf-node
docker logs -f aelf-node --tail 100
2.3 Docker节点配置说明
创建自定义配置文件appsettings.json:
{
"ConnectionStrings": {
"BlockchainDb": "redis://redis:6379?db=1",
"StateDb": "redis://redis:6379?db=1"
},
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://*:8000"
}
}
},
"Network": {
"ListeningPort": 6800,
"BootNodes": []
},
"Account": {
"NodeAccount": "",
"NodeAccountPassword": ""
},
"InitialMinerList": []
}
使用自定义配置启动:
docker run -d \
--name aelf-node \
-p 8000:8000 \
-p 6800:6800 \
-v ~/aelf-node/data:/app/data \
-v ~/aelf-node/logs:/app/logs \
-v ~/aelf-node/appsettings.json:/app/appsettings.json \
aelf/node:latest
2.4 Docker Compose多服务部署
创建docker-compose.yml文件:
version: '3'
services:
redis:
image: redis:6-alpine
container_name: aelf-redis
ports:
- "6379:6379"
volumes:
- redis-data:/data
restart: always
command: redis-server --appendonly yes
aelf-node:
image: aelf/node:latest
container_name: aelf-node
depends_on:
- redis
ports:
- "8000:8000"
- "6800:6800"
volumes:
- ./data:/app/data
- ./logs:/app/logs
- ./appsettings.json:/app/appsettings.json
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
redis-data:
启动服务:
docker-compose up -d
三、源码编译部署:深度定制节点环境
3.1 源码部署适用场景
- 需要对AElf源码进行定制开发
- 需部署特定版本节点
- 生产环境对安全性和性能有极高要求
- 需要调试节点内部功能
3.2 源码获取与编译
步骤1:克隆代码仓库
git clone https://gitcode.com/gh_mirrors/ae/AElf.git aelf
cd aelf
git checkout master # 或指定稳定版本标签如v1.0.0
步骤2:编译项目
# 进入源码目录
cd src/AElf.Launcher
# 编译项目
dotnet build -c Release
编译成功后,可在bin/Release/netcoreapp3.1目录下找到可执行文件。
3.3 节点账户创建与配置
步骤1:安装AElf命令行工具
npm install -g aelf-command
步骤2:创建节点账户
aelf-command create
执行后会输出类似以下信息,请妥善保存:
Your wallet info is :
Mnemonic : great mushroom loan crisp ... door juice embrace
Private Key : e038eea7e151eb451ba2901f7...b08ba5b76d8f288
Public Key : 0478903d96aa2c8c0...6a3e7d810cacd136117ea7b13d2c9337e1ec88288111955b76ea
Address : 2Ue31YTuB5Szy7cnr3SCEGU2gtGi5uMQBYarYUR5oGin1sys6H
步骤3:配置节点设置
复制默认配置文件:
cp appsettings.json appsettings.Development.json
编辑配置文件:
{
"Account": {
"NodeAccount": "2Ue31YTuB5Szy7cnr3SCEGU2gtGi5uMQBYarYUR5oGin1sys6H",
"NodeAccountPassword": "你的密码"
},
"InitialMinerList": [
"0478903d96aa2c8c0...6a3e7d810cacd136117ea7b13d2c9337e1ec88288111955b76ea"
],
"ConnectionStrings": {
"BlockchainDb": "redis://localhost:6379?db=1",
"StateDb": "redis://localhost:6379?db=1"
},
"Network": {
"ListeningPort": 6800,
"BootNodes": []
},
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://*:8000"
}
}
}
}
3.4 启动节点与服务配置
步骤1:直接启动节点
dotnet bin/Release/netcoreapp3.1/AElf.Launcher.dll --launch-profile Development
步骤2:创建系统服务(生产环境)
创建服务文件:
sudo vim /etc/systemd/system/aelf-node.service
服务文件内容:
[Unit]
Description=AElf Node Service
After=network.target redis-server.service
[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu/aelf/src/AElf.Launcher
ExecStart=/usr/bin/dotnet bin/Release/netcoreapp3.1/AElf.Launcher.dll --launch-profile Development
Restart=always
RestartSec=5
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
启动服务:
sudo systemctl daemon-reload
sudo systemctl enable aelf-node
sudo systemctl start aelf-node
查看服务状态:
sudo systemctl status aelf-node
journalctl -u aelf-node -f --tail 100
四、多节点集群部署:构建你的私有区块链网络
4.1 多节点网络架构图
4.2 多节点环境准备
创建工作目录结构:
mkdir -p ~/aelf-multi-node/{miner1,miner2,fullnode1,redis}
cd ~/aelf-multi-node
4.3 生成节点账户与配置
为每个节点创建独立账户:
# 创建Miner1账户
aelf-command create > miner1/account.info
# 创建Miner2账户
aelf-command create > miner2/account.info
# 创建FullNode1账户
aelf-command create > fullnode1/account.info
4.4 配置各节点
Miner1配置文件(miner1/appsettings.json):
{
"Account": {
"NodeAccount": "miner1_address",
"NodeAccountPassword": "miner1_password"
},
"InitialMinerList": [
"miner1_public_key",
"miner2_public_key"
],
"ConnectionStrings": {
"BlockchainDb": "redis://localhost:6379?db=1",
"StateDb": "redis://localhost:6379?db=1"
},
"Network": {
"ListeningPort": 6800,
"BootNodes": ["127.0.0.1:6801"]
},
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://*:8000"
}
}
}
}
Miner2配置文件(miner2/appsettings.json):
{
"Account": {
"NodeAccount": "miner2_address",
"NodeAccountPassword": "miner2_password"
},
"InitialMinerList": [
"miner1_public_key",
"miner2_public_key"
],
"ConnectionStrings": {
"BlockchainDb": "redis://localhost:6379?db=2",
"StateDb": "redis://localhost:6379?db=2"
},
"Network": {
"ListeningPort": 6801,
"BootNodes": ["127.0.0.1:6800"]
},
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://*:8001"
}
}
}
}
FullNode1配置文件(fullnode1/appsettings.json):
{
"Account": {
"NodeAccount": "fullnode1_address",
"NodeAccountPassword": "fullnode1_password"
},
"InitialMinerList": [
"miner1_public_key",
"miner2_public_key"
],
"ConnectionStrings": {
"BlockchainDb": "redis://localhost:6379?db=3",
"StateDb": "redis://localhost:6379?db=3"
},
"Network": {
"ListeningPort": 6802,
"BootNodes": ["127.0.0.1:6800", "127.0.0.1:6801"]
},
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://*:8002"
}
}
}
}
4.5 使用Docker Compose编排多节点
创建docker-compose.yml文件:
version: '3'
services:
redis:
image: redis:6-alpine
container_name: aelf-redis
ports:
- "6379:6379"
volumes:
- ./redis/data:/data
command: redis-server --appendonly yes
restart: always
miner1:
build: ../../aelf/src/AElf.Launcher
container_name: aelf-miner1
depends_on:
- redis
ports:
- "8000:8000"
- "6800:6800"
volumes:
- ./miner1/appsettings.json:/app/appsettings.json
- ./miner1/data:/app/data
- ./miner1/logs:/app/logs
restart: always
environment:
- ASPNETCORE_ENVIRONMENT=Production
miner2:
build: ../../aelf/src/AElf.Launcher
container_name: aelf-miner2
depends_on:
- redis
- miner1
ports:
- "8001:8000"
- "6801:6800"
volumes:
- ./miner2/appsettings.json:/app/appsettings.json
- ./miner2/data:/app/data
- ./miner2/logs:/app/logs
restart: always
environment:
- ASPNETCORE_ENVIRONMENT=Production
fullnode1:
build: ../../aelf/src/AElf.Launcher
container_name: aelf-fullnode1
depends_on:
- redis
- miner1
- miner2
ports:
- "8002:8000"
- "6802:6800"
volumes:
- ./fullnode1/appsettings.json:/app/appsettings.json
- ./fullnode1/data:/app/data
- ./fullnode1/logs:/app/logs
restart: always
environment:
- ASPNETCORE_ENVIRONMENT=Production
启动整个集群:
docker-compose up -d
五、节点验证与管理:确保区块链稳定运行
5.1 节点基础功能验证
检查节点状态
# 使用命令行工具检查区块高度
aelf-command get-blk-height -e http://localhost:8000
#
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



