从 2048 小游戏到 3000 成长积分:HuaweiCloud DevKit + AI Agent 云端部署实战全记录

举报
yd_282165993 发表于 2026/10/21 23:42:33 2026/10/21
【摘要】 从 2048 小游戏到 3000 成长积分:HuaweiCloud DevKit + AI Agent 云端部署实战全记录一场"零命令记忆"的闯关之旅:我用 AI Agent + HuaweiCloud DevKit 插件,把一个纯单文件 HTML 的 2048 小游戏,从本地一行行代码,一路送上华为云沙箱预览、ECS 持久化部署,最后还顺手给官方技能仓库提了一个真实 Bug 的 Issue...

从 2048 小游戏到 3000 成长积分:HuaweiCloud DevKit + AI Agent 云端部署实战全记录

一场"零命令记忆"的闯关之旅:我用 AI Agent + HuaweiCloud DevKit 插件,把一个纯单文件 HTML 的 2048 小游戏,从本地一行行代码,一路送上华为云沙箱预览、ECS 持久化部署,最后还顺手给官方技能仓库提了一个真实 Bug 的 Issue。全程 2 小时,收获 3000 成长积分。本文完整复盘这条链路上的每一步,包括 5 个真实踩坑与解法。
一、背景:为什么选这条链路
传统的"写个网页部署上线"流程,要面对的是:买服务器、配安全组、装 Nginx、传文件、绑公网 IP……对新手并不友好。而华为云的 DevKit 插件把这条链路压缩成了几条 npx 命令 + AI Agent 自动化调用。
本次实战的目标链路:

本地开发 2048 单文件 HTML
    ↓ sandbox_upload_file(一次调用上传)
华为云沙箱(nginx 托管 + DevBridge 隧道)
    ↓ 闯关 beginner:提交沙箱链接(+1000 积分)
ECS 按量付费实例(cloud-init 一步到位)
    ↓ 闯关 intermediate:提交公网地址(+2000 积分)
GitCode Star + Issue 反馈(+110 积分)

二、环境准备:DevKit 五步安装
DevKit 的安装文档在 github.com/huaweicloud/huaweicloud-devkit,核心是五条命令:

# 1. 确认 Node.js ≥ 22
node --version   # v22.11.0 ✓

# 2. 安装 KooCLI
npx --yes huaweicloud-devkit install-hcloud

# 3. 配置 AK/SK(自动同步到 KooCLI、OBS 与沙箱)
npx --yes huaweicloud-devkit auth init

# 4. 安装插件(以 CodeArts 为例)
npx --yes huaweicloud-devkit install --target codearts

# 5. 自检
npx --yes huaweicloud-devkit doctor

踩坑 1:node:sqlite 不存在
步骤 2 执行 npx huaweicloud-devkit 时直接报错 No such built-in module: node:sqlite。原因是 Node 22.11.0 中 node:sqlite 还是实验性模块,需要显式开启:

export NODE_OPTIONS="--experimental-sqlite"

加上这个环境变量后一切正常。如果你的 Node 是 22.5+ 但低于 23,大概率会遇到同样的问题。
踩坑 2:安装完必须重启 Agent 会话
这是最容易被忽略的一步:install --target codearts 安装了 40 个 huaweicloud_* MCP 工具和 29 个 Skills,但它们只在重启 AI Agent 会话后才生效。安装完直接调用工具会全部失败。重启后用 huaweicloud_auth_status 验证,看到 credentialsConfigured: true 才算就绪。
三、2048 单文件游戏:架构要点
游戏本体没什么特别,但"纯单文件、零构建"的约束值得展开:
一个 index.html 装下全部:CSS 内联在 <style>,JS 内联在 <script>,不依赖 npm/Vite/任何构建工具,总共 11.7KB;
布局:CSS Grid 构建 4×4 棋盘(grid-template-columns: repeat(4, 1fr) + aspect-ratio: 1/1),天然响应式;
动画:方块移动用 transform: translate() 过渡(性能远优于 top/left),生成/合并用 @keyframes pop 弹性缩放;
双端输入:PC 端 keydown 监听方向键与 WASD;移动端 touchstart/touchmove/touchend 三事件判定滑动方向,阈值 24px 防误触;
字号自适应:clamp() + 按位数动态计算 fontSize,保证 4 位数"2048"不溢出格子;
持久化:最高分写 localStorage。
核心算法是最经典的"滑动合并":按方向遍历、滑动到边界或碰撞点、等值合并翻倍、每回合每方块只合并一次;死局检测 = 无空格 && 横纵相邻无等值对。
四、沙箱部署:三条 MCP 调用搞定公网预览
这一步最能体现 DevKit 的价值——全程没有手写一条服务器命令:
huaweicloud_sandbox_connect —— 沙箱实例就绪(aarch64 + EulerOS + nginx 1.21.5 + devbridge 0.2.2 镜像自带);
huaweicloud_sandbox_upload_file —— 一次调用把 index.html 传入 /workspace/game-2048/(base64 分块 + MD5 校验);
huaweicloud_sandbox_deploy_nginx + huaweicloud_sandbox_expose_tunnel —— nginx 配置下发 + 隧道暴露,拿到公网 URL。
最后一步验证是硬性要求:

curl -sI https://<tunnel-id>-8080.devbridge-s2.hwtunnel.com
# HTTP/1.1 200 OK ✓

踩坑 3:隧道认证 NO_CREDENTIAL
第一次 expose_tunnel 返回 NO_CREDENTIAL。解法是先调 huaweicloud_sandbox_credentials 注入临时 AK/SK(工具会先过 IAM 校验),再重试隧道暴露,认证模式自动走 API_KEY_KEYRING。
踩坑 4:上传的文件 403
往沙箱传了二维码 PNG 后公网访问 403。排查发现 sandbox_upload_file 落盘的权限是 640,nginx worker 读不了:

chmod 644 /workspace/game-2048/qr.png   # 沙箱内一条命令解决

教训:沙箱上传的静态资源,记得检查权限,尤其非 index.html 的附加文件。
五、ECS 持久化部署:cloud-init 一次到位
沙箱是临时环境,闯关第二关要求 ECS 持久化部署。查了 cn-north-4 无存量实例后,按量付费新建:
资源 选型 说明
规格 s6.medium.2(1核2G) 先 ListFlavors --flavor_id 确认 4a/4b/4g 可售
镜像 HCE 2.0(x86) dnf/yum 系,cloud-init 友好
系统盘 SAS 40GB 查 CinderListVolumeTypes,SAS 在售(SATA 常售罄)
网络 新建 VPC/子网 DNS 100.125.1.250,100.125.129.250
安全组 SSH 22 仅本机 IP / HTTP 80 全网 最小化放通原则
EIP 5_bgp 按流量 5Mbit 创建时随实例绑定,delete_on_termination=true
关键技巧:cloud-init 一次注入全部初始化逻辑。 把 root 密码设置、nginx 安装、index.html 写入、服务启动全部写进 user_data(base64 编码,≤32KB):

#!/bin/bash
echo "root:<RANDOM_PWD>" | chpasswd
(yum install -y nginx || dnf install -y nginx) > /var/log/hc-init.log 2>&1
mkdir -p /usr/share/nginx/html/hc-activity
# index.html 通过 heredoc 写入
systemctl enable nginx && systemctl start nginx

这样 ECS 从 BUILD → ACTIVE 后无需 SSH 登录,轮询 curl -sI http://<EIP>/hc-activity/index.html 直到返回 200 即完成(实测约 70 秒)。
踩坑 5:heredoc 的 1 字节差异
cloud-init 里用 heredoc 写 index.html,文件尾部多了个换行(11747 vs 11746 字节),MD5 不一致。功能无影响,但如果有严格校验的场景,注意 heredoc 会保留结尾换行。
六、闯关提交:一个真实的官方 Bug
用 huawei-cloud-activity-submit 技能提交沙箱链接时遇到了本次最有价值的坑:

提交失败(HTTP 400):{"code":"PROJECT_ID_MISSING","message":"缺少请求头 X-HW-Project-ID"}

明明设置了 HW_PROJECT_ID 环境变量还是失败。翻 submit.mjs 源码发现:X-HW-Project-ID 请求头只在 intermediate(ECS 步骤)分支附加,但服务端对 beginner(沙箱步骤)同样要求这个头——脚本与服务端的契约不一致。
修复很简单(把条件判断去掉,无条件附加请求头),本地验证后 beginner 提交立即成功,+1000 积分到手。随后 intermediate 提交 +2000 积分,allCompleted=true 闯关全部完成。
这个 Bug 已经提交到官方技能仓库:
Issue #13: https://gitcode.com/huaweicloud/huaweicloud-skills/issues/13
从"踩坑 → 定位 → 修复 → 验证 → 反馈社区"形成完整闭环,这可能比闯关本身更有价值。
七、成本与清理
按量付费资源用完必须清理,否则持续计费:

# 删除 ECS(连带系统盘与 EIP)
hcloud ECS DeleteServers --servers.1.id=<id> --delete_publicip=true --delete_volume=true
# 依次删除子网、安全组、VPC

本次 ECS 实际运行约 1 小时,总花费不足 0.1 元(实例 ~0.06 元/小时 + EIP ~0.02 元/小时),沙箱为免费资源。清理后用 ListServersDetails / ListVpcs / ListPublicips 三查确认归零。
八、总结
阶段 工具链 成果
环境准备 DevKit 5 步安装 40 个 MCP 工具 + 29 个 Skills
游戏开发 单文件 HTML 11.7KB 零依赖 2048
沙箱部署 upload_file / deploy_nginx / expose_tunnel 公网预览 URL + 1000 积分
ECS 部署 CreateServers + cloud-init 持久化公网站点 + 2000 积分
社区反馈 GitCode Issue 官方仓库 Bug #13 + 110 积分
三点体会:
AI Agent 时代的服务器操作门槛在坍塌——本次全程没有手写 nginx 配置文件、没有手动 scp、没有背 API 参数,MCP 工具的语义化调用覆盖了 90% 的运维动作;
cloud-init 是按量付费场景的最佳实践——"创建即完成部署"意味着你可以用最小成本窗口做完所有验证然后立刻销毁;
踩坑即贡献——官方技能的 Bug 被你的实战暴露出来,反手一个高质量 Issue(带复现步骤和修复建议),社区、平台、个人三方受益。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。