mcpField
H
huawei-cloud-ecs-dsh-deploy

huawei-cloud-ecs-dsh-deploy

github.com/huaweicloud云与 DevOps5968 次安装2 天前更新
代码仓库

关于 huawei-cloud-ecs-dsh-deploy

此技能用于在 Huawei Cloud Flexus X 实例上部署 DeepSeek Harness(dsh),面向需要云端 Agent 开发环境的开发者。执行前必须取得用户明确确认,并通过 SSH 隧道访问仅绑定本机地址的 Web UI。

主要功能

  1. 01部署 dsh 并管理云服务器
  2. 02列出区域与现有服务器
  3. 03测试 Huawei Cloud 凭证
  4. 04检查状态或删除服务器
  5. 05通过 SSH 隧道访问 Web UI

适用场景

  1. 01搭建云端 Agent 开发环境
  2. 02部署和运行 dsh Web UI
  3. 03检查或管理已部署服务器

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/huaweicloud/huaweicloud-skills --skill huawei-cloud-ecs-dsh-deploy

安装后在 Claude Code 中输入/huawei-cloud-ecs-dsh-deploy确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
acceptance-criteria.md
cli-installation-guide.md
conversation-examples.md
iam-policies.md
verification-method.md
scripts/
coc_deploy.py
config.py
deploy_dsh.py
huawei_cloud_ecs.py
pyproject.toml
query_regions.py
utils.py

详细介绍

华为云 Flexus X + DeepSeek Harness(dsh)一键部署

⚠️ 部署前检查清单(最高优先级)

此技能会产生实际费用(创建华为云 Flexus X 实例),执行前必须征得用户确认!

必须确认的选项:

  • 区域(默认:cn-north-4)
  • 规格(默认:x1.2u.4g,2 核 4GB)
  • 计费模式(默认:按需计费)

禁止的操作:

  • ❌ 未经用户明确确认,不得执行部署
  • ❌ 未询问用户,不得使用默认配置进行部署
  • ❌ 不得假设用户接受默认值
  • ❌ 不得编造或估算价格(例如“≈ ¥0.2-0.3/小时”);务必引导用户查看官方价格页面

正确流程:

  1. 向用户展示默认配置(区域、规格、计费模式)
  2. 告知用户,查询价格请使用官方价格计算器:https://www.huaweicloud.com/pricing/calculator.html#/hecs
  3. 询问用户是否确认,或是否需要修改
  4. 只有在用户输入 CONFIRM(大写)后,才能执行部署

概述

此技能可在华为云 Flexus X 实例上一键部署 DeepSeek Harness(dsh)——DeepSeek AI 推出的开源 AI Agent 框架:

模块说明命令
列出区域显示可用区域python3 scripts/deploy_dsh.py --list-regions
测试连接验证 AK/SK 凭据python3 scripts/deploy_dsh.py --test
部署购买 Flexus X 实例并部署 dshpython3 scripts/deploy_dsh.py
组件
组件说明端口备注
Node.jsJavaScript 运行时-Node.js 22 LTS,安装到 /opt/nodejs/current
@deepseek-ai/dshDeepSeek Harness 命令行工具3080(环回地址)官方 npm 包,dsh web 仅绑定到 127.0.0.1
Nginx反向代理80(环回地址)本地服务代理 80 → 127.0.0.1:3080(公共访问不使用此端口,见下方 SSH 隧道)
systemd服务管理器-dsh.service 管理 dsh 生命周期,故障时自动重启
UFW防火墙-允许 22(SSH)/80/443(80/443 被安全组拦截,无法从公网访问)
已部署的应用
应用说明端口访问 URL
dsh Web UIAI Agent 框架 Web 界面3080(环回地址)http://127.0.0.1:3080(**须先建立 SSH 隧道**,见本地访问指南)

✅ 重要:dsh web 命令特意只绑定到 127.0.0.1——CLI 会拒绝 --host 0.0.0.0。远程访问须通过 SSH 本地端口转发隧道:在你的机器上运行 ssh -L 3080:127.0.0.1:3080 root@{public_ip},然后打开 http://127.0.0.1:3080。安全组只需开放 22 端口——dsh 不会暴露给公网,因此更加安全。

使用场景
  1. AI Agent 开发 - 通过 Web UI 运行和管理 DeepSeek AI Agent 框架
  2. 自动化与工作流 - 使用“一切皆插件”的架构构建多步骤 Agent 工作流
  3. 开发与测试 - 快速搭建 AI Agent 开发环境
  4. 团队协作 - 在团队内共享 Agent 工作区
  5. 多区域部署 - 为全球用户提供就近访问
重要说明

⚠️ 所有脚本和环境检查脚本都包含在技能包中。必须使用技能 action=exec 执行,不要直接在 shell 中运行。

先决条件

使用此技能前,请确保满足以下条件:

1. 华为云账号
  • 有效的华为云账号
  • 账号已完成实名认证
  • 账号余额充足或已绑定支付方式
2. AK/SK 凭证
  • 已创建华为云访问密钥(AK/SK)
  • AK/SK 具有以下权限:
    • ECS:弹性云服务器管理
    • VPC:虚拟私有云管理
    • EIP:弹性公网 IP 管理
    • COC:云运维中心管理
  • 获取方式:华为云控制台 → 我的凭证 → 访问密钥 → 创建访问密钥

凭证配置方式:

方式说明优先级
环境变量HW_ACCESS_KEY、HW_SECRET_KEY、HW_SECURITY_TOKEN最高(推荐)
命令行参数--ak、--sk、--security-token较低(可用但不推荐)

凭证类型(按推荐顺序):

优先级类型参数说明
首选临时 AK/SK环境变量 + HW_SECURITY_TOKEN带安全令牌的临时凭证,安全性更高
次选永久 AK/SK仅环境变量从华为云控制台获取的长期访问密钥

**注意:**凭证优先从环境变量读取;系统绝不会要求用户直接输入 AK/SK。不过,如果用户通过其他方式(例如在对话中输入、配置文件)主动提供凭证,仍支持解析这些凭证。

3. IAM 权限
服务策略所需操作
ECSECS FullAccessecs:*
VPCVPC FullAccessvpc:*
EIPVPC FullAccessvpc:publicIps:*
COCCOC FullAccesscoc:*

📖 最小权限策略详情:IAM 策略

4. 运行环境
  • Python 3.8 或更高版本

必需依赖项:

PackageVersionDescription
requests≥2.31.0HTTP 请求库
huaweicloudsdkcore≥3.1.70华为云 SDK 核心库
huaweicloudsdkecs≥3.1.70弹性云服务器 SDK
huaweicloudsdkcoc≥3.1.70云运维中心 SDK

安装命令:

pip install requests huaweicloudsdkcore huaweicloudsdkecs huaweicloudsdkcoc
5. 网络环境
  • 能够访问华为云 API 终端节点
  • 所需终端节点:
    • ecs.{region}.myhuaweicloud.com
    • vpc.{region}.myhuaweicloud.com
    • iam.myhuaweicloud.com
    • coc.myhuaweicloud.com

⚠️ 安全注意事项

⚠️ 安全执行规则(最高优先级)
规则说明
1所有脚本都必须通过 skill action=exec 执行,禁止直接在 shell 中运行
2禁止在对话中打印包含 AK/SK/Token 的脚本内容或命令
3禁止创建临时脚本文件,优先使用内联执行(python3 -c)
4执行失败时,只返回错误消息,禁止改写脚本或打印完整命令
5AK/SK/Token 必须通过环境变量传递,禁止出现在对话中
6⚠️ 绝对禁止以任何形式暴露、记录或打印 AK/SK/Token 值
⚠️ 安全组策略(关键 — 部署前请阅读)

部署策略 — 简单且安全:

设置值说明
安全组状态空(无入站规则)脚本只创建安全组,不添加任何规则
默认访问权限所有端口均被阻止配置规则之前,任何 IP 都无法访问服务器
需要开放的端口仅 22(SSH)通过 SSH 隧道访问 dsh Web UI;无需将 80/443 对公网开放

部署后如何配置:

  1. 访问 华为云控制台 → ECS → 安全组
  2. 找到名为 sg-dsh 的安全组
  3. 手动添加一条入站规则:协议 TCP,端口 22,源 IP 为你的公网 IP + /32 后缀(例如,203.0.113.10/32)
  4. 不要添加范围过大的 80/443 规则 — 仅通过 SSH 隧道访问 dsh;无需暴露其他端口

💡 为什么使用空安全组? 安全至上 — 你可以完全控制哪些 IP 能访问服务器。仅开放 22 端口 + SSH 隧道 — dsh Web UI 绝不会暴露在公网,因此即使 API 密钥泄露,也无法从互联网访问。

⚠️ AK/SK 安全: 请参阅前置条件 - AK/SK 凭据。严禁以任何形式暴露、记录或打印 AK/SK/Token 值。

⚠️ dsh 安全(关键)
规则说明
1dsh 仅绑定到 127.0.0.1 — 切勿强制其监听 0.0.0.0(CLI 按设计会拒绝此操作)
2通过 SSH 本地端口转发进行远程访问:在本地运行 ssh -L 3080:127.0.0.1:3080 root@{public_ip},然后打开 http://127.0.0.1:3080
3DEEPSEEK_API_KEY 通过 systemd drop-in 注入,文件权限为 600 — 绝不写入 unit 文件或日志
4部署时 可以不设置 API 密钥;用户也可以稍后在 Web UI 中设置(Settings → Models)
5dsh 以专用系统用户 dsh(无 shell)运行,而非 root
6在生产环境中使用时,必须启用 HTTPS(例如,通过 Nginx 本地代理使用 Let's Encrypt)
🔐 SSL/TLS 验证
  • 🔒 所有华为云 API 请求默认启用 SSL/TLS 证书验证(verify=true)。
  • 可通过 HW_VERIFY_SSL 环境变量覆盖此设置 — HW_VERIFY_SSL=false 会禁用验证。
  • ⚠️ HW_VERIFY_SSL=false 仅供测试使用。 生产环境中切勿禁用 SSL 验证,否则 AK/SK 凭据和 API 流量会暴露于中间人攻击之下。

核心命令和用法

💡 注意:如果未提供操作选项,默认执行部署操作。

命令选项
命令/选项功能说明
python3 scripts/deploy_dsh.py部署购买 Flexus X 实例并部署 dsh
python3 scripts/deploy_dsh.py --list-regions显示可用区域显示所有可用区域(19 个区域)
python3 scripts/deploy_dsh.py --test测试连接验证 AK/SK 凭据
python3 scripts/deploy_dsh.py --list-servers列出服务器显示指定区域中的所有服务器
python3 scripts/deploy_dsh.py --delete <ID>删除服务器按 ID 或名称删除服务器
python3 scripts/deploy_dsh.py --status <ID>检查状态按服务器 ID 检查部署状态
全局参数

💡 必需参数:--ak、--sk(或设置 HW_ACCESS_KEY、HW_SECRET_KEY 环境变量) 💡 建议参数:--security-token(或为临时凭据设置 HW_SECURITY_TOKEN)

执行示例

示例 1:列出可用区域

python3 scripts/deploy_dsh.py --list-regions

示例 2:测试 AK/SK 连接

python3 scripts/deploy_dsh.py --test

示例 3:使用默认设置部署(需要用户确认)

python3 scripts/deploy_dsh.py

示例 4:使用自定义区域和规格部署

python3 scripts/deploy_dsh.py --region cn-east-3 --flavor x1.4u.8g

示例 5:列出现有服务器

python3 scripts/deploy_dsh.py --list-servers --region cn-north-4

示例 6:检查部署状态

python3 scripts/deploy_dsh.py --status <server_id>

示例 7:删除服务器

python3 scripts/deploy_dsh.py --delete <server_id_or_name>
参数说明默认值
--region目标区域cn-north-4
--flavor实例规格x1.2u.4g
--name服务器名称自动生成
--password服务器密码自动生成
--charging-mode计费模式postPaid
--bandwidthEIP 带宽(Mbps)100
--volume-size系统磁盘(GB)40
--coc-regionCOC 服务区域cn-north-4
--coc-timeoutCOC 脚本执行超时时间(秒)1800
dsh 参数
参数说明默认值
--dsh-portdsh 监听端口(仅限环回地址)3080
--api-key预先写入 dsh 服务的 DEEPSEEK_API_KEY(可选)未设置

💡 dsh 端口仅绑定到 127.0.0.1 — 通过 SSH 隧道在本地访问(ssh -L 3080:127.0.0.1:3080 root@{ip})。dsh 端口本身无需配置安全组规则。

高级参数

💡 以下参数面向高级用户,一般场景下无需使用

参数说明默认值
--project-id华为云项目 ID(可选)自动获取
--image镜像 ID默认 Ubuntu 22.04
--zone指定可用区自动选择
--random-zone随机选择可用区关闭
--no-eip不创建弹性公网 IP关闭
--auto-confirm跳过交互式确认(请谨慎使用!)关闭
凭证配置示例

方法 1:使用环境变量(首选 — 强烈推荐)

python3 scripts/deploy_dsh.py

方法 2:使用命令行参数(次选 — 可以接受)

# Temporary credentials
python3 scripts/deploy_dsh.py \
  --ak <AK> --sk <SK> --security-token <TOKEN> \
  --region cn-north-4 \
  --flavor x1.2u.4g

# Permanent credentials
python3 scripts/deploy_dsh.py \
  --ak <AK> --sk <SK> \
  --region cn-north-4 \
  --flavor x1.4u.8g
🔒 防止重复部署机制

系统内置锁文件机制,可防止重复部署:

  • 部署开始时自动创建锁文件:dsh_deploy.lock
  • 锁文件有效期:30 分钟(自动过期)
  • 锁文件存在时,自动阻止新的部署
  • 锁文件路径:系统临时目录(Linux 上为 /tmp/dsh_deploy.lock,Windows 上为 %TEMP%\dsh_deploy.lock)

⚠️ 重要说明:

  • ❌ 请勿同时运行多个部署任务
  • ❌ 重复部署会创建多台服务器,导致费用翻倍
  • 部署失败后,请检查锁文件是否已删除

失败处理: 部署失败时,返回失败原因并引导用户检查控制台;不自动重试或修改参数

🚀 国内镜像加速

内置国内镜像加速功能,可加快部署:

镜像类型镜像源说明
Ubuntu APTUSTC (mirrors.ustc.edu.cn)系统软件包更新
npm registrynpmmirror (registry.npmmirror.com)安装 @deepseek-ai/dsh + 下载 Node.js 二进制文件
pip(本地)华为云 (repo.huaweicloud.com)在操作端安装 Python 依赖

镜像配置位置: scripts/coc_deploy.py 中的 COMBINED_INSTALL_SCRIPT

模块详情

部署 DeepSeek Harness (dsh)

⏱️ 部署时间:整个过程约需 10 分钟(创建服务器需 3-5 分钟 + 部署软件需 5-8 分钟),请耐心等待

💡 部署命令请参阅凭据配置示例,所有参数请参阅全局参数

服务器上的部署阶段(通过 COC 脚本):

阶段操作说明
0国内镜像源配置 USTC APT 镜像源 + npmmirror npm registry
1Node.js 22 LTS通过官方 tarball 安装(npmmirror 镜像源,失败时回退到 nodejs.org)
2@deepseek-ai/dshnpm install -g @deepseek-ai/dsh
3专用用户创建系统用户 dsh,准备 DSH_HOME (/home/dsh/.dsh)
4systemd 服务写入 dsh.service (restart=on-failure, ProtectSystem, ReadWritePaths)
5Nginx 反向代理80 → 127.0.0.1:3080,WebSocket 升级请求头(仅限环回地址)
6防火墙UFW 放行 22/80/443(安全组会阻止 80/443,无法从公网访问)
7启动并验证启动 dsh,等待环回 HTTP 200,打印部署信息

可用区域

常用区域(运行 --list-regions 可查看更多区域):

区域 ID区域名称支持的 Flexus X 实例类型
cn-north-4华北-北京 4x1, x1e, x1i, x2e
cn-east-3华东-上海 1x1, x1e, x1i, x2e
cn-south-1华南-广州x1, x1e, x1i, x2e
ap-southeast-1中国-香港x1, x2e
ap-southeast-3亚太-新加坡x1, x1e, x2e

💡 查看完整的区域列表(共 19 个),运行:python3 scripts/deploy_dsh.py --list-regions

输出格式规范

⛔ 重要 — 必须原样输出 SSH 隧道命令,绝不能省略、总结或改写:

部署完成后,回复必须包含一行可直接复制粘贴的 SSH 隧道命令,并将 {public_ip} 替换为脚本输出中的实际公网 IP。 例如,如果脚本输出 Public IP: 121.36.x.x,回复必须包含:

ssh -L 3080:127.0.0.1:3080 [email protected]

绝不能只写“请建立 SSH 隧道”而不提供完整命令 — 用户需要复制粘贴此命令;缺少该命令会导致无法访问 Web UI。

成功部署后,必须按以下格式返回结果:

🎉 Deployment Successful!

| Item | Value |
|------|-----|
| Server Name | {server_name} |
| Public IP | {public_ip} |
| SSH Password | {password} |
| Region | {region_id} ({region_name}) |

🌐 Access URL (SSH tunnel required first):
- Run on your local machine (Windows PowerShell / macOS Terminal), replacing {public_ip} with the Public IP from the table above:

ssh -L 3080:127.0.0.1:3080 root@{public_ip}

- Enter the SSH password (from the table above), keep the terminal window open
- Then open in your browser: http://127.0.0.1:3080

🔑 SSH Login: `ssh root@{public_ip}` (password: {password})

📦 Installed Components:
- Node.js 22 LTS ({node_version})
- @deepseek-ai/dsh ({dsh_version}, systemd service 'dsh')
- Nginx reverse proxy (80 → 127.0.0.1:{dsh_port}, loopback only)

📋 Post-deployment TODO:
1. Configure security group: Console → ECS → Security Groups → sg-dsh → Add inbound rule (TCP 22, source your_ip/32)
2. Establish SSH tunnel locally (see command above), then open Web UI: http://127.0.0.1:3080
3. In the Web UI: Settings → Models, enter your DeepSeek API key and save
4. Choose a workspace directory, then start a session

📖 [DeepSeek Harness GitHub](https://github.com/deepseek-ai/deepseek-harness) | [Flexus X Docs](https://support.huaweicloud.com/productdesc-flexusx/pd_01_0002.html)

变量:{server_name} 服务器名称 | {public_ip} 公网 IP | {password} SSH 密码 | {region_id}/{region_name} 区域 | {dsh_port} dsh 环回端口 | {node_version} Node.js 版本 | {dsh_version} dsh CLI 版本

🔐 本地访问指南(SSH 端口转发)

⚠️ 部署后必须按照本节操作,否则浏览器无法打开 dsh Web UI。dsh 仅监听服务器的环回地址 127.0.0.1:3080 — 你需要在本地计算机上建立 SSH 隧道,将本地端口 3080 转发到服务器的 3080 端口。

工作原理:ssh -L 3080:127.0.0.1:3080 root@{public_ip} 表示 — 通过加密的 SSH 通道,将本地 3080 端口上的所有流量转发到云服务器上的 127.0.0.1:3080(dsh 的运行位置)。数据经过完整加密,dsh Web UI 不会暴露到公网,只有能够通过 SSH 连接的人才能访问。

Windows 用户(PowerShell)
  1. 打开 PowerShell:按 Win 键 → 输入 powershell → 按 Enter(或按 Win+X → 选择“Windows PowerShell”/“Windows Terminal”)
  2. 运行隧道命令(将 {public_ip} 替换为部署输出中的公网 IP):
    ssh -L 3080:127.0.0.1:3080 root@{public_ip}
    
  3. 首次确认指纹:如果出现提示 Are you sure you want to continue connecting (yes/no)?,输入 yes 并按 Enter
  4. 输入密码:输入部署输出中的 SSH 密码(输入时不会显示字符,这是正常现象),然后按 Enter
  5. 保持窗口打开:看到远程 shell 提示符(例如 root@xxx:~#)后,隧道即已建立。请勿关闭此窗口
  6. 打开浏览器:访问 http://127.0.0.1:3080,打开 dsh Web UI

💡 Windows 10/11 自带 OpenSSH 客户端,无需额外安装。如果出现“无法识别 ‘ssh’”的提示,请前往“设置”→“应用”→“可选功能”→添加“OpenSSH Client”。

macOS 用户(Terminal)
  1. 打开 Terminal:按 Command + Space → 输入 Terminal → 按 Enter(或在 Finder → Applications → Utilities → Terminal 中打开)
  2. 运行隧道命令(将 {public_ip} 替换为部署输出中的公网 IP):
    ssh -L 3080:127.0.0.1:3080 root@{public_ip}
    
  3. 首次确认指纹:如果出现提示 Are you sure you want to continue connecting (yes/no)?,输入 yes 并按 Enter
  4. 输入密码:输入部署输出中的 SSH 密码(输入时不会显示字符,这是正常现象),然后按 Enter
  5. 保持窗口打开:看到远程 shell 提示符后,隧道即已建立。请勿关闭此窗口
  6. 打开浏览器:访问 http://127.0.0.1:3080,打开 dsh Web UI

💡 macOS 自带 OpenSSH 客户端,无需额外安装。

关闭隧道与高级用法
场景操作
关闭隧道在 PowerShell/Terminal 窗口中按 Ctrl+C,或输入 exit 并按 Enter
仅转发,不启动 shellssh -N -L 3080:127.0.0.1:3080 root@{public_ip}(-N 表示不运行远程命令;不会显示 shell 提示符,推荐使用)
macOS 后台运行ssh -f -N -L 3080:127.0.0.1:3080 root@{public_ip}(-f 表示在后台运行;使用 pkill -f "ssh -f -N" 或 killall ssh 停止)
本地端口 3080 已被占用使用其他本地端口:ssh -L 18080:127.0.0.1:3080 root@{public_ip},然后访问 http://127.0.0.1:18080
免密码登录(推荐)运行 ssh-copy-id root@{public_ip}(macOS/Linux),或在 PowerShell 中使用 SSH 密钥,以便之后免密码连接

⚠️ 注意:隧道关闭后,http://127.0.0.1:3080 将无法访问,这是正常现象;只需重新运行隧道命令即可。每次机器重启后,都必须重新建立隧道。

dsh 初始设置

建立 SSH 隧道后,打开 dsh Web UI(http://127.0.0.1:3080):

设置说明
API Key前往 Settings → Models,输入 DeepSeek API key 并保存(如果未通过 --api-key 预先设置)
工作区选择一个工作区目录,用于存储会话和产物
启动会话在 Web UI 中启动会话,harness 将作出响应

⚠️ 重要:dsh 可以读写文件并运行命令——安全组中只应开放端口 22(来源为 your_ip/32);通过 SSH 隧道访问 dsh;切勿向公网开放 80/3080 端口,切勿使用 0.0.0.0/0。

部署架构

此技能使用 COC (Cloud Operations Center) 进行安全部署,取代传统 SSH 方式:

┌─────────────────────────────────────────────────────────────┐
│                    Flexus Cloud Server X Instance                     │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────────────────────────────────────────┐    │
│  │              Ubuntu 22.04 Server                    │    │
│  ├─────────────────────────────────────────────────────┤    │
│  │                                                     │    │
│  │   SSH tunnel ──► dsh (127.0.0.1:3080)              │    │
│  │   (port 22)       (loopback only)                   │    │
│  │                                                     │    │
│  │  ┌───────────────┐      ┌───────────────┐          │    │
│  │  │    Nginx      │      │    systemd    │          │    │
│  │  │   (port 80)   │      │  dsh.service  │          │    │
│  │  │   loopback    │      └───────┬───────┘          │    │
│  │  └───────────────┘              │                   │    │
│  │                                 ▼                   │    │
│  │                            dsh web (Node.js 22)     │    │
│  │                             user: dsh (no-shell)   │    │
│  │                             DSH_HOME: /home/dsh/.dsh│    │
│  └───────────┬──────────────────────┬──────────────────┘    │
│              │                      │                       │
│              │              ┌───────┴───────┐              │
│              │              │ Security Group │             │
│              │              │    sg-dsh     │             │
│              │              │ allow 22 /32  │             │
│              │              └───────┬───────┘             │
│              │                      │                      │
│              └──────────────────────┼──────────────────────┘
│                                     ▼                       │
│                           ┌─────────────┐                  │
│                           │    EIP      │  SSH only (22)   │
│                           └─────────────┘                  │
│                                     ▲                       │
│                                     │                       │
│                           ┌─────────┴─────────┐            │
│                           │  COC (Cloud       │           │
│                           │  Operations       │           │
│                           │  Center)          │           │
│                           │  Secure Script    │           │
│                           │  Execution        │           │
│                           └───────────────────┘            │
└─────────────────────────────────────────────────────────────┘

              ┌─────────────────────────────┐
              │  User machine (Windows/macOS) │
              │  ssh -L 3080:127.0.0.1:3080 root@{ip} │
              │  Browser → http://127.0.0.1:3080      │
              └─────────────────────────────┘
部署流程
阶段操作描述
1创建服务器通过 Huawei Cloud SDK 创建 Flexus X 实例
2配置安全组创建 sg-dsh 安全组(规则为空,需手动配置)
3等待 UniAgent等待 COC UniAgent 上线
4创建 COC 脚本在 Cloud Operations Center 中创建安装脚本
5执行脚本通过 COC 在目标实例上执行脚本
6验证部署检查 dsh 服务和环回端口状态
COC 部署优势

与 SSH 方法相比,COC 部署具有以下优势:

特性SSH 方法COC 方法
安全性需要开放 SSH 端口,存在安全风险通过 Cloud Operations Center 安全执行,无需 SSH 端口
权限控制需要 SSH 密码或密钥使用 Huawei Cloud IAM 权限控制
审计日志需要手动记录COC 自动记录执行日志
批量部署需要依次建立 SSH 连接支持批量部署多台服务器
错误处理需要手动处理COC 提供标准化错误处理
日志文件
文件路径描述
/var/log/dsh-bootstrap.log部署脚本执行日志
/home/dsh/.dsh/dsh 数据目录(会话、工作区、构件)
/etc/systemd/system/dsh.servicedsh systemd 单元文件
/etc/systemd/system/dsh.service.d/10-credentials.confDEEPSEEK_API_KEY 配置片段(权限模式为 600,仅在使用 --api-key 时创建)
/etc/nginx/conf.d/dsh.confNginx 反向代理配置

文件结构

skills/huawei-cloud-ecs-dsh-deploy/
├── SKILL.md                    # English version
├── scripts/
│   ├── deploy_dsh.py           # Main deployment script
│   ├── pyproject.toml          # Dependency list
│   ├── huawei_cloud_ecs.py     # Huawei Cloud SDK wrapper
│   ├── coc_deploy.py           # COC deployment module (includes install script)
│   ├── config.py               # Configuration constants
│   ├── utils.py                # Utility functions
│   └── query_regions.py        # Region query helper
└── references/
    ├── acceptance-criteria.md     # Acceptance criteria
    ├── cli-installation-guide.md  # CLI installation guide (KooCLI & dependencies)
    ├── iam-policies.md            # IAM policies
    ├── verification-method.md     # Verification methods
    └── conversation-examples.md   # Natural-language conversation examples

错误处理

已知限制
限制描述解决方案
dsh 仅绑定环回地址按设计,dsh Web 服务拒绝使用 --host 0.0.0.0在本地建立 SSH 隧道:ssh -L 3080:127.0.0.1:3080 root@{ip},然后打开 http://127.0.0.1:3080
状态检查方法--status 检查服务器实例状态;dsh 健康检查需要 SSH 隧道建立隧道后打开 http://127.0.0.1:3080 进行验证,或在服务器上运行 curl http://127.0.0.1:3080
常见错误
错误代码描述解决方案
401 UnauthorizedAK/SK 无效确认 AK/SK 正确且有效
403 Forbidden权限被拒绝添加所需的 IAM 策略
QuotaExceeded资源配额已超限检查 ECS/VPC/EIP 配额
ServerLimitExceeded实例数量已达上限释放未使用的实例
FlavorNotFoundFlavor 不可用尝试其他区域或 Flavor
Timeout创建服务器超时在控制台中检查实际状态
Node.js < 22dsh 需要 Node.js >= 22安装脚本会自动安装 Node 22 LTS

参考资料

Skill 参考文档
外部参考资料

评论

支持 Markdown