- 新增 deploy/docker/:Docker 本机模拟部署,含 Dockerfile、docker-compose、deploy.sh 一键脚本 - 新增 deploy/remote/:远程服务器部署,含 SSH 自动上传、重启、回滚脚本 - 新增 deploy/README.md:完整使用手册,含现状分析、落地调整工作清单、命令速查 - 新增 build.sh/start.sh:本地构建和启动脚本(含飞书通知) - 新增前端 .env.docker 环境配置,API 指向测试服务器 - 前端 package.json 新增 build-docker 命令 - 更新 .gitignore:排除 IDE 配置、SQL 数据、Docker 敏感文件 - 前端 UI 样式优化(多个页面组件) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
127 lines
3.4 KiB
Bash
Executable File
127 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# SmartClean 启动脚本
|
|
# 用法:
|
|
# ./start.sh # 启动所有服务 (public编译 + web + task + frontend)
|
|
# ./start.sh web # 仅启动后端 web 服务
|
|
# ./start.sh task # 仅启动后端 task 服务
|
|
# ./start.sh front # 仅启动前端
|
|
# ./start.sh backend # 启动后端 web + task
|
|
# ./start.sh stop # 停止所有服务
|
|
|
|
# 初始化 SDKMAN 并切换 Java 8
|
|
export SDKMAN_DIR="$HOME/.sdkman"
|
|
source "$SDKMAN_DIR/bin/sdkman-init.sh"
|
|
sdk use java 8.0.432-zulu > /dev/null 2>&1
|
|
|
|
ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
PUBLIC_DIR="$ROOT_DIR/backend/xiaoqu-intellectual-public"
|
|
WEB_DIR="$ROOT_DIR/backend/xiaoqu-intellectual-web"
|
|
TASK_DIR="$ROOT_DIR/backend/xiaoqu-intellectual-task"
|
|
FRONT_DIR="$ROOT_DIR/frontend/witcleansystem"
|
|
LOG_DIR="$ROOT_DIR/logs"
|
|
PROFILE="test"
|
|
|
|
mkdir -p "$LOG_DIR"
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
|
|
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
|
|
|
install_public() {
|
|
log_info "编译安装 public 模块..."
|
|
cd "$PUBLIC_DIR" && mvn clean install -q -DskipTests
|
|
if [ $? -ne 0 ]; then
|
|
log_error "public 模块编译失败"
|
|
exit 1
|
|
fi
|
|
log_info "public 模块编译完成"
|
|
}
|
|
|
|
start_web() {
|
|
log_info "启动 Web 服务 (端口 8095, profile=$PROFILE)..."
|
|
cd "$WEB_DIR"
|
|
mvn spring-boot:run -Dspring-boot.run.profiles=$PROFILE -q > "$LOG_DIR/web.log" 2>&1 &
|
|
echo $! > "$LOG_DIR/web.pid"
|
|
log_info "Web 服务已启动, PID=$(cat "$LOG_DIR/web.pid"), 日志: $LOG_DIR/web.log"
|
|
}
|
|
|
|
start_task() {
|
|
log_info "启动 Task 服务 (端口 8097, profile=$PROFILE)..."
|
|
cd "$TASK_DIR"
|
|
mvn spring-boot:run -Dspring-boot.run.profiles=$PROFILE -q > "$LOG_DIR/task.log" 2>&1 &
|
|
echo $! > "$LOG_DIR/task.pid"
|
|
log_info "Task 服务已启动, PID=$(cat "$LOG_DIR/task.pid"), 日志: $LOG_DIR/task.log"
|
|
}
|
|
|
|
start_front() {
|
|
log_info "启动前端开发服务 (端口 8079)..."
|
|
cd "$FRONT_DIR"
|
|
if [ ! -d "node_modules" ]; then
|
|
log_warn "未检测到 node_modules, 正在安装依赖..."
|
|
npm install
|
|
fi
|
|
npm run dev > "$LOG_DIR/front.log" 2>&1 &
|
|
echo $! > "$LOG_DIR/front.pid"
|
|
log_info "前端服务已启动, PID=$(cat "$LOG_DIR/front.pid"), 日志: $LOG_DIR/front.log"
|
|
}
|
|
|
|
stop_all() {
|
|
log_info "停止所有服务..."
|
|
for name in web task front; do
|
|
pid_file="$LOG_DIR/$name.pid"
|
|
if [ -f "$pid_file" ]; then
|
|
pid=$(cat "$pid_file")
|
|
if kill -0 "$pid" 2>/dev/null; then
|
|
kill "$pid"
|
|
log_info "已停止 $name 服务 (PID=$pid)"
|
|
fi
|
|
rm -f "$pid_file"
|
|
fi
|
|
done
|
|
}
|
|
|
|
case "${1:-all}" in
|
|
web)
|
|
install_public
|
|
start_web
|
|
;;
|
|
task)
|
|
install_public
|
|
start_task
|
|
;;
|
|
backend)
|
|
install_public
|
|
start_web
|
|
start_task
|
|
;;
|
|
front)
|
|
start_front
|
|
;;
|
|
all)
|
|
install_public
|
|
start_web
|
|
start_task
|
|
start_front
|
|
;;
|
|
stop)
|
|
stop_all
|
|
;;
|
|
*)
|
|
echo "用法: $0 {all|web|task|backend|front|stop}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo ""
|
|
log_info "========================================"
|
|
log_info " 前端: http://localhost:8079"
|
|
log_info " Web: http://localhost:8095"
|
|
log_info " Task: http://localhost:8097"
|
|
log_info "========================================"
|