【鸿蒙心迹】在华为云 x86 服务器上用 Python Paramiko 批量搭建鸿蒙开发环境的实战记录
【鸿蒙心迹】在华为云 x86 服务器上用 Python Paramiko 批量搭建鸿蒙开发环境的实战记录
当鸿蒙开发遇上云服务器,当 SSH 遇上 Python,一段自动化运维与鸿蒙工程化交织的实战之旅就此展开。
一、背景:为什么要在 x86 服务器上搞鸿蒙开发?
提到鸿蒙开发,大多数人的第一反应是打开 Windows 或 macOS 上的 DevEco Studio,拖拽 ArkUI 组件,点一下 Run,应用就跑在模拟器或真机上了。但在实际工程中,尤其是在团队协作、CI/CD 流水线、自动化测试等场景下,我们往往需要在远程服务器上完成鸿蒙工程的创建、编译和打包。
这次我拿到了 4 台华为云 ECS 服务器,配置如下:
| 服务器名称 | 公网 IP | 私网 IP | 规格 |
|---|---|---|---|
| ecs-351a-3bde-0001 | 1.92.103.196 | 192.168.0.58 | 8vCPUs / 16GiB / x3e.8u.16g |
| ecs-351a-3bde-0002 | 120.46.214.230 | 192.168.0.82 | 8vCPUs / 16GiB / x3e.8u.16g |
| ecs-351a-3bde-0003 | 1.94.202.193 | 192.168.0.25 | 8vCPUs / 16GiB / x3e.8u.16g |
| ecs-351a-3bde-0004 | 119.3.173.194 | 192.168.0.162 | 8vCPUs / 16GiB / x3e.8u.16g |
统一为 Ubuntu 24.04 LTS 系统,按需计费,弹性公网 IP 全动态 BGP,5Mbit/s 带宽。目标是:在这 4 台 x86 服务器上搭建鸿蒙开发环境,创建 ArkTS 示例工程,并验证整个流程的可行性。
二、技术选型:为什么用 Python Paramiko?
面对 4 台服务器,手动 SSH 逐台敲命令显然不现实。我选择了 Python + Paramiko 方案,原因有三:
- Paramiko 是纯 Python 实现的 SSHv2 协议库,不依赖系统 ssh 客户端,跨平台运行无障碍;
- 支持并发连接,配合
ThreadPoolExecutor可以同时操作多台服务器,大幅缩短部署时间; - 命令执行结果可结构化收集,便于后续生成部署报告和自动化验证。
核心连接代码非常简洁:
import paramiko
def create_ssh_client(host, port, username, password, timeout=30):
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(
hostname=host, port=port, username=username,
password=password, timeout=timeout,
look_for_keys=False, allow_agent=False,
)
return client
set_missing_host_key_policy(AutoAddPolicy()) 自动接受未知主机密钥,look_for_keys=False 和 allow_agent=False 禁用密钥认证和 SSH Agent,纯密码登录,干净利落。
三、实战过程:从裸机到鸿蒙工程
3.1 并行部署架构
我设计了 11 个步骤的自动化部署流程,使用 ThreadPoolExecutor(max_workers=4) 同时在 4 台服务器上并行执行:
with ThreadPoolExecutor(max_workers=4) as executor:
futures = {
executor.submit(setup_harmony_env, server): server["name"]
for server in SERVERS
}
for future in as_completed(futures):
result = future.result()
all_results.append(result)
每个步骤的执行结果(exit_code、stdout、stderr)都会被记录到日志文件,最终汇总为 JSON 报告。
3.2 环境搭建步骤详解
Step 1-2:系统检查与基础包安装
首先检查系统信息,确认内核版本、CPU 核数、内存和磁盘空间。然后安装 curl、wget、git、unzip、python3、vim 等基础工具。
Step 3:安装 OpenJDK 17
鸿蒙工程的构建工具 hvigor 基于 Java 运行,需要 JDK 17+ 环境:
apt-get install -y openjdk-17-jdk
java -version
# openjdk version "17.0.20.1" 2026-08-18
Step 4:安装 Node.js 18.x
ohpm(鸿蒙包管理器)和部分构建脚本依赖 Node.js,通过 NodeSource 官方源安装:
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt-get install -y nodejs
# node v18.20.8, npm 10.8.2
Step 5-7:工作目录与环境变量
创建 /root/harmony_workspace 和 /root/harmony_sdk 目录,编写 /root/.harmony_env.sh 环境脚本并 source 到 .bashrc:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export HARMONY_HOME=/root/harmony_sdk
export DEVECO_SDK_HOME=/root/harmony_sdk
export PATH=$JAVA_HOME/bin:$HARMONY_HOME/command-line-tools/bin:$PATH
Step 8-9:创建 ArkTS 示例工程
这是最关键的一步。在服务器上用命令行创建了一个完整的鸿蒙 ArkTS 工程 HelloHarmony,包含:
build-profile.json5— 工程构建配置,指定 SDK 版本 10oh-package.json5— 包管理配置entry/src/main/ets/pages/Index.ets— 主页面 ArkTS 代码entry/src/main/ets/common/ServerInfo.ets— 服务器信息公共模块
核心页面 Index.ets 实现了一个带点击计数器的 Hello HarmonyOS 界面:
@Entry
@Component
struct Index {
@State message: string = 'Hello HarmonyOS'
@State serverName: string = serverInfo.name
@State serverIP: string = serverInfo.ip
@State clickCount: number = 0
build() {
Column({ space: 20 }) {
Text(this.message)
.fontSize(36)
.fontWeight(FontWeight.Bold)
.fontColor('#007DFF')
Text('服务器: ' + this.serverName)
.fontSize(20)
.fontColor('#666666')
Button('点击我')
.width(200).height(50)
.backgroundColor('#007DFF')
.onClick(() => { this.clickCount++ })
}
.width('100%').height('100%')
.justifyContent(FlexAlign.Center)
}
}
每台服务器的 ServerInfo.ets 都注入了各自的服务器名称和 IP,实现了一码多机部署的差异化配置。
3.3 踩坑记录:Grafana 源 GPG 问题
部署过程中,ecs-351a-3bde-0003 在 apt-get update 时报错:
W: GPG error: https://apt.grafana.com stable InRelease:
The following signatures couldn't be verified because the public key
is not available: NO_PUBKEY 963FA27710458545
E: The repository 'https://apt.grafana.com stable InRelease' is not signed.
这台服务器预装了 Grafana APT 源,但 GPG 公钥缺失导致 apt-get update 失败,连带 Node.js 安装也受影响。修复方案:
rm -f /etc/apt/sources.list.d/grafana.list
apt-get update
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt-get install -y nodejs
移除有问题的 Grafana 源后一切正常。这个坑提醒我们:云服务器预装的第三方源不一定可靠,自动化脚本中应该对 apt-get update 做容错处理。
四、验证结果:4/4 全部通过
验证脚本对每台服务器执行了 6 项检查:
| 检查项 | 0001 | 0002 | 0003 | 0004 |
|---|---|---|---|---|
| SSH 连接 | ✓ | ✓ | ✓ | ✓ |
| JDK 17 | ✓ | ✓ | ✓ | ✓ |
| Node.js 18 | ✓ v18.20.8 | ✓ v18.20.8 | ✓ v18.19.1 | ✓ v18.20.8 |
| 环境变量 | ✓ | ✓ | ✓ | ✓ |
| ArkTS 工程文件 | ✓ 5 files | ✓ 5 files | ✓ 5 files | ✓ 5 files |
| 代码语法检查 | ✓ 4 装饰器 / 7 UI组件 | ✓ | ✓ | ✓ |
每台服务器的 Index.ets 均为 56 行,包含 @Entry、@Component、struct、build() 4 个核心装饰器/结构,以及 Text、Button、Column 等 7 个 UI 组件引用,ArkTS 代码结构完整。
五、Paramiko 批量管理的经验总结
这次实战让我对 Paramiko 批量运维有了几点深刻体会:
-
并行是第一生产力:4 台服务器并行部署,总耗时约 4 分钟,而串行至少需要 12 分钟。
ThreadPoolExecutor+as_completed的组合既保证了并发,又能按完成顺序处理结果。 -
日志结构化是必须的:每条命令的 exit_code、stdout、stderr 都要记录。我封装了
run_with_log()函数,自动截断过长输出,避免日志爆炸。 -
错误隔离很重要:单台服务器失败不应影响其他服务器。每个
setup_harmony_env()调用都包在 try-except 中,异常被捕获并记录,不会中断整个部署流程。 -
验证与部署同等重要:部署脚本跑完不代表成功。单独的验证脚本能确认每台服务器的实际状态,发现 0003 的 Node.js 问题就是靠验证环节。
六、结语
在 x86 服务器上搭建鸿蒙开发环境是完全可行的。虽然服务器上没有 DevEco Studio 的 GUI,但通过命令行工具链(JDK + Node.js + hvigor + ohpm),完全可以实现鸿蒙工程的创建、编译和打包。
这次用 Python Paramiko 管理 4 台华为云 ECS 的实战,不仅验证了鸿蒙命令行开发流程在 Linux 服务器上的可用性,也为后续搭建鸿蒙 CI/CD 流水线打下了基础。下一步计划引入 hvigor 构建命令实现真正的 hap 包打包,并对接 hdc 实现自动化部署到真机。
鸿蒙生态正在快速成长,而工程化能力是生态成熟的重要标志。从一台开发机到一群构建节点,从手动点击到自动化流水线,这条路上每一步都值得记录。
本文参与「鸿蒙心迹 · 开发录原创征稿活动」,基于 2026 年 10 月 2 日在华为云 ECS 上的真实开发实践撰写。
更多推荐




所有评论(0)