fix: WSL兼容+verify加载secrets+deploy非交互模式

这个提交包含在:
xuqinmin12 2026-06-12 18:34:47 +08:00
父节点 1c8988f973
当前提交 f1de6167d3

查看文件

@ -108,7 +108,26 @@ printf '\033[1;33m━━━━━━━━━━━━━━━━━━━━
printf ' 1) 新建租户 — 填写租户信息,系统将为您创建全新账号\n' printf ' 1) 新建租户 — 填写租户信息,系统将为您创建全新账号\n'
printf ' 2) 迁移租户 — 从公有平台导入现有租户数据(需迁移密钥)\n\n' printf ' 2) 迁移租户 — 从公有平台导入现有租户数据(需迁移密钥)\n\n'
# 非交互模式CI/自动化部署):通过环境变量提供所有参数
# XUQM_NONINTERACTIVE=1 启用非交互模式
# XUQM_DEPLOY_MODE new | migrate
# XUQM_TENANT_EMAIL 租户邮箱
# XUQM_TENANT_USERNAME 用户名
# XUQM_TENANT_NICKNAME 昵称(可选,默认同用户名)
# XUQM_TENANT_PASSWORD 登录密码
# XUQM_EXTERNAL_URL 外部访问地址(如 https://win.xuqinmin.com
# XUQM_NGINX_MODE 1=直接80 / 2=本地11223默认1
# XUQM_MIGRATE_KEY 迁移密钥migrate 模式需要)
_NONINTERACTIVE="${XUQM_NONINTERACTIVE:-0}"
DEPLOY_MODE="" DEPLOY_MODE=""
if [ "$_NONINTERACTIVE" = "1" ] && [ -n "${XUQM_DEPLOY_MODE:-}" ]; then
case "${XUQM_DEPLOY_MODE}" in
new|migrate) DEPLOY_MODE="${XUQM_DEPLOY_MODE}" ;;
*) fail "XUQM_DEPLOY_MODE 必须为 new 或 migrate" ;;
esac
printf ' [非交互] 部署模式: %s\n' "$DEPLOY_MODE"
else
while [ -z "$DEPLOY_MODE" ]; do while [ -z "$DEPLOY_MODE" ]; do
read -rp " 请选择 [1/2]: " _choice read -rp " 请选择 [1/2]: " _choice
case "$_choice" in case "$_choice" in
@ -117,6 +136,7 @@ while [ -z "$DEPLOY_MODE" ]; do
*) printf ' 请输入 1 或 2\n' ;; *) printf ' 请输入 1 或 2\n' ;;
esac esac
done done
fi
DEPLOY_TENANT_EMAIL="" DEPLOY_TENANT_EMAIL=""
DEPLOY_TENANT_USERNAME="" DEPLOY_TENANT_USERNAME=""
@ -124,6 +144,16 @@ DEPLOY_TENANT_NICKNAME=""
_BOOTSTRAP_PASSWORD="" _BOOTSTRAP_PASSWORD=""
if [ "$DEPLOY_MODE" = "new" ]; then if [ "$DEPLOY_MODE" = "new" ]; then
if [ "$_NONINTERACTIVE" = "1" ] && [ -n "${XUQM_TENANT_EMAIL:-}" ]; then
DEPLOY_TENANT_EMAIL="${XUQM_TENANT_EMAIL}"
DEPLOY_TENANT_USERNAME="${XUQM_TENANT_USERNAME:-admin}"
DEPLOY_TENANT_NICKNAME="${XUQM_TENANT_NICKNAME:-$DEPLOY_TENANT_USERNAME}"
_BOOTSTRAP_PASSWORD="${XUQM_TENANT_PASSWORD:-}"
[ -n "$_BOOTSTRAP_PASSWORD" ] || fail "非交互模式必须设置 XUQM_TENANT_PASSWORD"
[ "${#_BOOTSTRAP_PASSWORD}" -ge 8 ] || fail "XUQM_TENANT_PASSWORD 不能少于 8 位"
printf ' [非交互] 租户: %s / %s\n' "$DEPLOY_TENANT_EMAIL" "$DEPLOY_TENANT_USERNAME"
ok "租户信息已收集(非交互模式)"
else
printf '\n ── 新建租户信息 ──\n' printf '\n ── 新建租户信息 ──\n'
while [ -z "$DEPLOY_TENANT_EMAIL" ]; do while [ -z "$DEPLOY_TENANT_EMAIL" ]; do
@ -154,6 +184,7 @@ if [ "$DEPLOY_MODE" = "new" ]; then
_BOOTSTRAP_PASSWORD="$_pw" _BOOTSTRAP_PASSWORD="$_pw"
unset _pw unset _pw
ok "租户信息已收集" ok "租户信息已收集"
fi
else else
# ── 迁移模式:先收集 SRC 配置 + 认证,再继续后续步骤 ── # ── 迁移模式:先收集 SRC 配置 + 认证,再继续后续步骤 ──
@ -189,6 +220,10 @@ printf ' 填写您的 nginx 对外暴露的地址,SDK 客户端将使用此
printf ' 例http://192.168.1.100 或 https://xuqm.example.com\n\n' printf ' 例http://192.168.1.100 或 https://xuqm.example.com\n\n'
_EXT_BASE="" _EXT_BASE=""
if [ "$_NONINTERACTIVE" = "1" ] && [ -n "${XUQM_EXTERNAL_URL:-}" ]; then
_EXT_BASE="${XUQM_EXTERNAL_URL}"
printf ' [非交互] 外部地址: %s\n' "$_EXT_BASE"
else
while [ -z "$_EXT_BASE" ]; do while [ -z "$_EXT_BASE" ]; do
read -rp " 外部访问地址: " _EXT_BASE read -rp " 外部访问地址: " _EXT_BASE
if ! printf '%s' "$_EXT_BASE" | grep -qE '^https?://'; then if ! printf '%s' "$_EXT_BASE" | grep -qE '^https?://'; then
@ -196,6 +231,7 @@ while [ -z "$_EXT_BASE" ]; do
_EXT_BASE="" _EXT_BASE=""
fi fi
done done
fi
CONSOLE_BASE="${_EXT_BASE%/}" CONSOLE_BASE="${_EXT_BASE%/}"
if printf '%s' "$CONSOLE_BASE" | grep -q '^https://'; then if printf '%s' "$CONSOLE_BASE" | grep -q '^https://'; then
_WS_SCHEME="wss" _WS_SCHEME="wss"
@ -216,6 +252,13 @@ printf ' (适合:云服务器域名 HTTPS 场景,宿主机 nginx 处
_NGINX_MODE="" _NGINX_MODE=""
NGINX_BIND="80" NGINX_BIND="80"
if [ "$_NONINTERACTIVE" = "1" ]; then
case "${XUQM_NGINX_MODE:-1}" in
2) _NGINX_MODE="proxy"; NGINX_BIND="127.0.0.1:11223" ;;
*) _NGINX_MODE="direct"; NGINX_BIND="80" ;;
esac
printf ' [非交互] nginx 模式: %s (%s)\n' "$_NGINX_MODE" "$NGINX_BIND"
else
while [ -z "$_NGINX_MODE" ]; do while [ -z "$_NGINX_MODE" ]; do
read -rp " 请选择 [1/2]: " _choice read -rp " 请选择 [1/2]: " _choice
case "$_choice" in case "$_choice" in
@ -224,6 +267,7 @@ while [ -z "$_NGINX_MODE" ]; do
*) printf ' 请输入 1 或 2\n' ;; *) printf ' 请输入 1 或 2\n' ;;
esac esac
done done
fi
ok "nginx 入口: ${NGINX_BIND}:80" ok "nginx 入口: ${NGINX_BIND}:80"
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------