feat: add signed PostgreSQL release updates

This commit is contained in:
Qiufeng
2026-08-03 23:45:32 +08:00
parent 2524a37a07
commit f6e22cb670
99 changed files with 44671 additions and 284 deletions
+92 -8
View File
@@ -4,9 +4,22 @@ set -uo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
ROOT_DIR="${ERP_RUN_ROOT_DIR:-$SCRIPT_DIR}"
BACKEND_DIR="${ERP_RUN_BACKEND_DIR:-$ROOT_DIR/oa-backend}"
JAVA_BIN="${ERP_RUN_JAVA_BIN:-$ROOT_DIR/.jdks/jdk-17.0.19+10/Contents/Home/bin/java}"
JAR_PATH="${ERP_RUN_JAR_PATH:-$BACKEND_DIR/build/libs/oa-backend-0.1.0.jar}"
BACKEND_PORT="${ERP_RUN_BACKEND_PORT:-8091}"
ERP_ENV_FILE="${ERP_RUN_CONFIG_FILE:-${ERP_CONFIG_FILE:-}}"
if [ -z "$ERP_ENV_FILE" ] && [ -n "${ERP_INSTALL_ROOT:-}" ]; then
ERP_ENV_FILE="$ERP_INSTALL_ROOT/config/erp.env"
fi
if [ -n "$ERP_ENV_FILE" ] && [ -r "$ERP_ENV_FILE" ]; then
set -a
# The production installer writes shell-escaped values to this file.
# shellcheck disable=SC1090
source "$ERP_ENV_FILE"
set +a
fi
JAVA_BIN="${ERP_RUN_JAVA_BIN:-${ERP_JAVA_BIN:-}}"
JAR_PATH="${ERP_RUN_JAR_PATH:-}"
BACKEND_PORT="${ERP_RUN_BACKEND_PORT:-${SERVER_PORT:-8091}}"
SPRING_PROFILE="${ERP_RUN_PROFILE:-${SPRING_PROFILES_ACTIVE:-}}"
NGROK_API_PORT="${ERP_RUN_NGROK_API_PORT:-4040}"
LOCAL_URL="http://127.0.0.1:$BACKEND_PORT"
PUBLIC_URL="${ERP_RUN_PUBLIC_URL:-https://resonant-elated-launder.ngrok-free.dev}"
@@ -14,7 +27,9 @@ NGROK_TARGET="http://localhost:$BACKEND_PORT"
LOG_DIR="${ERP_RUN_LOG_DIR:-${TMPDIR:-/tmp}/kaidi-erp-run}"
BACKEND_LOG="$LOG_DIR/backend.log"
NGROK_LOG="$LOG_DIR/ngrok.log"
NGROK_RUNTIME_CONFIG="$LOG_DIR/ngrok-runtime.yml"
NGROK_BIN=""
NGROK_BASE_CONFIG=""
BACKEND_PID=""
NGROK_PID=""
CLEANED_UP=0
@@ -50,7 +65,12 @@ start_backend() {
: > "$BACKEND_LOG"
(
cd "$BACKEND_DIR" || exit 1
exec "$JAVA_BIN" -jar "$JAR_PATH" --server.port="$BACKEND_PORT"
IFS=$' \t' read -r -a java_opts <<< "${ERP_RUN_JAVA_OPTS:--Xms512m -Xmx2g}"
if [ -n "$SPRING_PROFILE" ]; then
exec "$JAVA_BIN" "${java_opts[@]}" -jar "$JAR_PATH" \
--spring.profiles.active="$SPRING_PROFILE" --server.port="$BACKEND_PORT"
fi
exec "$JAVA_BIN" "${java_opts[@]}" -jar "$JAR_PATH" --server.port="$BACKEND_PORT"
) >> "$BACKEND_LOG" 2>&1 &
BACKEND_PID=$!
}
@@ -126,14 +146,75 @@ resolve_ngrok_bin() {
command -v ngrok 2>/dev/null || return 1
}
resolve_ngrok_config() {
if [ -n "${ERP_RUN_NGROK_CONFIG:-}" ]; then
printf '%s\n' "$ERP_RUN_NGROK_CONFIG"
return 0
fi
local output
output="$("$NGROK_BIN" config check 2>/dev/null)" || return 1
output="${output#* at }"
[ -r "$output" ] || return 1
printf '%s\n' "$output"
}
resolve_java_bin() {
if [ -n "$JAVA_BIN" ]; then
printf '%s\n' "$JAVA_BIN"
return 0
fi
local project_java="$ROOT_DIR/.jdks/jdk-17.0.19+10/Contents/Home/bin/java"
if [ -x "$project_java" ]; then
printf '%s\n' "$project_java"
return 0
fi
command -v java 2>/dev/null || return 1
}
resolve_jar_path() {
if [ -n "$JAR_PATH" ]; then
printf '%s\n' "$JAR_PATH"
return 0
fi
if [ -n "${ERP_INSTALL_ROOT:-}" ] && [ -r "$ERP_INSTALL_ROOT/current/app/kaidi-erp.jar" ]; then
printf '%s\n' "$ERP_INSTALL_ROOT/current/app/kaidi-erp.jar"
return 0
fi
local candidate newest=""
for candidate in "$BACKEND_DIR"/build/libs/oa-backend-*.jar; do
[ -r "$candidate" ] || continue
case "$candidate" in *-plain.jar) continue ;; esac
if [ -z "$newest" ] || [ "$candidate" -nt "$newest" ]; then
newest="$candidate"
fi
done
[ -n "$newest" ] || return 1
printf '%s\n' "$newest"
}
preflight() {
command -v curl >/dev/null || { fail '缺少 curl'; return 1; }
command -v lsof >/dev/null || { fail '缺少 lsof'; return 1; }
command -v python3 >/dev/null || { fail '缺少 python3'; return 1; }
[ -x "$JAVA_BIN" ] || { fail "找不到项目 JDK$JAVA_BIN"; return 1; }
[ -r "$JAR_PATH" ] || { fail "找不到运行 JAR$JAR_PATH"; return 1; }
[ -r "$BACKEND_DIR/data/oa.db" ] || { fail "找不到 SQLite 数据库:$BACKEND_DIR/data/oa.db"; return 1; }
if [ -n "$ERP_ENV_FILE" ] && [ ! -r "$ERP_ENV_FILE" ]; then
fail "找不到运行配置:$ERP_ENV_FILE"
return 1
fi
JAVA_BIN="$(resolve_java_bin)" || { fail '找不到 Java 17+'; return 1; }
JAR_PATH="$(resolve_jar_path)" || { fail '找不到可运行 oa-backend JAR'; return 1; }
local java_major
java_major="$("$JAVA_BIN" -version 2>&1 | awk -F'[".]' '/version/ {print $2; exit}')"
[ -n "$java_major" ] && [ "$java_major" -ge 17 ] 2>/dev/null \
|| { fail '需要 Java 17 或更高版本'; return 1; }
if [ "$SPRING_PROFILE" = 'postgres' ]; then
[ -n "${OA_DB_URL:-}" ] || { fail 'PostgreSQL 模式缺少 OA_DB_URL'; return 1; }
[ -n "${OA_DB_USERNAME:-}" ] || { fail 'PostgreSQL 模式缺少 OA_DB_USERNAME'; return 1; }
fi
NGROK_BIN="$(resolve_ngrok_bin)" || { fail '找不到 ngrok(预期 $HOME/bin/ngrok 或 PATH'; return 1; }
NGROK_BASE_CONFIG="$(resolve_ngrok_config)" || {
fail '找不到有效 ngrok 配置(可设置 ERP_RUN_NGROK_CONFIG'
return 1
}
mkdir -p "$LOG_DIR" || { fail "无法创建日志目录:$LOG_DIR"; return 1; }
}
@@ -146,7 +227,10 @@ ngrok_is_healthy() {
start_ngrok() {
: > "$NGROK_LOG"
"$NGROK_BIN" http --url=resonant-elated-launder.ngrok-free.dev "$BACKEND_PORT" \
printf 'version: "3"\nagent:\n web_addr: "127.0.0.1:%s"\n' \
"$NGROK_API_PORT" > "$NGROK_RUNTIME_CONFIG"
"$NGROK_BIN" http --config "$NGROK_BASE_CONFIG" --config "$NGROK_RUNTIME_CONFIG" \
--url="$PUBLIC_URL" "$BACKEND_PORT" \
--log=stdout --log-format=json >> "$NGROK_LOG" 2>&1 &
NGROK_PID=$!
}