fix(update): 检测并修复 CONSOLE_DOMAIN 及 SDK URL 为内网 IP 的情况

- CONSOLE_DOMAIN 为私有 IP 段时提示用户输入正确的公网域名
- SDK_IM_WS_URL / SDK_IM_API_URL / SDK_FILE_SERVICE_URL 包含
  裸 IP(10.x / 172.x / 192.168.x / 127.x)时同样触发修复
- 提取 _url_needs_fix 辅助函数消除重复判断逻辑

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
这个提交包含在:
徐勤民 2026-05-20 18:49:50 +08:00
父节点 28fd8c0793
当前提交 7d8f916ea5
共有 2 个文件被更改,包括 35 次插入5 次删除

查看文件

@ -1 +1 @@
2026.05.20-private.3
2026.05.20-private.4

查看文件

@ -96,6 +96,22 @@ ok "NGINX_BIND=${_NGINX_BIND}"
[ -n "$_CONSOLE_DOMAIN" ] || fail "config/xuqm.env 中 CONSOLE_DOMAIN 未设置,请手动补充后重试"
# CONSOLE_DOMAIN 若为裸 IP内网/公网)则强制要求更新为域名,否则 SDK URL 无法从外部访问
_domain_stripped="$(printf '%s' "$_CONSOLE_DOMAIN" | sed 's|https\?://||' | cut -d: -f1)"
if printf '%s' "$_domain_stripped" | grep -qE \
'^(10\.|172\.(1[6-9]|2[0-9]|3[01])\.|192\.168\.|127\.|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$)'; then
warn "CONSOLE_DOMAIN 当前为 IP 地址(${_CONSOLE_DOMAIN}),客户端浏览器可能无法访问"
printf ' 外部访问域名应为公网域名(如 https://console.example.com\n'
read -rp " 请输入正确的外部访问地址(直接回车保持不变): " _new_domain
if [ -n "$_new_domain" ]; then
_set_env "$ROOT_DIR/config/xuqm.env" "CONSOLE_DOMAIN" "$_new_domain"
_CONSOLE_DOMAIN="$_new_domain"
ok "CONSOLE_DOMAIN 已更新 → ${_CONSOLE_DOMAIN}"
else
warn "保持原值 ${_CONSOLE_DOMAIN},如外部无法访问请手动修改 config/xuqm.env 后重试"
fi
fi
# ---------------------------------------------------------------------------
# 1. 修复配置问题
# ---------------------------------------------------------------------------
@ -114,9 +130,11 @@ _SDK_FILE_URL="${_CONSOLE_DOMAIN}"
_FIXED=0
# 检查 SDK_IM_WS_URL
# 检查 SDK_IM_WS_URLxuqinmin.com 残留 或 内网/裸 IP 均需修复)
_CURRENT_WS="$(grep '^SDK_IM_WS_URL=' "$ROOT_DIR/config/xuqm.env" 2>/dev/null | cut -d= -f2- || echo '')"
if [ -z "$_CURRENT_WS" ] || printf '%s' "$_CURRENT_WS" | grep -qi 'xuqinmin\.com'; then
# ws/wss URL 转为 http/https 格式后复用 _url_needs_fix
_CURRENT_WS_AS_HTTP="$(printf '%s' "$_CURRENT_WS" | sed 's|^wss://|https://|; s|^ws://|http://|')"
if _url_needs_fix "$_CURRENT_WS_AS_HTTP"; then
_set_env "$ROOT_DIR/config/xuqm.env" "SDK_IM_WS_URL" "$_SDK_IM_WS_URL"
ok "SDK_IM_WS_URL 已更新 → ${_SDK_IM_WS_URL}"
_FIXED=1
@ -124,9 +142,21 @@ else
ok "SDK_IM_WS_URL 正常: ${_CURRENT_WS}"
fi
# 辅助函数:检查一个 URL 是否需要修复空、xuqinmin.com 残留、或裸 IP
_url_needs_fix() {
local val="$1"
local host
host="$(printf '%s' "$val" | sed 's|https\?://||' | cut -d/ -f1 | cut -d: -f1)"
[ -z "$val" ] && return 0
printf '%s' "$val" | grep -qi 'xuqinmin\.com' && return 0
printf '%s' "$host" | grep -qE \
'^(10\.|172\.(1[6-9]|2[0-9]|3[01])\.|192\.168\.|127\.|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$)' && return 0
return 1
}
# 检查 SDK_IM_API_URL
_CURRENT_IM_API="$(grep '^SDK_IM_API_URL=' "$ROOT_DIR/config/xuqm.env" 2>/dev/null | cut -d= -f2- || echo '')"
if [ -z "$_CURRENT_IM_API" ] || printf '%s' "$_CURRENT_IM_API" | grep -qi 'xuqinmin\.com'; then
if _url_needs_fix "$_CURRENT_IM_API"; then
_set_env "$ROOT_DIR/config/xuqm.env" "SDK_IM_API_URL" "$_SDK_IM_API_URL"
ok "SDK_IM_API_URL 已更新 → ${_SDK_IM_API_URL}"
_FIXED=1
@ -136,7 +166,7 @@ fi
# 检查 SDK_FILE_SERVICE_URL
_CURRENT_FILE="$(grep '^SDK_FILE_SERVICE_URL=' "$ROOT_DIR/config/xuqm.env" 2>/dev/null | cut -d= -f2- || echo '')"
if [ -z "$_CURRENT_FILE" ] || printf '%s' "$_CURRENT_FILE" | grep -qi 'xuqinmin\.com'; then
if _url_needs_fix "$_CURRENT_FILE"; then
_set_env "$ROOT_DIR/config/xuqm.env" "SDK_FILE_SERVICE_URL" "$_SDK_FILE_URL"
ok "SDK_FILE_SERVICE_URL 已更新 → ${_SDK_FILE_URL}"
_FIXED=1