6 Commits

+12 -4
View File
@@ -23,9 +23,14 @@ KEEP_BACKUPS=3
[[ "$(id -u)" == "0" ]] || { echo "❌ 请用 root / sudo 运行" >&2; exit 1; } [[ "$(id -u)" == "0" ]] || { echo "❌ 请用 root / sudo 运行" >&2; exit 1; }
[[ "$(uname -s)" == "Linux" ]] || { echo "❌ 仅支持 Linux" >&2; exit 1; } [[ "$(uname -s)" == "Linux" ]] || { echo "❌ 仅支持 Linux" >&2; exit 1; }
command -v curl >/dev/null || { echo "❌ 需要 curl" >&2; exit 1; } command -v curl >/dev/null || { echo "❌ 需要 curl" >&2; exit 1; }
command -v node >/dev/null || { echo "❌ 需要 Node.js ≥ 22" >&2; exit 1; } # node 可能装在普通用户的 nvm 下(root PATH 看不见)—— 先 PATH 找,再借 SUDO_USER 的登录环境找
NODE_MAJOR=$(node -e 'console.log(process.versions.node.split(".")[0])') NODE_BIN="$(command -v node || true)"
[[ "${NODE_MAJOR}" -ge 22 ]] || { echo "❌ Node ≥ 22(当前 $(node -v))" >&2; exit 1; } if [[ -z "${NODE_BIN}" && -n "${SUDO_USER:-}" ]]; then
NODE_BIN="$(su - "${SUDO_USER}" -c 'command -v node' 2>/dev/null || true)"
fi
[[ -n "${NODE_BIN}" ]] || { echo "❌ 需要 Node.js ≥ 22(root 与 ${SUDO_USER:-当前用户} 的 PATH 均未找到 node)" >&2; exit 1; }
NODE_MAJOR=$("${NODE_BIN}" -e 'console.log(process.versions.node.split(".")[0])')
[[ "${NODE_MAJOR}" -ge 22 ]] || { echo "❌ Node ≥ 22(当前 $("${NODE_BIN}" -v))" >&2; exit 1; }
command -v docker >/dev/null || { echo "❌ 需要 Docker(worker 用它起沙箱容器)" >&2; exit 1; } command -v docker >/dev/null || { echo "❌ 需要 Docker(worker 用它起沙箱容器)" >&2; exit 1; }
if [[ "${1:-}" == "--uninstall" ]]; then if [[ "${1:-}" == "--uninstall" ]]; then
@@ -76,6 +81,9 @@ if [[ ! -f "${APP_DIR}/.env" ]]; then
PORT=${PORT} PORT=${PORT}
# 调用方 x-api-key(已随机生成;server 侧需配同一值) # 调用方 x-api-key(已随机生成;server 侧需配同一值)
WORKER_API_KEY=$(rnd) WORKER_API_KEY=$(rnd)
# Web UI 登录(/ui,查看连接信息 + 一键升级;首次安装随机密码,请尽快修改)
SANDBOX_UI_USER=admin
SANDBOX_UI_PASSWORD=$(rnd | head -c 16)
ENV ENV
chmod 600 "${APP_DIR}/.env" chmod 600 "${APP_DIR}/.env"
fi fi
@@ -88,7 +96,7 @@ Wants=network-online.target
[Service] [Service]
EnvironmentFile=${APP_DIR}/.env EnvironmentFile=${APP_DIR}/.env
ExecStart=$(command -v node) ${APP_DIR}/current/dist/server.js ExecStart=${NODE_BIN} ${APP_DIR}/current/dist/server.js
WorkingDirectory=${APP_DIR}/current WorkingDirectory=${APP_DIR}/current
Restart=always Restart=always
RestartSec=3 RestartSec=3