在华为云 AI 开发者空间用 Nginx 部署静态站点,并用隧道映射到公网

举报
yd_228276774 发表于 2026/10/22 15:58:18 2026/10/22
【摘要】 记录一次在 AI 开发者空间(DevSpace)容器里部署静态页面的完整过程:装 nginx、放站点目录、配置 server 块并 reload,再用隧道把容器端口映射到公网,最后用 curl 校验状态码、页面标题和内容 md5。文末附上四个亲测踩过的坑。

为什么要在 DevSpace 里跑 nginx

AI 开发者空间(DevSpace)本质上是一台带 Web 终端的 Linux 容器,能装包、能起进程、能开端口。 把静态站点放进去,最省事的做法就是 nginx 反向托管一个目录 —— 不写后端、不用构建工具,改完文件 reload 一下就能看到效果。

下面这套流程我在华为云的 DevSpace 里完整跑通过一次,最终得到一个公网可访问的地址,并用状态码、标题、内容 md5 三重校验确认了"页面上线"这件事是真的。

第一步:确认容器环境

uname -a
cat /etc/os-release | head -3
which nginx || echo "nginx 未安装"

容器里通常没有 nginx,先装:

# Debian/Ubuntu 系
sudo apt-get update && sudo apt-get install -y nginx

# 确认版本与默认站点
nginx -v
ls /etc/nginx/conf.d/

装完之后 nginx 一般会自己起在 80 端口。建议先改到自己要用的端口,避免和容器里已有服务冲突。

第二步:准备站点目录

mkdir -p /workspace/site
cat > /workspace/site/index.html <<'EOF'
<!doctype html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8">
  <title>DevSpace 静态站点</title>
</head>
<body>
  <h1>Hello from DevSpace</h1>
</body>
</html>
EOF

关键点:目录要放在容器内持久化的位置(一般是 /workspace),不要放在 /tmp 或家目录下的临时路径,否则容器重建后站点就没了。

第三步:配置 server 块

cat | sudo tee /etc/nginx/conf.d/site.conf <<'EOF'
server {
    listen 8080;
    server_name _;
    root /workspace/site;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }
}
EOF

# 语法检查 + 生效
sudo nginx -t
sudo nginx -s reload

nginx -t 这一步不要省。它能在 reload 之前把语法错误直接指到行号,比 reload 之后发现服务挂了要好得多。

本机验证:

curl -sS -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8080/

返回 200 说明 nginx 这一层已经通了,问题(如果有)就只剩端口对外暴露。

第四步:把容器端口映射到公网

DevSpace 提供了隧道能力,可以把容器里的某个端口映射成一个公网 HTTPS 地址。在控制台里为目标端口创建一条隧道后,会拿到类似 https://xxxx-8080.tunnel.example.com 的地址。

拿到地址之后第一件事是自测,而不是直接发给别人:

URL="https://xxxx-8080.tunnel.example.com"

curl -sS -o /dev/null -w "status=%{http_code} time=%{time_total}s\n" "$URL"
curl -sS "$URL" | grep -o "<title>.*</title>"

第五步:用 md5 证明"看到的就是我放的那份"

状态码 200 只能说明有响应,不能说明内容对。真正可靠的校验是比哈希:

# 本地文件的 md5
md5sum /workspace/site/index.html

# 线上内容的 md5
curl -sS "$URL" | md5sum

两个 md5 一致,才算"部署成功"。这一步在多环境、有 CDN、有缓存的场景里尤其值得做 —— 它能立刻区分"配置错了"和"缓存没刷新"。

四个亲测踩过的坑

  1. 端口选到已被占用的:容器里可能已经有服务监听 80。用 ss -lntp 看一眼,再决定 nginx listen 哪个端口。
  2. 隧道有效期内没人管:隧道是有生命周期的,到期或控制台重启后映射会失效,表现为公网 404 而容器里 curl 127.0.0.1 依然 200。先分层排查,别一上来就怀疑 nginx 配置。
  3. root 指向挂载点之外:root 路径写错一个字符,nginx 返回的是 403 或 404,而不是报错。用 nginx -T 打印最终生效配置核对路径最稳。
  4. 只在浏览器里 Ctrl+F5:浏览器缓存会让"改了没生效"看起来像部署失败。先 curl 拿到原始响应,再谈缓存。

小结

整套下来只有四件事:装 nginx、放文件、配 server 块、映射端口。真正决定成功率的不是命令本身,而是分层验证:先在容器内 curl 本机端口,再 curl 隧道地址,最后比对 md5。每一层都有明确的判断依据,出问题就能立刻定位到是哪一层断的。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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