#!/bin/sh set -eu WEBAPP_ROOT="/home/webapp" ENV_ROOT="$WEBAPP_ROOT/env" APP_ROOT="$WEBAPP_ROOT/loan-pricing" JAVA_HOME="$ENV_ROOT/java" NGINX_HOME="$ENV_ROOT/nginx" NGINX_CONF="$NGINX_HOME/conf/nginx.conf" BACKEND_DIR="$APP_ROOT/backend" FRONTEND_DIR="$APP_ROOT/frontend" BACKUP_DIR="$APP_ROOT/backup" LOG_DIR="$APP_ROOT/logs" RUN_DIR="$APP_ROOT/run" TMP_DIR="$APP_ROOT/tmp" BACKEND_PORT=63310 FRONTEND_PORT=63311 timestamp() { date "+%Y-%m-%d %H:%M:%S" } log_info() { printf '[%s] %s\n' "$(timestamp)" "$1" } log_error() { printf '[%s] %s\n' "$(timestamp)" "$1" >&2 } require_root() { if [ "$(id -u)" -ne 0 ]; then log_error "请使用 root 用户执行安装脚本" exit 1 fi } require_command() { if ! command -v "$1" >/dev/null 2>&1; then log_error "缺少命令: $1" exit 1 fi } ensure_base_dirs() { mkdir -p "$ENV_ROOT" "$BACKEND_DIR" "$FRONTEND_DIR" "$BACKUP_DIR" "$LOG_DIR" "$RUN_DIR" "$TMP_DIR" } find_archive() { search_kind="$1" found="" case "$search_kind" in java) set -- "$WEBAPP_ROOT/openjdk" "$WEBAPP_ROOT" patterns='openjdk*.tar.gz openjdk*.tgz jdk*.tar.gz jdk*.tgz' ;; nginx) set -- "$WEBAPP_ROOT/nginx" "$ENV_ROOT" "$WEBAPP_ROOT" patterns='nginx-*.tar.gz nginx-*.tgz' ;; *) log_error "未知的安装包类型: $search_kind" exit 1 ;; esac for dir in "$@"; do if [ ! -d "$dir" ]; then continue fi for pattern in $patterns; do candidate=$(find "$dir" -maxdepth 1 -type f -name "$pattern" | sort | head -n 1) if [ -n "${candidate:-}" ]; then found="$candidate" break fi done if [ -n "${found:-}" ]; then break fi done if [ -z "${found:-}" ]; then log_error "未找到 $search_kind 安装包" exit 1 fi printf '%s\n' "$found" } install_yum_dependencies() { require_command yum log_info "安装系统依赖" yum install -y \ gcc \ make \ pcre \ pcre-devel \ zlib \ zlib-devel \ openssl \ openssl-devel \ tar \ gzip \ unzip \ which \ findutils \ procps-ng \ iproute } install_java() { java_archive="$1" log_info "安装 Java: $java_archive" rm -rf "$JAVA_HOME" mkdir -p "$JAVA_HOME" tar -xzf "$java_archive" -C "$JAVA_HOME" --strip-components=1 if [ ! -x "$JAVA_HOME/bin/java" ]; then log_error "Java 安装失败,未找到 $JAVA_HOME/bin/java" exit 1 fi "$JAVA_HOME/bin/java" -version >/dev/null 2>&1 } install_nginx() { nginx_archive="$1" build_dir=$(mktemp -d "$ENV_ROOT/nginx-build.XXXXXX") log_info "编译安装 Nginx: $nginx_archive" rm -rf "$NGINX_HOME" mkdir -p "$NGINX_HOME" tar -xzf "$nginx_archive" -C "$build_dir" source_dir=$(find "$build_dir" -mindepth 1 -maxdepth 1 -type d | head -n 1) if [ -z "${source_dir:-}" ]; then rm -rf "$build_dir" log_error "Nginx 源码目录解析失败" exit 1 fi jobs=$(getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1) ( cd "$source_dir" ./configure --prefix="$NGINX_HOME" --with-http_ssl_module make -j"$jobs" make install ) rm -rf "$build_dir" if [ ! -x "$NGINX_HOME/sbin/nginx" ]; then log_error "Nginx 安装失败,未找到 $NGINX_HOME/sbin/nginx" exit 1 fi } write_nginx_conf() { log_info "写入 Nginx 配置: $NGINX_CONF" mkdir -p "$NGINX_HOME/conf" "$NGINX_HOME/logs" "$FRONTEND_DIR/dist" cat > "$NGINX_CONF" <