2026-06-16 20:46:59 +08:00
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
# 在 100 服务器上重启 memind_adm(vite preview + API 反代)
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
|
|
|
|
|
ROOT="${ADM_ROOT:-/Users/john/Project/memind_adm}"
|
|
|
|
|
|
PORT="${ADM_PORT:-5174}"
|
2026-06-17 16:38:58 -07:00
|
|
|
|
NODE_PATH="${LAN_NODE_PATH:-/opt/homebrew/opt/node@24/bin:/opt/homebrew/opt/node@22/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin}"
|
|
|
|
|
|
API_PORT="${ADM_API_PORT:-8085}"
|
2026-06-16 20:46:59 +08:00
|
|
|
|
LOG="${ROOT}/adm-preview.log"
|
2026-06-17 16:38:58 -07:00
|
|
|
|
API_LOG="${ROOT}/adm-api.log"
|
2026-06-16 20:46:59 +08:00
|
|
|
|
PID_FILE="${ROOT}/.adm-preview.pid"
|
2026-06-17 16:38:58 -07:00
|
|
|
|
API_PID_FILE="${ROOT}/.adm-api.pid"
|
2026-06-16 20:46:59 +08:00
|
|
|
|
|
|
|
|
|
|
export PATH="${NODE_PATH}:${PATH}"
|
|
|
|
|
|
command -v node >/dev/null 2>&1 || { echo "❌ 未找到 node" >&2; exit 1; }
|
|
|
|
|
|
|
|
|
|
|
|
cd "${ROOT}"
|
|
|
|
|
|
|
2026-06-30 20:26:33 +08:00
|
|
|
|
if [[ -f "${ROOT}/.env" ]]; then
|
|
|
|
|
|
set -a
|
|
|
|
|
|
# shellcheck disable=SC1091
|
|
|
|
|
|
source "${ROOT}/.env"
|
|
|
|
|
|
set +a
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
BASE_PATH="${VITE_BASE_PATH:-/ops}"
|
|
|
|
|
|
if [[ "${BASE_PATH}" != */ ]]; then
|
|
|
|
|
|
BASE_PATH="${BASE_PATH}/"
|
|
|
|
|
|
fi
|
|
|
|
|
|
API_HOST="${ADM_API_HOST:-127.0.0.1}"
|
|
|
|
|
|
WEB_HOST="${ADM_WEB_HOST:-${API_HOST}}"
|
|
|
|
|
|
export ADM_API_HOST="${API_HOST}"
|
|
|
|
|
|
export ADM_WEB_HOST="${WEB_HOST}"
|
|
|
|
|
|
export ADM_PORT="${PORT}"
|
|
|
|
|
|
export VITE_BASE_PATH="${BASE_PATH%/}"
|
|
|
|
|
|
|
2026-06-16 20:46:59 +08:00
|
|
|
|
if [[ ! -d dist ]]; then
|
|
|
|
|
|
echo "❌ ${ROOT}/dist 不存在,请先构建或 rsync dist" >&2
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
if [[ ! -d node_modules ]]; then
|
|
|
|
|
|
echo "==> 安装依赖..."
|
|
|
|
|
|
npm install
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2026-06-17 16:38:58 -07:00
|
|
|
|
echo "==> 停止旧进程 (port ${PORT}, ${API_PORT})..."
|
2026-06-30 20:26:33 +08:00
|
|
|
|
if [[ -f "${PID_FILE}" ]]; then
|
|
|
|
|
|
kill "$(cat "${PID_FILE}")" 2>/dev/null || true
|
|
|
|
|
|
fi
|
|
|
|
|
|
if [[ -f "${API_PID_FILE}" ]]; then
|
|
|
|
|
|
kill "$(cat "${API_PID_FILE}")" 2>/dev/null || true
|
|
|
|
|
|
fi
|
2026-06-16 20:46:59 +08:00
|
|
|
|
lsof -ti "TCP:${PORT}" -sTCP:LISTEN 2>/dev/null | xargs kill 2>/dev/null || true
|
2026-06-17 16:38:58 -07:00
|
|
|
|
lsof -ti "TCP:${API_PORT}" -sTCP:LISTEN 2>/dev/null | xargs kill 2>/dev/null || true
|
2026-06-30 20:26:33 +08:00
|
|
|
|
sleep 2
|
2026-06-16 20:46:59 +08:00
|
|
|
|
lsof -ti "TCP:${PORT}" -sTCP:LISTEN 2>/dev/null | xargs kill -9 2>/dev/null || true
|
2026-06-17 16:38:58 -07:00
|
|
|
|
lsof -ti "TCP:${API_PORT}" -sTCP:LISTEN 2>/dev/null | xargs kill -9 2>/dev/null || true
|
2026-06-30 20:26:33 +08:00
|
|
|
|
sleep 1
|
2026-06-17 16:38:58 -07:00
|
|
|
|
|
2026-06-30 20:26:33 +08:00
|
|
|
|
echo "==> 启动 Admin API @ ${API_HOST}:${API_PORT}..."
|
2026-06-17 16:38:58 -07:00
|
|
|
|
nohup node server/index.mjs >>"${API_LOG}" 2>&1 &
|
|
|
|
|
|
echo $! >"${API_PID_FILE}"
|
|
|
|
|
|
sleep 2
|
|
|
|
|
|
|
|
|
|
|
|
if ! curl -sf "http://127.0.0.1:${API_PORT}/health" >/dev/null; then
|
|
|
|
|
|
echo "❌ Admin API 启动失败,最近日志:" >&2
|
|
|
|
|
|
tail -n 40 "${API_LOG}" >&2 || true
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
2026-06-16 20:46:59 +08:00
|
|
|
|
|
2026-06-30 20:26:33 +08:00
|
|
|
|
echo "==> 启动 vite preview @ ${WEB_HOST}:${PORT} (base=${BASE_PATH})..."
|
|
|
|
|
|
nohup npx vite preview --config scripts/vite-preview.config.mjs >>"${LOG}" 2>&1 &
|
2026-06-16 20:46:59 +08:00
|
|
|
|
echo $! >"${PID_FILE}"
|
|
|
|
|
|
sleep 2
|
|
|
|
|
|
|
2026-06-30 20:26:33 +08:00
|
|
|
|
preview_url="http://127.0.0.1:${PORT}${BASE_PATH}"
|
|
|
|
|
|
login_probe="http://127.0.0.1:${PORT}/auth/status"
|
|
|
|
|
|
if curl -sf "${preview_url}" >/dev/null && curl -sf "${login_probe}" >/dev/null; then
|
|
|
|
|
|
echo "✅ memind_adm 已就绪: ${preview_url}"
|
|
|
|
|
|
curl -sf "${preview_url}" >/dev/null && echo " 首页 OK"
|
|
|
|
|
|
echo " /auth 反代 OK"
|
2026-06-20 16:52:13 +08:00
|
|
|
|
echo " 登录请使用数据库中已初始化的 admin 账号"
|
2026-06-16 20:46:59 +08:00
|
|
|
|
else
|
|
|
|
|
|
echo "❌ 启动失败,最近日志:" >&2
|
|
|
|
|
|
tail -n 40 "${LOG}" >&2 || true
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|