feat: 添加自动化部署方案(Docker + 远程服务器两套方案)
- 新增 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>
This commit is contained in:
126
start.sh
Executable file
126
start.sh
Executable file
@@ -0,0 +1,126 @@
|
||||
#!/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 "========================================"
|
||||
Reference in New Issue
Block a user