feat: add signed PostgreSQL release updates
This commit is contained in:
+92
-8
@@ -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=$!
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user