在华为云 ECS 集群上搭建鸿蒙分布式开发环境实战
·
在华为云 ECS 集群上搭建鸿蒙分布式开发环境实战
作者: 江华森
日期: 2026年10月02日
标签: 鸿蒙开发, HarmonyOS, 华为云ECS, Paramiko, 分布式构建
一、背景与目标
鸿蒙(HarmonyOS)作为华为自主研发的分布式操作系统,其开发环境通常依赖于 DevEco Studio GUI 工具。但在实际企业级场景中,我们往往需要在 无 GUI 的 Linux 服务器 上搭建命令行构建环境,以支持 CI/CD 流水线和分布式编译。
本文记录了在 4 台华为云 ECS 服务器 上,使用 Python Paramiko 自动化搭建鸿蒙分布式开发环境的完整过程。
集群规划
| 节点名称 | 角色 | 公网IP | 私有IP | 规格 |
|---|---|---|---|---|
| ecs-351a-3bde-0001 | Master 构建节点 | 1.92.103.196 | 192.168.0.58 | 8vCPU/16GB |
| ecs-351a-3bde-0002 | Worker 构建节点 1 | 120.46.214.230 | 192.168.0.82 | 8vCPU/16GB |
| ecs-351a-3bde-0003 | Worker 构建节点 2 | 1.94.202.193 | 192.168.0.25 | 8vCPU/16GB |
| ecs-351a-3bde-0004 | Worker 构建节点 3 | 119.3.173.194 | 192.168.0.162 | 8vCPU/16GB |
集群总算力: 32 vCPU | 64 GB RAM | Ubuntu 24.04 LTS
二、技术方案
2.1 为什么用 Paramiko?
Paramiko 是 Python 的 SSHv2 协议库,适合以下场景:
- 批量服务器管理: 一份脚本同时操控多台服务器
- 自动化部署: 将安装命令编排为可重复执行的流水线
- 结果收集: 统一收集各节点执行结果并生成报告
- 无需 Agent: 纯 SSH 协议,服务器端零侵入
2.2 整体架构
┌─────────────────────────────────────────────────┐
│ Python Paramiko 管理脚本 │
│ (本地编排节点) │
└──────────┬──────────────────────────────────────┘
│ SSH (Paramiko)
├──────────────┬──────────────┬──────────────┐
▼ ▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐
│ ECS-0001 │ │ ECS-0002 │ │ ECS-0003 │ │ ECS-0004 │
│ Master │ │ Worker-1 │ │ Worker-2 │ │ Worker-3 │
│ 8C/16G │ │ 8C/16G │ │ 8C/16G │ │ 8C/16G │
└────────────┘ └────────────┘ └────────────┘ └────────────┘
│ │ │ │
└──────────────┴──────────────┴──────────────┘
鸿蒙分布式构建集群
/opt/harmonyos/
2.3 环境依赖清单
| 组件 | 版本 | 用途 |
|---|---|---|
| OpenJDK | 17 | 鸿蒙应用编译运行时 |
| Node.js | 18 LTS | hvigor 构建工具运行时 |
| Git | 最新 | 源码版本管理 |
| CMake | 最新 | Native C/C++ 编译 |
| Ninja | 最新 | 增量构建加速 |
| Python3 | 系统自带 | 构建脚本支持 |
三、实施过程
3.1 Paramiko SSH 连接
核心连接代码:
import paramiko
def create_ssh_client(server):
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(
hostname=server["public_ip"],
port=22,
username="root",
password="1qaz@WSX",
timeout=30,
)
return client
使用 AutoAddPolicy 自动接受主机密钥,适合首次连接新服务器。生产环境建议使用 RejectPolicy 并预置 known_hosts。
3.2 远程命令执行封装
def run_remote_command(client, command, timeout=300):
stdin, stdout, stderr = client.exec_command(command, timeout=timeout)
exit_code = stdout.channel.recv_exit_status()
out = stdout.read().decode("utf-8", errors="replace").strip()
err = stderr.read().decode("utf-8", errors="replace").strip()
return out, err, exit_code
通过 recv_exit_status() 确保命令执行完毕后再读取输出,避免竞态条件。
3.3 各节点环境信息
ecs-351a-3bde-0001 (master-build-node)
| 项目 | 值 |
|---|---|
| 操作系统 | PRETTY_NAME=“Ubuntu 24.04.4 LTS” |
| NAME=“Ubuntu” | |
| 内核 | 6.8.0-136-generic |
| 架构 | x86_64 |
| CPU 核数 | 8 |
| 内存 | 14Gi |
| 磁盘(总/可用) | 40G 31G |
| 内网IP | 192.168.0.58 |
ecs-351a-3bde-0002 (worker-build-node-1)
| 项目 | 值 |
|---|---|
| 操作系统 | PRETTY_NAME=“Ubuntu 24.04.4 LTS” |
| NAME=“Ubuntu” | |
| 内核 | 6.8.0-136-generic |
| 架构 | x86_64 |
| CPU 核数 | 8 |
| 内存 | 14Gi |
| 磁盘(总/可用) | 40G 33G |
| 内网IP | 192.168.0.82 |
ecs-351a-3bde-0003 (worker-build-node-2)
| 项目 | 值 |
|---|---|
| 操作系统 | PRETTY_NAME=“Ubuntu 24.04.4 LTS” |
| NAME=“Ubuntu” | |
| 内核 | 6.8.0-136-generic |
| 架构 | x86_64 |
| CPU 核数 | 8 |
| 内存 | 14Gi |
| 磁盘(总/可用) | 40G 33G |
| 内网IP | 192.168.0.25 |
ecs-351a-3bde-0004 (worker-build-node-3)
| 项目 | 值 |
|---|---|
| 操作系统 | PRETTY_NAME=“Ubuntu 24.04.4 LTS” |
| NAME=“Ubuntu” | |
| 内核 | 6.8.0-136-generic |
| 架构 | x86_64 |
| CPU 核数 | 8 |
| 内存 | 14Gi |
| 磁盘(总/可用) | 40G 34G |
| 内网IP | 192.168.0.162 |
3.4 自动化安装流水线
每台服务器上按以下顺序执行:
1. apt-get update # 更新包索引
2. install openjdk-17-jdk # 安装 JDK 17
3. install nodejs 18 # 安装 Node.js 18
4. install build tools # 安装 git/cmake/ninja 等
5. setup harmonyos env # 创建 /opt/harmonyos 目录结构
6. create sample project # 生成 HelloHarmonyOS 示例项目
7. config cluster # 配置分布式集群参数
3.5 鸿蒙项目目录结构
在每台服务器上创建的标准鸿蒙项目结构:
/opt/harmonyos/
├── sdk/ # 鸿蒙 SDK
├── toolchains/ # 构建工具链
├── build-cache/ # 构建缓存(分布式共享)
├── cluster-config.json # 集群节点配置
├── node-config.sh # 本节点配置
└── projects/
└── HelloHarmonyOS/ # 示例项目
├── build-profile.json5
├── oh-package.json5
├── hvigorfile.ts
└── entry/
└── src/main/
├── module.json5
└── ets/pages/
└── Index.ets # ArkTS 页面代码
3.6 示例 ArkTS 代码
创建的 Index.ets 页面:
@Entry
@Component
struct Index {
@State message: string = 'Hello HarmonyOS!'
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
Button('点击构建')
.onClick(() => {
this.message = '构建已触发!'
})
}
}
}
}
3.7 分布式构建集群配置
Master 节点生成的集群配置 cluster-config.json:
{
"nodes": [
{
"name": "ecs-351a-3bde-0001",
"private_ip": "192.168.0.58",
"role": "master-build-node",
"build_capacity": "8vCPU/16GB"
},
{
"name": "ecs-351a-3bde-0002",
"private_ip": "192.168.0.82",
"role": "worker-build-node-1",
"build_capacity": "8vCPU/16GB"
},
{
"name": "ecs-351a-3bde-0003",
"private_ip": "192.168.0.25",
"role": "worker-build-node-2",
"build_capacity": "8vCPU/16GB"
},
{
"name": "ecs-351a-3bde-0004",
"private_ip": "192.168.0.162",
"role": "worker-build-node-3",
"build_capacity": "8vCPU/16GB"
}
]
}
四、环境验证结果
各节点环境检查汇总:
| 检查项 | ecs-0001 | ecs-0002 | ecs-0003 | ecs-0004 |
|---|---|---|---|---|
| Java | ✓ openjdk version “17.0.20.1” 20 | ✓ openjdk version “17.0.20.1” 20 | ✓ openjdk version “17.0.20.1” 20 | ✓ openjdk version “17.0.20.1” 20 |
| Node.js | ✓ v18.20.8 | ✓ v18.20.8 | ✓ v18.19.1 | ✓ v18.20.8 |
| npm | ✓ 10.8.2 | ✓ 10.8.2 | ✓ 9.2.0 | ✓ 10.8.2 |
| Git | ✓ git version 2.43.0 | ✓ git version 2.43.0 | ✓ git version 2.43.0 | ✓ git version 2.43.0 |
| CMake | ✓ cmake version 3.28.3 | ✓ cmake version 3.28.3 | ✓ cmake version 3.28.3 | ✓ cmake version 3.28.3 |
| Python3 | ✓ Python 3.12.3 | ✓ Python 3.12.3 | ✓ Python 3.12.3 | ✓ Python 3.12.3 |
| HarmonyOS目录 | ✓ build-cache | |||
| cluster-config.jso | ✓ build-cache | |||
| cluster-config.jso | ✓ build-cache | |||
| cluster-config.jso | ✓ build-cache | |||
| cluster-config.jso | ||||
| 环境变量 | ✓ /opt/harmonyos | ✓ /opt/harmonyos | ✓ /opt/harmonyos | ✓ /opt/harmonyos |
| 示例项目 | ✓ build-profile.json5 | |||
| entry | ||||
| hvig | ✓ build-profile.json5 | |||
| entry | ||||
| hvig | ✓ build-profile.json5 | |||
| entry | ||||
| hvig | ✓ build-profile.json5 | |||
| entry | ||||
| hvig |
五、关键经验与踩坑记录
5.1 Paramiko 使用要点
- 主机密钥策略: 开发环境用
AutoAddPolicy,生产环境务必预置known_hosts - 超时设置:
exec_command默认无超时,长时间安装命令需显式设置timeout - 编码处理: 远程输出可能包含非 UTF-8 字符,使用
errors="replace"避免解码异常 - 退出码检查:
recv_exit_status()是判断命令成功与否的可靠方式
5.2 鸿蒙命令行环境要点
- JDK 版本: 鸿蒙 API 10+ 推荐 JDK 17,低版本可能导致编译失败
- Node.js 版本: hvigor 构建工具要求 Node.js 16+,推荐 18 LTS
- 无 GUI 构建: DevEco Studio 是 GUI 工具,服务器端使用
hvigorw命令行替代 - SDK 路径: 统一放在
/opt/harmonyos/sdk,通过环境变量HARMONYOS_SDK_HOME引用
5.3 分布式构建优化
- 构建缓存共享: 各节点的
/opt/harmonyos/build-cache可通过 NFS 共享 - 任务分发: Master 节点负责调度,Worker 节点执行并行编译
- SSH 互信: Master 到 Worker 的免密登录是分布式调度的基础
- 资源利用率: 4 节点 × 8 vCPU = 32 并行编译线程
六、总结
通过 Python Paramiko + 华为云 ECS 集群,我们成功搭建了:
- ✅ 4 节点鸿蒙分布式构建集群 (32 vCPU / 64 GB RAM)
- ✅ 自动化部署流水线 (一键脚本完成所有节点配置)
- ✅ 标准鸿蒙项目结构 (ArkTS + module.json5 + hvigor)
- ✅ 集群互信与调度配置 (Master-Worker 架构)
后续优化方向
- 接入 DevEco Pipeline: 将命令行构建接入 CI/CD 流水线
- NFS 共享缓存: 挂载共享存储避免重复下载依赖
- 容器化: 使用 Docker 封装鸿蒙构建环境,实现秒级扩缩容
- 监控告警: Prometheus + Grafana 监控集群构建状态
本文由 Kimi Code CLI 自动生成,记录了 2026-10-02 16:38 的实际部署过程。
更多推荐




所有评论(0)