用 HuaweiCloud DevKit 沙箱部署 2048:从节点池告警到公网可玩
背景
前两天在华为云开放能力闯关活动里要做一个 2048 小游戏,并部署到 DevKit 沙箱。整个过程比想象中曲折,把踩到的坑记录下来,给后来的人省点时间。
一、先做一个能跑的单文件 2048
为了部署简单,我没有用任何构建工具,直接写了一个 index.html,CSS 和 JS 全部内联,总共 12.7 KB。核心是一个 4×4 的网格状态数组,方向键/WASD 触发移动,移动时按行或列合并相同数字,再随机补一个新方块。移动端用 touchstart/touchend 计算滑动方向。
这里踩了一个自己挖的坑:方块容器用 inset:10px 定位,而 JS 计算坐标时又额外加了 padding,结果方块整体偏移半格。改成 inset:0 后对齐正常。
二、沙箱部署:卡在节点池
按活动指引用 HuaweiCloud DevKit 的 sandbox_connect 创建 DevStation 沙箱,结果接口持续返回:
HD.99003001: No available node pool
环境一直停在 status=9,终端连接报「Dev environment is not running」。期间试过 close→start 循环、删除环境重建、切换 source(CLI/WEB/VSCODE),都没用。
后来发现同一时间用 DevStation 的 Base 开发环境模板可以正常启动,说明不是账号或配额问题,而是 devkitsandbox 模板对应的节点池没有可调度节点。换模板后环境正常拉起。
三、用 DevBridge 把本地端口暴露到公网
沙箱里起 Nginx 托管 index.html,监听 8080,然后依次执行:
devbridge auth login --api-key $HW_DEVBRIDGE_API_KEY
devbridge create my-tunnel
devbridge host my-tunnel -p 8080
拿到 https://xxx-8080.devbridge-s2.hwtunnel.com 后,浏览器首次访问会有一个安全提示页,点「继续」之后就正常进入游戏了。
四、ECS 持久化
为了长期可访问,又在 cn-north-4 起了一台 s6.medium.2,cloud-init 里装 Nginx 并把页面写到 /usr/share/nginx/html/hc-activity/index.html,安全组只放行 80 和必要的 22。这里也踩了个坑:SSH 一直 kex_exchange_identification 失败,最后干脆把页面内容直接写进 cloud-init,绕过了登录。
小结
几个值得记住的点:
1. 沙箱报「无可用节点」时,先换模板验证是不是平台侧容量问题;
2. DevBridge 的隧道地址是账号维度一次性绑定的,别拿假地址去提交;
3. 单文件页面部署成本最低,Nginx 一把梭就够;
4. 云资源用完记得清理,按量计费不等人。
完整代码就是一个 HTML 文件,感兴趣的同学可以直接拿去做二次开发。
- 点赞
- 收藏
- 关注作者
评论(0)