用 DevBridge 隧道把开发者空间沙箱里的服务暴露到公网:步骤与踩坑
前几天在华为云开发者空间的云开发环境(devkitsandbox 镜像)里跑了一个静态小页面,需要让外网直接访问。沙箱本身没有公网 IP,这时候用镜像自带的 DevBridge 隧道最省事:几条命令就能拿到一个 https://xxx-端口.devbridge-s2.hwtunnel.com 形式的 HTTPS 地址。下面把完整流程和实际踩到的几个坑记下来。
一、先在沙箱里把服务跑起来
隧道只是转发,前提是沙箱内部端口真的有服务在监听。静态页面最简单的做法是 Python 内置服务器:
mkdir -p /workspace/site
cp index.html /workspace/site/
cd /workspace/site
nohup python3 -m http.server 8080 --bind 0.0.0.0 > /tmp/http.log 2>&1 &
curl -sI http://127.0.0.1:8080/ | head -1 # 期望 HTTP/1.0 200 OK
建议用 8080 这类非特权端口,避免和镜像里可能已占用的 80 端口冲突。一定要先在沙箱内用 curl 确认 200,再去建隧道,否则后面拿到的公网地址只会返回 502,很难判断是隧道问题还是服务问题。
二、登录 DevBridge
在 DevBridge 控制台创建一个 API Key(以 devbridge_ 开头),然后在沙箱终端里登录:
devbridge auth login --api-key devbridge_xxxxxxxx
API Key 相当于账号凭据,不要写进仓库或截图里;用完可以在控制台删除。
三、创建隧道、端口并挂载
# 1. 创建隧道,记下返回的 tunnelId
devbridge create my-site
# 2. 为隧道声明端口(-a 用于对外公开访问)
devbridge port create <tunnelId> -p 8080 --protocol http -a
# 3. 把本机端口挂到隧道上(前台运行)
devbridge host <tunnelId> -p 8080
第 3 步的输出里会出现一行 TUNNEL_URL:https://<tunnelId>-8080.devbridge-s2.hwtunnel.com,这就是对外地址。注意域名里带端口号,换端口地址就会变。
四、外网验证
curl -sI https://<tunnelId>-8080.devbridge-s2.hwtunnel.com/ | head -1
在自己电脑上(不是沙箱里)执行,返回 200 才算真正打通。如果外网访问被要求登录,检查第 3 步建端口时是否带了 -a。
五、踩过的坑
- host 进程要常驻。
devbridge host是前台进程,终端一断隧道就断。可以nohup devbridge host <tunnelId> -p 8080 > /tmp/tunnel.log 2>&1 &放后台,再用grep TUNNEL_URL /tmp/tunnel.log取地址。 - 隧道有有效期。默认有效期较短,需要长期展示的话要在控制台或命令里延长,否则过几天地址就失效了。
- 沙箱回收后优先复用原隧道。tunnelId 是账号维度的资源,不跟着容器走。重新进环境后先重新起服务、再执行一次
devbridge host <原tunnelId>,理论上地址不变,不必重新 create(这一点我还没遇到回收,未实测,仅供参考)。 - 环境规格选小一点。创建云开发环境时 4C8G 及以上规格高峰期经常提示无可用资源,2C4G 基本秒开,跑静态页面完全够用。
- "环境就绪"不等于能连上。控制台显示就绪后,偶尔会遇到 Web IDE 打不开的情况,可以改用本地 VS Code 远程连接或 hdspace CLI 建 SSH 隧道进终端。
六、小结
整个流程就是:沙箱内起服务并 curl 自检 → API Key 登录 → create / port create -a / host 三步 → 外网 curl 验证。相比自己买公网 IP 或配置反向代理,DevBridge 适合临时演示、联调回调地址这类场景;需要长期稳定对外的服务,还是建议部署到云服务器上,用安全组和 systemd 管理。
- 点赞
- 收藏
- 关注作者
评论(0)