一次单文件小游戏上云实践:从沙箱预览到 ECS 部署与资源回收
一个网页能在本机打开,并不等于已经完成云端部署。文件是否完整、服务是否监听、地址能否从外部访问,以及临时资源是否真正释放,是几件需要分别验证的 事。本文记录一次把单文件 2048 小游戏部署到华为云沙箱和 ECS 的实践,重点放在验证方法和遇到的问题。
本文由 AI 辅助整理,内容来自本次实际操作和检查结果。游戏初版参考单文件教学示例,本文不重复介绍游戏源码,也不把教程中的预期结果当成本次实测结果。
1. 先把前端产物收敛到一个文件
本次游戏使用 HTML、CSS 和 JavaScript,样式与交互都写在 index.html 中,不加载外部字体、图片和 CDN。这样上传后只需要提供静态 HTTP 服务,减少了部署过程中构建工具、包管理器和外部网络的变量。
单文件也需要做功能检查。此次修正了向右、向下移动时的目标位置计算,以及方块绝对定位和动画缩放之间的冲突。验证覆盖四个方向的合并及得分、新游戏重置,并连续执行 60 次键盘方向操作,检查方块数量不超过 16、位置不重复且不越出棋盘。最高分使用浏览器 localStorage 保存,因此不需要后端数据库。
2. 沙箱部署要区分配置与工具解析
完成账号检查并建立沙箱会话后,将页面上传到工作目录,使用 nginx 静态托管,再通过 DevBridge 隧道获得公网地址。上传结果中的文件字节数和 MD5,可以作为确认传输完整性的依据。
本次遇到一个值得记录的现象:部署工具报告 nginx 配置校验失败,但原始输出出现了成功标记。终端输出前夹带了 OSC 133 控制序列,影响了工具按行提取结果。
处理时没有仅凭标记宣告成功,而是在沙箱中独立执行:
nginx -t
nginx -s reload
curl -fsS http://127.0.0.1:8080/
配置检查通过、本地响应包含游戏页面,再核对公网 HTTP 200 和页面标题,才确认服务可访问。这里得到的经验是:包装工具的失败信息需要结合底层检查判断,但也不能用底层某一行输出代替完整验收。
3. ECS 使用 cloud-init 完成首次启动部署
本次选择北京四区域的 Ubuntu 22.04 镜像和 2 核 1GB 按需规格。具体规格和可用区是查询当时库存后选择的,不应把实例规格名称当作长期可用的常量。
部署时把页面内容编码后嵌入启动脚本,再将脚本整体编码为 user_data。实例首次启动时自动更新软件源、安装 nginx,并把页面写入静态目录下的 hc-activity/index.html。这个流程无需再通过 SSH 上传页面。
本次新建了专用安全组,公网入站仅放通 TCP 80,绑定按流量计费的弹性公网 IP。实例状态变为 ACTIVE 后,最初 HTTP 连接仍被拒绝,随后服务才启动并返回 200。这说明实例启动完成和应用部署完成是不同的时间点,应该分别轮询,避免只看到 ACTIVE 就交付地址。
验收时从服务器和另一台设备访问 /hc-activity/index.html,均确认 HTTP 200、页面字节数及标题与预期一致。此处验证的是静态页面可达;如果应用有后端,还需要增加接口和依赖服务的检查。
4. 提交接口与实际业务结果分别核验
活动提交时遇到缺少项目 ID 请求头的错误。虽然初次提交的是沙箱作品,接口仍要求提供对应项目 ID。补齐项目和区域后,沙箱地址曾暂时被校验为无效;独立确认页面可访问后,稍后再次提交成功。
接口提交成功之后,还在成长中心积分明细中分别确认了沙箱与 ECS 部署记录。这两类证据回答的是不同问题:接口返回说明请求被接受,积分明细说明奖励已记账。对其他异步业务,也应保留这种分层核验习惯。
5. 删除实例后仍要复查关联资源
临时资源按使用目的完成后释放。本次删除 ECS 时指定连带删除系统盘和公网 IP,但第一次复查仍短暂看到了处于 DOWN 状态的 EIP。稍后再次查询,该 EIP 才返回不存在。
最终分别确认了实例删除、系统盘不存在、EIP 不存在、关联带宽不存在,并删除本次专用安全组。清理只针对本次创建并登记的资源,没有以整个账号资源数量为判断依据。
对于短期演示,建议创建前记录资源 ID、限制预算和保留时长,清理后再按 ID 核验。停止应用进程或关闭实例,不应直接当作所有关联资源均已停止收费的证明。本文所用临时 ECS 已释放,原访问地址不再作为长期演示提供。
参考
- 华为云弹性云服务器文档:https://support.huaweicloud.com/ecs/
- nginx 入门指南:https://nginx.org/en/docs/beginners_guide.html
- 点赞
- 收藏
- 关注作者
评论(0)