🚀 完善前后端启动脚本和文档
✨ 新增启动脚本: - start-full-project.sh: 完整的前后端启动脚本,含环境检查 - dev-start.sh: 开发环境快速启动脚本 - stop-full-project.sh: 停止所有服务的脚本 📖 新增文档: - STARTUP_GUIDE.md: 详细的启动指南和故障排除 - 更新 README.md: 添加项目结构说明和启动脚本介绍 🔧 功能特点: - ✅ 自动环境检查(Java、Node.js、MongoDB) - ✅ 智能进程管理和端口清理 - ✅ 详细的启动日志和状态检查 - ✅ 交互式和静默启动模式 - ✅ 完整的故障排除指南 🎯 适配新项目结构: - 后端:项目根目录 (Spring Boot) - 前端:frontend/ 子目录 (Vue.js) - 一键启动完整的前后端开发环境 📋 三种启动方式: 1. dev-start.sh - 开发快速启动 ⭐ 推荐 2. start-full-project.sh - 完整启动检查 3. 手动分别启动 - 调试使用 现在开发者只需一个命令即可启动完整的前后端开发环境!
This commit is contained in:
parent
8591ad3233
commit
d5f11e43bd
54
README.md
54
README.md
@ -13,6 +13,8 @@
|
||||
- ✅ **共享操作**:任何用户都可以上传、下载、删除、重命名所有文件
|
||||
- ✅ **保留认证**:用户登录验证和基本权限控制仍然有效
|
||||
- ✅ **元数据保留**:文件的创建者信息仍保存在数据库中
|
||||
- ✅ **前端集成**:前端Vue.js项目已集成到仓库中 (`frontend/` 目录)
|
||||
- ✅ **一键启动**:提供完整的前后端启动脚本
|
||||
|
||||
## 🔧 核心改造内容
|
||||
|
||||
@ -22,9 +24,10 @@
|
||||
3. **文件操作公共化** - 所有文件操作适配公共空间
|
||||
4. **用户目录管理适配** - 不再创建用户专属目录
|
||||
|
||||
### 前端兼容性
|
||||
- ✅ **无需修改** - 前端代码完全兼容,无需任何变更
|
||||
- ✅ **API向后兼容** - 保持原有接口参数,仅后端逻辑调整
|
||||
### 前端集成
|
||||
- ✅ **完整集成** - 前端Vue.js项目已集成到仓库
|
||||
- ✅ **API兼容** - 保持原有接口参数,仅后端逻辑调整
|
||||
- ✅ **一站式开发** - 一个仓库包含完整前后端代码
|
||||
|
||||
## 🎯 适用场景
|
||||
|
||||
@ -96,15 +99,31 @@
|
||||
- MongoDB 4.4+
|
||||
- Maven 3.6+
|
||||
|
||||
### 构建和运行
|
||||
### 🚀 快速启动 (推荐)
|
||||
|
||||
#### 一键启动前后端
|
||||
```bash
|
||||
# 开发环境快速启动
|
||||
./dev-start.sh
|
||||
|
||||
# 或完整启动 (含环境检查)
|
||||
./start-full-project.sh
|
||||
```
|
||||
|
||||
#### 手动构建和运行
|
||||
```bash
|
||||
# 构建项目
|
||||
mvn clean package -DskipTests
|
||||
|
||||
# 运行
|
||||
# 运行后端
|
||||
java -jar target/clouddisk-*.jar
|
||||
|
||||
# 启动前端 (另开终端)
|
||||
cd frontend/ && npm install && npm run dev
|
||||
```
|
||||
|
||||
> 📖 详细启动说明请查看:[STARTUP_GUIDE.md](./STARTUP_GUIDE.md)
|
||||
|
||||
### Docker 部署
|
||||
|
||||
#### 🎯 方案1:从Git仓库构建部署(推荐)
|
||||
@ -127,6 +146,31 @@ docker-compose up -d
|
||||
- **自动构建**:支持从Git仓库直接构建Docker镜像
|
||||
- **持续集成**:修改代码后重新构建即可更新
|
||||
|
||||
## 📁 项目结构
|
||||
|
||||
```
|
||||
jmalcloud/
|
||||
├── src/ # 🔧 后端Java源码
|
||||
│ ├── main/java/ # Spring Boot主代码
|
||||
│ └── test/java/ # 单元测试代码
|
||||
├── frontend/ # 🎨 前端Vue.js项目
|
||||
│ ├── src/ # Vue组件和页面
|
||||
│ ├── public/ # 静态资源
|
||||
│ └── package.json # NPM依赖配置
|
||||
├── docker-compose*.yml # 🐳 多种Docker部署配置
|
||||
├── *.sh # 🚀 启动和构建脚本
|
||||
├── *.md # 📖 详细文档
|
||||
└── pom.xml # 📦 Maven项目配置
|
||||
```
|
||||
|
||||
### 🔧 启动脚本说明
|
||||
|
||||
| 脚本 | 用途 | 推荐场景 |
|
||||
|------|------|----------|
|
||||
| `dev-start.sh` | 快速启动前后端 | 日常开发 ⭐ |
|
||||
| `start-full-project.sh` | 完整启动含检查 | 首次部署 |
|
||||
| `stop-full-project.sh` | 停止所有服务 | 清理环境 |
|
||||
|
||||
## 📝 变更日志
|
||||
|
||||
### v2.15.0-public-space
|
||||
|
||||
222
STARTUP_GUIDE.md
Normal file
222
STARTUP_GUIDE.md
Normal file
@ -0,0 +1,222 @@
|
||||
# 🚀 JmalCloud 前后端启动指南
|
||||
|
||||
> 完整的前后端集成项目启动说明
|
||||
|
||||
## 📋 项目结构确认
|
||||
|
||||
### ✅ 前后端代码完整性检查
|
||||
|
||||
**后端代码** (根目录):
|
||||
- ✅ `src/main/` - Java源代码
|
||||
- ✅ `src/test/` - 测试代码
|
||||
- ✅ `pom.xml` - Maven配置
|
||||
- ✅ `target/` - 编译输出
|
||||
|
||||
**前端代码** (`frontend/` 目录):
|
||||
- ✅ `src/` - Vue.js源代码
|
||||
- ✅ `package.json` - NPM配置
|
||||
- ✅ `vue.config.js` - Vue CLI配置
|
||||
- ✅ `public/` - 静态资源
|
||||
|
||||
## ⚙️ 环境要求
|
||||
|
||||
### 后端要求
|
||||
- ☑️ **Java**: 21+ (推荐)
|
||||
- ☑️ **Maven**: 3.6+
|
||||
- ☑️ **MongoDB**: 4.4+ (需要运行中)
|
||||
|
||||
### 前端要求
|
||||
- ☑️ **Node.js**: ^16 或 ^18 (package.json指定)
|
||||
- ☑️ **npm**: 自带或yarn
|
||||
- ☑️ **Vue CLI**: 自动安装
|
||||
|
||||
## 🚀 启动方式
|
||||
|
||||
### 方式1:开发环境快速启动 ⭐️ 推荐
|
||||
|
||||
```bash
|
||||
# 一键启动前后端 (后台运行)
|
||||
./dev-start.sh
|
||||
```
|
||||
|
||||
**特点**:
|
||||
- ✅ 最简单快速
|
||||
- ✅ 后台运行,不占用终端
|
||||
- ✅ 适合日常开发
|
||||
|
||||
**访问地址**:
|
||||
- 🌐 前端:http://localhost:9528
|
||||
- 🔌 后端:http://localhost:8088
|
||||
|
||||
### 方式2:完整交互式启动
|
||||
|
||||
```bash
|
||||
# 完整的启动过程,带环境检查
|
||||
./start-full-project.sh
|
||||
```
|
||||
|
||||
**特点**:
|
||||
- ✅ 完整的环境检查
|
||||
- ✅ 详细的启动日志
|
||||
- ✅ 交互式选项
|
||||
- ✅ 自动健康检查
|
||||
|
||||
### 方式3:手动分别启动
|
||||
|
||||
**启动后端**:
|
||||
```bash
|
||||
# 设置环境变量
|
||||
export MONGODB_URI="mongodb://localhost:27017/jmalcloud"
|
||||
|
||||
# 启动Spring Boot
|
||||
mvn spring-boot:run -Dspring-boot.run.profiles=dev
|
||||
```
|
||||
|
||||
**启动前端**:
|
||||
```bash
|
||||
cd frontend/
|
||||
|
||||
# 安装依赖 (首次运行)
|
||||
npm install
|
||||
|
||||
# 设置环境变量
|
||||
export NODE_OPTIONS="--openssl-legacy-provider"
|
||||
export VUE_APP_BASE_API="/api"
|
||||
export API="http://localhost:8088"
|
||||
|
||||
# 启动Vue开发服务器
|
||||
npm run dev
|
||||
```
|
||||
|
||||
## 🛑 停止服务
|
||||
|
||||
```bash
|
||||
# 停止所有服务
|
||||
./stop-full-project.sh
|
||||
```
|
||||
|
||||
## 📊 服务管理
|
||||
|
||||
### 查看运行状态
|
||||
```bash
|
||||
# 检查端口占用
|
||||
lsof -ti:8088 # 后端
|
||||
lsof -ti:9528 # 前端
|
||||
|
||||
# 检查进程
|
||||
ps aux | grep spring-boot
|
||||
ps aux | grep vue-cli-service
|
||||
```
|
||||
|
||||
### 查看日志
|
||||
```bash
|
||||
# 实时查看日志
|
||||
tail -f backend.log # 后端日志
|
||||
tail -f frontend.log # 前端日志
|
||||
|
||||
# 或同时查看
|
||||
tail -f backend.log frontend.log
|
||||
```
|
||||
|
||||
## 🔧 常见问题解决
|
||||
|
||||
### 1. Node.js版本问题
|
||||
如果Node.js版本不匹配:
|
||||
|
||||
```bash
|
||||
# 使用nvm管理Node.js版本
|
||||
nvm install 18
|
||||
nvm use 18
|
||||
|
||||
# 或设置兼容选项
|
||||
export NODE_OPTIONS="--openssl-legacy-provider"
|
||||
```
|
||||
|
||||
### 2. 端口冲突
|
||||
修改端口配置:
|
||||
|
||||
```bash
|
||||
# 修改后端端口
|
||||
export SERVER_PORT=8089
|
||||
|
||||
# 修改前端端口
|
||||
export PORT=9529
|
||||
```
|
||||
|
||||
### 3. MongoDB连接失败
|
||||
```bash
|
||||
# 启动MongoDB
|
||||
brew services start mongodb-community # macOS
|
||||
# 或
|
||||
systemctl start mongod # Linux
|
||||
|
||||
# 检查连接
|
||||
mongosh --eval "db.adminCommand('ping')"
|
||||
```
|
||||
|
||||
### 4. Maven构建失败
|
||||
```bash
|
||||
# 清理并重新构建
|
||||
mvn clean compile
|
||||
|
||||
# 跳过测试
|
||||
mvn spring-boot:run -DskipTests
|
||||
```
|
||||
|
||||
### 5. 前端依赖安装失败
|
||||
```bash
|
||||
cd frontend/
|
||||
|
||||
# 清理缓存
|
||||
npm cache clean --force
|
||||
rm -rf node_modules package-lock.json
|
||||
|
||||
# 重新安装
|
||||
npm install
|
||||
```
|
||||
|
||||
## 🎯 开发建议
|
||||
|
||||
### 推荐的开发流程
|
||||
1. **首次启动**:使用 `./start-full-project.sh` 进行完整检查
|
||||
2. **日常开发**:使用 `./dev-start.sh` 快速启动
|
||||
3. **调试问题**:查看对应的日志文件
|
||||
4. **停止服务**:使用 `./stop-full-project.sh` 完整停止
|
||||
|
||||
### 默认访问地址
|
||||
| 服务 | 地址 | 说明 |
|
||||
|------|------|------|
|
||||
| **前端主页** | http://localhost:9528 | Vue.js开发服务器 |
|
||||
| **后端API** | http://localhost:8088 | Spring Boot应用 |
|
||||
| **健康检查** | http://localhost:8088/public/health | 后端状态检查 |
|
||||
| **API文档** | http://localhost:8088/swagger-ui/ | 接口文档 |
|
||||
|
||||
### 登录信息
|
||||
- **用户名**:`admin`
|
||||
- **密码**:`123456`
|
||||
|
||||
## 📁 项目文件说明
|
||||
|
||||
| 文件 | 说明 | 用途 |
|
||||
|------|------|------|
|
||||
| `start-full-project.sh` | 完整启动脚本 | 生产级启动,含环境检查 |
|
||||
| `dev-start.sh` | 开发快速启动 | 日常开发使用 |
|
||||
| `stop-full-project.sh` | 停止脚本 | 清理所有服务和端口 |
|
||||
| `backend.log` | 后端日志 | Spring Boot运行日志 |
|
||||
| `frontend.log` | 前端日志 | Vue CLI开发服务器日志 |
|
||||
|
||||
## 💡 提示
|
||||
|
||||
1. **首次运行**建议使用 `./start-full-project.sh` 进行环境检查
|
||||
2. **前端首次启动**会自动安装依赖,请耐心等待
|
||||
3. **后端首次启动**需要编译,大约需要1-2分钟
|
||||
4. **MongoDB必须先启动**,否则后端会连接失败
|
||||
5. **端口占用**时脚本会自动清理旧进程
|
||||
|
||||
## 🆘 获得帮助
|
||||
|
||||
如果遇到问题:
|
||||
1. 检查对应的日志文件
|
||||
2. 确认环境要求是否满足
|
||||
3. 尝试手动启动排查问题
|
||||
4. 使用停止脚本清理环境后重试
|
||||
46
dev-start.sh
Executable file
46
dev-start.sh
Executable file
@ -0,0 +1,46 @@
|
||||
#!/bin/bash
|
||||
# JmalCloud 开发环境快速启动脚本
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
echo -e "${BLUE}⚡ JmalCloud 开发环境快速启动${NC}"
|
||||
echo -e "${BLUE}==============================${NC}"
|
||||
|
||||
# 检查项目结构
|
||||
if [ ! -f "pom.xml" ] || [ ! -d "frontend" ]; then
|
||||
echo "❌ 项目结构不完整,请确保在正确的项目根目录"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${YELLOW}🔧 启动后端 (后台)...${NC}"
|
||||
# 后端静默启动
|
||||
export MONGODB_URI="mongodb://localhost:27017/jmalcloud"
|
||||
nohup mvn spring-boot:run -Dspring-boot.run.profiles=dev > backend.log 2>&1 &
|
||||
echo "后端PID: $!"
|
||||
|
||||
echo -e "${YELLOW}🎨 启动前端 (后台)...${NC}"
|
||||
# 前端静默启动
|
||||
cd frontend
|
||||
export NODE_OPTIONS="--openssl-legacy-provider"
|
||||
export VUE_APP_BASE_API="/api"
|
||||
export API="http://localhost:8088"
|
||||
nohup npm run dev > ../frontend.log 2>&1 &
|
||||
echo "前端PID: $!"
|
||||
cd ..
|
||||
|
||||
echo -e "${GREEN}✅ 启动完成!${NC}"
|
||||
echo -e "${GREEN}🌐 前端: http://localhost:9528${NC}"
|
||||
echo -e "${GREEN}🔌 后端: http://localhost:8088${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}📋 查看日志:${NC}"
|
||||
echo " tail -f backend.log"
|
||||
echo " tail -f frontend.log"
|
||||
echo ""
|
||||
echo -e "${YELLOW}🛑 停止服务:${NC}"
|
||||
echo " ./stop-full-project.sh"
|
||||
237
start-full-project.sh
Executable file
237
start-full-project.sh
Executable file
@ -0,0 +1,237 @@
|
||||
#!/bin/bash
|
||||
# JmalCloud 完整前后端启动脚本
|
||||
# 适配新的集成项目结构:backend(根目录) + frontend(子目录)
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 配置参数
|
||||
BACKEND_PORT=${BACKEND_PORT:-8088}
|
||||
FRONTEND_PORT=${FRONTEND_PORT:-9528}
|
||||
BACKEND_LOG="backend.log"
|
||||
FRONTEND_LOG="frontend.log"
|
||||
FRONTEND_DIR="frontend"
|
||||
|
||||
echo -e "${BLUE}🚀 JmalCloud 完整前后端启动脚本${NC}"
|
||||
echo -e "${BLUE}=================================${NC}"
|
||||
|
||||
# 检查必要工具
|
||||
check_requirements() {
|
||||
echo -e "${YELLOW}📋 检查运行环境...${NC}"
|
||||
|
||||
# 检查Java
|
||||
if ! command -v java &> /dev/null; then
|
||||
echo -e "${RED}❌ Java 未安装,请先安装Java 21+${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local java_version=$(java -version 2>&1 | head -n1 | cut -d'"' -f2)
|
||||
echo -e "${GREEN}☑️ Java版本: ${java_version}${NC}"
|
||||
|
||||
# 检查Maven
|
||||
if ! command -v mvn &> /dev/null; then
|
||||
echo -e "${RED}❌ Maven 未安装,请先安装Maven${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查Node.js
|
||||
if ! command -v node &> /dev/null; then
|
||||
echo -e "${RED}❌ Node.js 未安装,请先安装Node.js${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local node_version=$(node --version)
|
||||
echo -e "${GREEN}☑️ Node.js版本: ${node_version}${NC}"
|
||||
|
||||
# 检查npm
|
||||
if ! command -v npm &> /dev/null; then
|
||||
echo -e "${RED}❌ npm 未安装${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查MongoDB连接
|
||||
echo -e "${YELLOW}🔍 检查MongoDB连接...${NC}"
|
||||
if command -v mongosh &> /dev/null; then
|
||||
if mongosh --eval "db.adminCommand('ping')" --quiet > /dev/null 2>&1; then
|
||||
echo -e "${GREEN}☑️ MongoDB 连接正常${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ MongoDB 连接失败,请确保MongoDB已启动${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ 未发现mongosh,请确保MongoDB已启动${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# 停止现有进程
|
||||
stop_existing_processes() {
|
||||
echo -e "${YELLOW}🛑 停止现有进程...${NC}"
|
||||
|
||||
# 停止Java进程
|
||||
local java_pids=$(ps aux | grep 'java.*spring-boot:run\|java.*clouddisk' | grep -v grep | awk '{print $2}')
|
||||
if [ ! -z "$java_pids" ]; then
|
||||
echo "停止Java进程: $java_pids"
|
||||
echo $java_pids | xargs kill -15
|
||||
sleep 2
|
||||
# 强制杀死
|
||||
echo $java_pids | xargs kill -9 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# 停止Node进程
|
||||
local node_pids=$(ps aux | grep 'node.*vue-cli-service' | grep -v grep | awk '{print $2}')
|
||||
if [ ! -z "$node_pids" ]; then
|
||||
echo "停止Node.js进程: $node_pids"
|
||||
echo $node_pids | xargs kill -15
|
||||
sleep 2
|
||||
echo $node_pids | xargs kill -9 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# 清理端口占用
|
||||
for port in $BACKEND_PORT $FRONTEND_PORT; do
|
||||
local pid=$(lsof -ti:$port)
|
||||
if [ ! -z "$pid" ]; then
|
||||
echo "清理端口 $port 占用进程: $pid"
|
||||
kill -9 $pid 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
|
||||
echo -e "${GREEN}✅ 进程清理完成${NC}"
|
||||
}
|
||||
|
||||
# 启动后端
|
||||
start_backend() {
|
||||
echo -e "${YELLOW}🔧 启动后端服务...${NC}"
|
||||
|
||||
# 检查pom.xml
|
||||
if [ ! -f "pom.xml" ]; then
|
||||
echo -e "${RED}❌ 未找到pom.xml,请确保在项目根目录运行${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 设置环境变量
|
||||
export JAVA_HOME=${JAVA_HOME:-$(java -XshowSettings:properties -version 2>&1 | grep 'java.home' | awk '{print $3}')}
|
||||
export MONGODB_URI=${MONGODB_URI:-"mongodb://localhost:27017/jmalcloud"}
|
||||
export SERVER_PORT=$BACKEND_PORT
|
||||
|
||||
echo "MongoDB URI: $MONGODB_URI"
|
||||
echo "后端端口: $BACKEND_PORT"
|
||||
|
||||
# 启动Spring Boot
|
||||
nohup mvn spring-boot:run -Dspring-boot.run.profiles=dev > $BACKEND_LOG 2>&1 &
|
||||
local backend_pid=$!
|
||||
|
||||
echo "后端进程ID: $backend_pid"
|
||||
echo -e "${GREEN}✅ 后端启动命令已执行${NC}"
|
||||
}
|
||||
|
||||
# 启动前端
|
||||
start_frontend() {
|
||||
echo -e "${YELLOW}🎨 启动前端服务...${NC}"
|
||||
|
||||
# 检查前端目录
|
||||
if [ ! -d "$FRONTEND_DIR" ]; then
|
||||
echo -e "${RED}❌ 未找到前端目录: $FRONTEND_DIR${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd $FRONTEND_DIR
|
||||
|
||||
# 检查package.json
|
||||
if [ ! -f "package.json" ]; then
|
||||
echo -e "${RED}❌ 前端目录中未找到package.json${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 安装依赖(如果需要)
|
||||
if [ ! -d "node_modules" ]; then
|
||||
echo -e "${YELLOW}📦 安装前端依赖...${NC}"
|
||||
npm install
|
||||
fi
|
||||
|
||||
# 设置环境变量
|
||||
export NODE_OPTIONS="--openssl-legacy-provider"
|
||||
export VUE_APP_BASE_API="/api"
|
||||
export API="http://localhost:$BACKEND_PORT"
|
||||
export PORT=$FRONTEND_PORT
|
||||
|
||||
echo "前端API地址: $API"
|
||||
echo "前端端口: $FRONTEND_PORT"
|
||||
|
||||
# 启动Vue开发服务器
|
||||
nohup npm run dev > ../$FRONTEND_LOG 2>&1 &
|
||||
local frontend_pid=$!
|
||||
|
||||
cd ..
|
||||
|
||||
echo "前端进程ID: $frontend_pid"
|
||||
echo -e "${GREEN}✅ 前端启动命令已执行${NC}"
|
||||
}
|
||||
|
||||
# 检查服务状态
|
||||
check_services() {
|
||||
echo -e "${YELLOW}⏳ 等待服务启动...${NC}"
|
||||
sleep 10
|
||||
|
||||
# 检查后端
|
||||
echo -e "${BLUE}🔍 检查后端状态...${NC}"
|
||||
if curl -s "http://localhost:$BACKEND_PORT/public/health" > /dev/null 2>&1; then
|
||||
echo -e "${GREEN}✅ 后端服务运行正常${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ 后端服务可能还在启动中...${NC}"
|
||||
echo -e "${YELLOW}📋 检查后端日志: tail -f $BACKEND_LOG${NC}"
|
||||
fi
|
||||
|
||||
# 检查前端
|
||||
echo -e "${BLUE}🔍 检查前端状态...${NC}"
|
||||
if curl -s "http://localhost:$FRONTEND_PORT" > /dev/null 2>&1; then
|
||||
echo -e "${GREEN}✅ 前端服务运行正常${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ 前端服务可能还在启动中...${NC}"
|
||||
echo -e "${YELLOW}📋 检查前端日志: tail -f $FRONTEND_LOG${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# 显示访问信息
|
||||
show_access_info() {
|
||||
echo -e "${GREEN}🎉 启动完成!${NC}"
|
||||
echo -e "${BLUE}=================================${NC}"
|
||||
echo -e "${GREEN}🌐 前端访问地址: ${YELLOW}http://localhost:$FRONTEND_PORT${NC}"
|
||||
echo -e "${GREEN}🔌 后端API地址: ${YELLOW}http://localhost:$BACKEND_PORT${NC}"
|
||||
echo -e "${GREEN}📊 后端健康检查: ${YELLOW}http://localhost:$BACKEND_PORT/public/health${NC}"
|
||||
echo -e "${BLUE}=================================${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}📋 管理命令:${NC}"
|
||||
echo -e " 查看后端日志: ${BLUE}tail -f $BACKEND_LOG${NC}"
|
||||
echo -e " 查看前端日志: ${BLUE}tail -f $FRONTEND_LOG${NC}"
|
||||
echo -e " 停止服务: ${BLUE}./stop-full-project.sh${NC}"
|
||||
echo ""
|
||||
echo -e "${GREEN}💡 提示: 初次启动可能需要较长时间,请耐心等待...${NC}"
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
check_requirements
|
||||
stop_existing_processes
|
||||
start_backend
|
||||
start_frontend
|
||||
check_services
|
||||
show_access_info
|
||||
|
||||
# 询问是否查看日志
|
||||
echo ""
|
||||
read -p "🔍 是否查看实时日志?(y/N): " view_logs
|
||||
if [[ $view_logs =~ ^[Yy]$ ]]; then
|
||||
echo -e "${YELLOW}📋 显示实时日志 (Ctrl+C 退出)...${NC}"
|
||||
tail -f $BACKEND_LOG $FRONTEND_LOG
|
||||
fi
|
||||
}
|
||||
|
||||
# 脚本入口
|
||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||
main "$@"
|
||||
fi
|
||||
101
stop-full-project.sh
Executable file
101
stop-full-project.sh
Executable file
@ -0,0 +1,101 @@
|
||||
#!/bin/bash
|
||||
# JmalCloud 完整前后端停止脚本
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
BACKEND_PORT=${BACKEND_PORT:-8088}
|
||||
FRONTEND_PORT=${FRONTEND_PORT:-9528}
|
||||
|
||||
echo -e "${BLUE}🛑 JmalCloud 服务停止脚本${NC}"
|
||||
echo -e "${BLUE}=============================${NC}"
|
||||
|
||||
# 停止Java后端进程
|
||||
echo -e "${YELLOW}🔧 停止后端服务...${NC}"
|
||||
java_pids=$(ps aux | grep 'java.*spring-boot:run\|java.*clouddisk' | grep -v grep | awk '{print $2}')
|
||||
if [ ! -z "$java_pids" ]; then
|
||||
echo "发现Java进程: $java_pids"
|
||||
echo $java_pids | xargs kill -15
|
||||
sleep 3
|
||||
|
||||
# 检查是否还有进程存在
|
||||
remaining_java=$(ps aux | grep 'java.*spring-boot:run\|java.*clouddisk' | grep -v grep | awk '{print $2}')
|
||||
if [ ! -z "$remaining_java" ]; then
|
||||
echo "强制终止Java进程: $remaining_java"
|
||||
echo $remaining_java | xargs kill -9
|
||||
fi
|
||||
echo -e "${GREEN}✅ 后端服务已停止${NC}"
|
||||
else
|
||||
echo -e "${GREEN}✅ 未发现运行中的后端服务${NC}"
|
||||
fi
|
||||
|
||||
# 停止Node.js前端进程
|
||||
echo -e "${YELLOW}🎨 停止前端服务...${NC}"
|
||||
node_pids=$(ps aux | grep 'node.*vue-cli-service\|npm.*dev' | grep -v grep | awk '{print $2}')
|
||||
if [ ! -z "$node_pids" ]; then
|
||||
echo "发现Node.js进程: $node_pids"
|
||||
echo $node_pids | xargs kill -15
|
||||
sleep 3
|
||||
|
||||
# 检查是否还有进程存在
|
||||
remaining_node=$(ps aux | grep 'node.*vue-cli-service\|npm.*dev' | grep -v grep | awk '{print $2}')
|
||||
if [ ! -z "$remaining_node" ]; then
|
||||
echo "强制终止Node.js进程: $remaining_node"
|
||||
echo $remaining_node | xargs kill -9
|
||||
fi
|
||||
echo -e "${GREEN}✅ 前端服务已停止${NC}"
|
||||
else
|
||||
echo -e "${GREEN}✅ 未发现运行中的前端服务${NC}"
|
||||
fi
|
||||
|
||||
# 清理端口占用
|
||||
echo -e "${YELLOW}🧹 清理端口占用...${NC}"
|
||||
for port in $BACKEND_PORT $FRONTEND_PORT; do
|
||||
pid=$(lsof -ti:$port 2>/dev/null || true)
|
||||
if [ ! -z "$pid" ]; then
|
||||
echo "清理端口 $port 占用进程: $pid"
|
||||
kill -9 $pid 2>/dev/null || true
|
||||
echo -e "${GREEN}✅ 端口 $port 已清理${NC}"
|
||||
fi
|
||||
done
|
||||
|
||||
# 清理日志文件(可选)
|
||||
echo -e "${YELLOW}🗑️ 清理日志文件...${NC}"
|
||||
if [ -f "backend.log" ]; then
|
||||
> backend.log
|
||||
echo -e "${GREEN}✅ 后端日志已清理${NC}"
|
||||
fi
|
||||
|
||||
if [ -f "frontend.log" ]; then
|
||||
> frontend.log
|
||||
echo -e "${GREEN}✅ 前端日志已清理${NC}"
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}🎉 所有服务已停止!${NC}"
|
||||
echo -e "${BLUE}=============================${NC}"
|
||||
echo -e "${GREEN}📋 状态检查:${NC}"
|
||||
|
||||
# 最终检查
|
||||
backend_check=$(lsof -ti:$BACKEND_PORT 2>/dev/null || echo "")
|
||||
frontend_check=$(lsof -ti:$FRONTEND_PORT 2>/dev/null || echo "")
|
||||
|
||||
if [ -z "$backend_check" ]; then
|
||||
echo -e "${GREEN}✅ 后端端口 $BACKEND_PORT 已释放${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ 后端端口 $BACKEND_PORT 仍被占用${NC}"
|
||||
fi
|
||||
|
||||
if [ -z "$frontend_check" ]; then
|
||||
echo -e "${GREEN}✅ 前端端口 $FRONTEND_PORT 已释放${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ 前端端口 $FRONTEND_PORT 仍被占用${NC}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}💡 提示: 如需重新启动,请运行 ./start-full-project.sh${NC}"
|
||||
Loading…
x
Reference in New Issue
Block a user