fix(update): 修复 WebSocket 101 误判 + 清理孤儿容器
- WebSocket 探测:curl 在 101 握手后无法继续 WS 协议会追加 000, 返回值为 "101000",改为 grep '^101' 判断首三位而非精确匹配 - up -d 加 --remove-orphans:自动清理已从 compose 文件移除的容器 (如之前删除的 ops-web),消除每次升级的 WARN 噪音 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
这个提交包含在:
父节点
777eb23b60
当前提交
34bfa71bd5
@ -448,11 +448,11 @@ _COMPOSE="docker compose --env-file ${ROOT_DIR}/.env \
|
|||||||
# 使用 up -d 而非 restart:restart 只重启容器进程,不会切换到新拉取的镜像;
|
# 使用 up -d 而非 restart:restart 只重启容器进程,不会切换到新拉取的镜像;
|
||||||
# up -d 会检测镜像变更并重建容器,是应用新版本的正确方式。
|
# up -d 会检测镜像变更并重建容器,是应用新版本的正确方式。
|
||||||
info "应用新镜像并重启 tenant-service ..."
|
info "应用新镜像并重启 tenant-service ..."
|
||||||
$_COMPOSE up -d --no-deps tenant-service
|
$_COMPOSE up -d --no-deps --remove-orphans tenant-service
|
||||||
ok "tenant-service 已更新"
|
ok "tenant-service 已更新"
|
||||||
|
|
||||||
info "应用新镜像并重启 nginx ..."
|
info "应用新镜像并重启 nginx ..."
|
||||||
$_COMPOSE up -d --no-deps nginx
|
$_COMPOSE up -d --no-deps --remove-orphans nginx
|
||||||
ok "nginx 已更新"
|
ok "nginx 已更新"
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
@ -513,7 +513,13 @@ _ws_probe="$(curl -sk --noproxy '*' --max-time 5 \
|
|||||||
-H "Sec-WebSocket-Version: 13" \
|
-H "Sec-WebSocket-Version: 13" \
|
||||||
"http://127.0.0.1:${_NGINX_PORT}/ws/im" 2>/dev/null || echo 000)"
|
"http://127.0.0.1:${_NGINX_PORT}/ws/im" 2>/dev/null || echo 000)"
|
||||||
|
|
||||||
if [ "$_ws_probe" = "101" ]; then
|
# curl 对 WebSocket 握手的处理:服务端回 101 后 curl 不会说 WS 协议,
|
||||||
|
# 连接立刻断开,-w '%{http_code}' 可能输出 "101" 或 "101000"(101 + 后续 000)。
|
||||||
|
# 只要首三位是 101 即代表握手成功。
|
||||||
|
_ws_ok=0
|
||||||
|
printf '%s' "$_ws_probe" | grep -q '^101' && _ws_ok=1
|
||||||
|
|
||||||
|
if [ "$_ws_ok" -eq 1 ]; then
|
||||||
ok "容器 nginx → im-service WebSocket 握手正常 (HTTP 101)"
|
ok "容器 nginx → im-service WebSocket 握手正常 (HTTP 101)"
|
||||||
# 进一步探测外部域名(需要上层 TLS 代理正确透传 Upgrade 头)
|
# 进一步探测外部域名(需要上层 TLS 代理正确透传 Upgrade 头)
|
||||||
if [ -n "$_CONSOLE_DOMAIN" ]; then
|
if [ -n "$_CONSOLE_DOMAIN" ]; then
|
||||||
@ -525,7 +531,7 @@ if [ "$_ws_probe" = "101" ]; then
|
|||||||
-H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" \
|
-H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" \
|
||||||
-H "Sec-WebSocket-Version: 13" \
|
-H "Sec-WebSocket-Version: 13" \
|
||||||
"${_ext_ws_url}" 2>/dev/null || echo 000)"
|
"${_ext_ws_url}" 2>/dev/null || echo 000)"
|
||||||
if [ "$_ext_code" = "101" ]; then
|
if printf '%s' "$_ext_code" | grep -q '^101'; then
|
||||||
ok "外部域名 WebSocket 握手正常 (HTTP 101) → ${_SDK_IM_WS_URL}"
|
ok "外部域名 WebSocket 握手正常 (HTTP 101) → ${_SDK_IM_WS_URL}"
|
||||||
else
|
else
|
||||||
warn "外部域名 WebSocket 握手失败 (HTTP ${_ext_code}) → ${_SDK_IM_WS_URL}"
|
warn "外部域名 WebSocket 握手失败 (HTTP ${_ext_code}) → ${_SDK_IM_WS_URL}"
|
||||||
|
|||||||
正在加载...
在新工单中引用
屏蔽一个用户