将单文件 2048 部署到 Nginx,并用 DevBridge 验证公网访问
一个小型前端项目上线时,最容易混淆的是三个地址:本地 HTTP 服务地址、临时公网隧道地址,以及服务器长期使用的公网地址。这次实践用单文件 2048 游戏把三者分别跑通,再检查它们实际返回的内容。
游戏采用纯 HTML、CSS 和 JavaScript,包含方向键、WASD 和触屏滑动操作,支持合并计分、最高分、游戏结束判定和浏览器本地保存,不依赖 npm 或构建工具。服务器使用已有的 Ubuntu Linux 实例,以下路径和端口可按实际环境调整。
先让页面在服务器本地跑起来
把 index.html 放进独立的站点目录,再启动只监听回环地址的 HTTP 服务:
mkdir -p /opt/2048/site
# 将自己的 index.html 放到 /opt/2048/site/
python3 -m http.server 18080 \
--bind 127.0.0.1 \
--directory /opt/2048/site
这个命令在前台运行。换一个终端检查响应:
curl -sI http://127.0.0.1:18080/
curl -fsS http://127.0.0.1:18080/ | head
本地服务返回 HTTP 200 后,还应检查 HTML 标题和页面内容,防止访问到同端口上的其他应用。由于服务只绑定 127.0.0.1,这一步不需要向公网开放 18080 端口。
用 DevBridge 做临时公网验证
DevBridge 可以将本地端口映射到公网。此次使用官方发布的 0.2.2-release Linux amd64 版本,下载后对照同一 release 的 checksums.txt 检查 SHA-256,再解压运行。版本和处理器架构应以目标机器为准。
官方下载地址:DevBridge Releases。
先检查当前二进制的实际参数:
devbridge version
devbridge auth login --help
devbridge host --help
本次使用的发布版支持 auth login --api-key。API Key 从华为云 DevBridge 密钥管理页面创建,完整值只展示一次,应保存在受限文件中,不能放进站点目录、文章、截图或代码仓库。
在 Bash 中,可以通过隐藏输入完成首次登录:
read -rsp 'DevBridge API Key: ' DB_KEY
printf '\n'
devbridge auth login --api-key "$DB_KEY"
unset DB_KEY
devbridge auth status
命令行参数可能被同机有权限的用户查看,应在可信机器上操作。AK/SK 与 DevBridge API Key 的用途不同,不要混用。
让前面的 HTTP 服务保持运行,然后启动隧道:
devbridge host -p 18080 -e 8 -d Game2048
-e 8 表示隧道有效期为 8 小时。命令输出公网地址后,从另一台机器检查:
curl -sI 'https://<隧道标识>-18080.devbridge-s2.hwtunnel.com/'
再用浏览器打开地址,操作游戏,确认移动、合并和计分正常。浏览器首次访问可能出现开发者隧道提示;只有确认链接属于自己部署的服务后再继续。HTTP 检查与浏览器检查都需要做,单看状态码不能证明打开的就是目标页面。
用 Nginx 提供长期访问地址
临时隧道适合预览和验证,长期访问可交给服务器已有的 Nginx。若 80 端口已经有其他业务,不要覆盖整个配置,也不要另外增加一个冲突的默认站点。此次只在负责该公网地址的 HTTP server 块里加入一个精确匹配的路径:
location = /hc-activity/index.html {
alias /opt/2048/site/index.html;
default_type text/html;
add_header X-Content-Type-Options nosniff;
}
修改前备份原配置,确认 Nginx 工作进程能读取页面文件及其上级目录。随后检查语法并重新加载:
sudo nginx -t
sudo nginx -s reload
验证本地和公网地址:
curl -sI http://127.0.0.1/hc-activity/index.html
curl -sI http://<服务器公网IP>/hc-activity/index.html
公网访问还取决于安全组、防火墙和 Nginx 的监听配置。排查时可以依次看本地服务、Nginx 本地响应、服务器公网响应,避免一上来就修改安全组。本次复用了已经开放的 HTTP 服务,没有新增端口规则。
此次测试中,Nginx 重新加载后的第一个请求仍遇到了旧响应,再次请求才获得新页面。因此修改配置后应重新建立连接验证,并检查响应内容,不能只凭 reload 命令退出成功就判断部署完成。
把游戏逻辑和部署检查分开
页面能打开之后,还需要检查游戏本身。比如一行 [2,2,2,2] 向左移动应得到 [4,4,0,0],本步得分增加 8;[2,2,4,0] 应得到 [4,4,0,0],不能在同一步继续合成 8。填满且相邻数字都不相同的棋盘,应触发游戏结束。
这次把合并算法检查与浏览器操作检查分开进行:前者验证一次合并、计分和结束判定,后者验证真实页面能响应按键。浏览器刷新后,也要检查保存的进度能否恢复。
最终保留的长期入口是 Nginx 的 /hc-activity/index.html。临时 HTTP 服务和 DevBridge 隧道需要进程持续运行,不会因为写了过期时长就自动变成常驻服务;若需要跨重启运行,应再配置 systemd 等进程管理。后续移除应用时,可删除本次新增的精确路由和站点文件,并重新验证原有业务。
- 点赞
- 收藏
- 关注作者
评论(0)