从沙箱到云服务器:AI Agent 部署 2048 游戏全流程实战

举报
yd_228007084 发表于 2026/10/26 03:01:02 2026/10/26
【摘要】 记录一次用 AI Agent 在云端沙箱与云服务器(ECS)双环境部署 2048 游戏的完整过程,涵盖环境准备、Nginx 静态托管、cloud-init 自动化部署,以及端口冲突、路径规范等实战踩坑经验。

从沙箱到云服务器:AI Agent 部署 2048 游戏全流程实战

记录一次用 AI Agent 在云端沙箱与云服务器(ECS)双环境部署 2048 游戏的完整过程,涵盖环境准备、Nginx 静态托管、cloud-init 自动化部署,以及端口冲突、路径规范等实战踩坑经验。

前言

最近参加了一个"开放能力线上闯关挑战",任务是用 AI Agent 把一个自制的 2048 网页游戏,从零部署到云端沙箱和云服务器两个环境,并拿到可公开访问的地址。整个过程跑下来,踩了不少坑,也积累了一些可复用的经验,特此整理成文。

本文不会贴出大段源码,重点讲思路、流程和踩坑,希望能给有类似部署需求的朋友一些参考。

一、环境准备

1.1 安装云端命令行工具

部署的第一步是让 Agent 具备操作云资源的能力。通过一条命令即可安装云端命令行工具(CLI):

npx --yes <cloud-toolkit> install-cli

安装完成后需要接受隐私协议,并验证版本:

<cli> version

1.2 配置访问密钥

云资源的操作需要访问密钥(AK/SK)认证。这里有个安全小建议:不要在命令行里明文输入 SK,推荐通过 Agent 的凭证管理能力写入,避免密钥残留在 shell 历史中。

配置完成后,可以检查当前凭证属于主账号还是子账号:

isPrimaryAccount: true   # 主账号

提示:这类活动的积分发放通常要求主账号,子账号(IAM 用户)可能无法正常领取,务必先确认账号类型。

二、沙箱一键部署

沙箱环境的最大好处是免费、免运维、秒级可预览,非常适合快速验证作品。

2.1 连接沙箱并上传项目

# 连接沙箱(复用已有实例)
sandbox_connect
​
# 上传项目到沙箱工作区
sandbox_upload_project --local-dir ./game2048 --remote-dir /workspace

2.2 Nginx 静态托管

对于纯静态的 HTML 页面,用 Nginx 直接托管即可:

nginx_type: static
port: 8080
project: game2048
output_dir: .

2.3 暴露公网隧道

沙箱本身不对外,需要通过隧道暴露端口,拿到形如 https://xxxx-8080.sandbox-tunnel.example.com 的公网地址:

expose_tunnel --port 8080
# 返回:publicUrl=https://wxhat***-8090.sandbox-tunnel.example.com

2.4 部署完整性校验

部署完一定要做一次完整性检查,确认 Nginx 服务、输出目录、隧道可达性都正常:

score: pass 4 / total 4
✅ nginx_serving       PASS
✅ output_dir           PASS
✅ tunnel_check         PASS
✅ tunnel_url_accessible PASS

沙箱部署完成,公网地址已可访问。

三、ECS 持久化部署

沙箱虽好,但它是临时的。要想长期稳定对外访问,需要部署到云服务器(ECS)上。

3.1 创建 ECS 实例

选型建议:

项目 选择 说明
区域 cn-north-4 华北区
规格 s6.small.1(1核1G) 静态站点足够用
镜像 EulerOS 3.0 64bit yum 系,方便装 Nginx
系统盘 GPSSD 40G 优先 GPSSD,SATA 常售罄
带宽 5M 按带宽计费 动态分配 EIP

创建时通过 --delete_publicip=true --delete_volume=true,确保删除实例时一并释放 EIP 和数据盘,避免残留资源持续计费。

3.2 用 cloud-init 自动化部署

这是本次最关键的技巧:不要在创建后手动 SSH 上去配置,直接用 cloud-init(user_data)在实例启动时一次性完成。

把部署脚本 base64 编码后作为 user_data 传入,脚本内容包括:安装 Nginx、写入 HTML 文件、启动服务。

#!/bin/bash
yum install -y nginx
echo '<base64编码的HTML>' | base64 -d > /usr/share/nginx/html/hc-activity/index.html
systemctl enable nginx
systemctl restart nginx

3.3 验证公网访问

实例 ACTIVE 后,直接 curl 验证:

curl -sI http://<ECS_EIP>/hc-activity/index.html
# HTTP/1.1 200 OK
# Server: nginx/1.24.0

看到 200 就说明部署成功了。

四、踩坑与解决(重点)

坑 1:端口被占用导致 Nginx 部署校验失败

部署 Nginx 时提示"配置写入校验失败",但日志里 nginx -t 却显示 PASS,非常矛盾。

排查过程:直接用沙箱命令查看端口占用:

ss -tlnp | grep -E '8080|8081|8090'

发现 8080 端口已被占用,Nginx 自动改到了 8081,导致配置校验逻辑对不上。

解决:换用一个空闲端口(如 8090)重新部署,并给配置单独命名。遇到端口冲突,换端口比杀进程更稳妥。

坑 2:提交地址路径不合规

提交作品时,ECS 地址填 http://<IP>/hc-activity/ 一直提示"接口地址格式不合法"。

根因:活动要求 ECS 公网地址必须精确到文件,即:

http://<ECS_EIP>/hc-activity/index.html   ✅ 正确
http://<ECS_EIP>/hc-activity/             ❌ 错误

解决:在 cloud-init 里把文件写到 /usr/share/nginx/html/hc-activity/index.html,提交时带上完整的 index.html 路径。部署前先读官方教程里的地址规范,能少走很多弯路。

坑 3:SSH 认证失败

尝试 SSH 到 ECS 手动改配置时,密码认证失败。后来干脆放弃 SSH,改用 cloud-init 重建实例,一步到位。这也印证了:能用云初始化脚本解决的,就别手动登机器。

五、成果展示

最终交付了两个可公开访问的地址:

环境 地址形式 特点
云端沙箱 https://xxx.sandbox-tunnel.example.com 免费、秒级预览、临时
云服务器 ECS http://<EIP>/hc-activity/index.html 持久化、独立公网 IP

作品是一个单文件 2048 游戏:纯 HTML/CSS/JS 实现,零依赖、零构建。支持方向键、WASD 和触屏滑动三种操作方式,最高分用 localStorage 持久化。

六、资源清理

部署完别忘了清理按量付费资源,否则会持续产生费用:

  • 删除 ECS 实例时,务必带上 --delete_publicip=true --delete_volume=true,一并释放 EIP 和数据盘

  • 清理后确认实例数为 0:<cli> ECS ListServersDetails

  • 只清理本次活动新建的资源,不要动其他既有资源

七、总结

这次实战跑下来,几条核心经验:

  1. 优先用 cloud-init:创建实例时一次性完成环境配置,比手动 SSH 更可靠、可复现

  2. 地址格式要精确:提交前读清规范,路径精确到文件级别

  3. 端口冲突换端口:比排查占用进程更省时间

  4. 用部署校验兜底:deploy_check 能提前发现问题

  5. 及时清理资源:按量付费资源用完即删,避免隐性扣费

从沙箱的"秒级预览"到云服务器的"持久化上线",一套流程走下来,对云端的静态部署有了更立体的理解。希望这篇踩坑记录能帮到同样在做部署实践的你。


标签:AI Agent、云服务器、Nginx、部署实践、2048

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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