把 DevBridge 隧道挂成常驻服务:2048 小站的可用性运维记录云计算云计算云计算
【摘要】 DevBridge 隧道的可用性运维:有效期参数、systemd 常驻、无 systemd 时的守护脚本,以及 404/502 三种返回码的排查顺序。
问题
用 DevBridge 把本地 8080 端口暴露成 https 域名后,最容易出问题的不是怎么建隧道,而是它能不能一直活着。进程一断,域名就 502;隧道一过期,域名直接作废。作品链接一旦失效,后续任何校验都会失败。
建隧道时就把有效期拉长
devbridge create 2048hw -d "华为云闯关2048" -e 720
devbridge port create <tunnel-id> -p 18080 --protocol http -a
devbridge host <tunnel-id> -p 18080
-e 720 是 720 小时(30 天)有效期,默认很短。端口那步的 -a 是允许匿名访问,漏了会变成网关中转页。
进程保活:systemd 方案
cat >/etc/systemd/system/devbridge-host.service <<'UNIT'
[Unit]
Description=DevBridge host (2048)
After=network-online.target
[Service]
ExecStart=/root/.huawei/bin/devbridge host <tunnel-id> -p 18080
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
UNIT
systemctl daemon-reload && systemctl enable --now devbridge-host
隧道客户端自带 Auto reconnect,进程活着就会自己重连;systemd 只负责把进程拉起来。两者配合基本不用管。
没有 systemd 时的兜底脚本
容器环境里常常没有 systemd,用一段死循环守护也能顶住:
while true; do
pgrep -f "devbridge host" >/dev/null || \
setsid nohup devbridge host <tunnel-id> -p 18080 >>/tmp/dbhost.log 2>&1 &
pgrep -f "http.server 18080" >/dev/null || \
setsid nohup python3 -m http.server 18080 --bind 127.0.0.1 >>/tmp/srv.log 2>&1 &
sleep 60
done
关键点是 setsid nohup:让子进程脱离当前会话,否则守护脚本退出时会把服务一起带走。
怎么确认真的活着
curl -s -o /dev/null -w '%{http_code}\n' https://<id>-<port>.devbridge-s2.hwtunnel.com/
curl -s https://<id>-<port>.devbridge-s2.hwtunnel.com/ | grep -o '<title>[^<]*'
只看状态码不够,建议同时抓标题,确认拿到的不是中转页或错误页。
常见返回码
404 tunnel not found:端口没开匿名访问,重跑port create ... -a;502:host 进程没连上,或者本地服务挂了,先curl 127.0.0.1:18080;200但内容不对:本地服务起来了但根目录不对,检查http.server --directory。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)