# 一键部署脚本使用说明

## 📋 概述

`deploy-all.sh` 是一个一键式部署脚本，可以同时部署后端和前端服务到远程服务器 `101.200.208.45`。

该脚本会自动执行以下操作：
1. 编译后端项目
2. 上传后端 JAR 包到服务器
3. 启动后端服务
4. 构建前端项目
5. 上传前端文件到服务器
6. 验证部署结果

## 🚀 快速开始

### 基本用法

```bash
# 部署所有服务（后端 + 前端 + 管理后台）
bash deploy-all.sh

# 或指定部署类型
bash deploy-all.sh all        # 部署所有服务
bash deploy-all.sh backend    # 仅部署后端
bash deploy-all.sh frontend   # 仅部署前端
bash deploy-all.sh admin      # 仅部署管理后台
```

### 完整部署流程

```bash
# 1. 进入项目根目录
cd /path/to/EmotionMuseum

# 2. 执行一键部署
bash deploy-all.sh

# 3. 等待部署完成（通常需要 2-5 分钟）

# 4. 访问应用
# 前端: http://101.200.208.45/emotion-museum/
# 管理后台: http://101.200.208.45/emotion-museum-admin/
# 后端: http://101.200.208.45:19089/api
```

## 📝 部署选项

### 部署所有服务
```bash
bash deploy-all.sh all
# 或
bash deploy-all.sh
```
同时部署后端和前端，推荐用于完整的应用更新。

### 仅部署后端
```bash
bash deploy-all.sh backend
```
仅更新后端服务，适用于后端代码更新。

### 仅部署前端
```bash
bash deploy-all.sh frontend
```
仅更新前端应用，适用于前端代码更新。

### 仅部署管理后台
```bash
bash deploy-all.sh admin
```
仅更新管理后台，适用于管理后台代码更新。

## 📊 部署流程详解

### 后端部署流程
1. 检查 `backend-single/deploy.sh` 是否存在
2. 执行后端部署脚本
   - 清理旧的构建文件
   - 编译项目 (`mvn clean package`)
   - 上传 JAR 包到服务器
   - 启动后端服务
   - 验证服务是否正常运行

### 前端部署流程
1. 检查 `web/deploy.sh` 是否存在
2. 执行前端部署脚本
   - 构建前端项目 (`npm run build`)
   - 上传 `index.html` 到服务器
   - 上传 `assets` 目录到服务器
   - 验证文件是否上传成功

### 管理后台部署流程
1. 检查 `web-admin/deploy.sh` 是否存在
2. 执行管理后台部署脚本
   - 构建管理后台项目 (`npm run build`)
   - 创建远程目录
   - 上传 `index.html` 到服务器
   - 上传 `assets` 目录到服务器
   - 设置文件权限
   - 验证文件是否上传成功

## ✅ 验证部署

### 部署完成后的验证

```bash
# 1. 检查后端服务是否运行
curl http://101.200.208.45:19089/api/health

# 2. 检查前端是否可访问
curl http://101.200.208.45/emotion-museum/

# 3. 检查管理后台是否可访问
curl http://101.200.208.45/emotion-museum-admin/

# 4. 在浏览器中访问
# 前端: http://101.200.208.45/emotion-museum/
# 管理后台: http://101.200.208.45/emotion-museum-admin/
# 登录页面应该正常显示
```

### 查看服务日志

```bash
# SSH 连接到服务器
ssh root@101.200.208.45

# 查看后端日志
tail -f /data/logs/emotion-museum/emotion-single.log

# 查看前端文件是否存在
ls -lh /data/www/emotion-museum/

# 查看管理后台文件是否存在
ls -lh /data/www/emotion-museum-admin/
```

## 🔧 故障排查

### 后端部署失败

**问题**: 后端部署失败，显示 "JAR 文件不存在"

**解决方案**:
```bash
# 1. 检查是否安装了 Maven
mvn -v

# 2. 手动编译项目
cd backend-single
mvn clean package -DskipTests

# 3. 检查 JAR 文件是否生成
ls -lh target/backend-single-1.0.0.jar

# 4. 重新执行部署
bash deploy-all.sh backend
```

**问题**: SSH 连接失败

**解决方案**:
```bash
# 1. 检查 SSH 密钥是否配置
ssh-keygen -t rsa -b 4096

# 2. 复制公钥到服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub root@101.200.208.45

# 3. 测试 SSH 连接
ssh root@101.200.208.45 "echo 'SSH 连接成功'"
```

### 前端部署失败

**问题**: 前端部署失败，显示 "dist 目录不存在"

**解决方案**:
```bash
# 1. 进入前端目录
cd web

# 2. 安装依赖
npm install

# 3. 构建项目
npm run build

# 4. 检查 dist 目录
ls -lh dist/

# 5. 重新执行部署
bash deploy-all.sh frontend
```

**问题**: 前端访问 404

**解决方案**:
```bash
# 1. 检查 Nginx 配置 (www/server/panel/vhost/nginx/emotion-museum.conf )
ssh root@101.200.208.45 "nginx -t"

# 2. 重新加载 Nginx
ssh root@101.200.208.45 "nginx -s reload"

# 3. 检查前端文件是否存在
ssh root@101.200.208.45 "ls -lh /data/www/emotion-museum/"
```

## 📊 部署日志

部署过程中会输出详细的日志信息：

```
[INFO] 情绪博物馆 - 一键式部署
[INFO] 部署类型: all
[INFO] 部署时间: 2025-10-26 21:30:00

╔════════════════════════════════════════════════════════════════╗
║ 开始部署后端服务
╚════════════════════════════════════════════════════════════════╝

[INFO] 执行后端部署脚本...
[INFO] ✅ 后端部署成功

╔════════════════════════════════════════════════════════════════╗
║ 开始部署前端应用
╚════════════════════════════════════════════════════════════════╝

[INFO] 执行前端部署脚本...
[INFO] ✅ 前端部署成功

╔════════════════════════════════════════════════════════════════╗
║ 部署完成总结
╚════════════════════════════════════════════════════════════════╝

[INFO] ✅ 后端部署: 成功
[INFO] ✅ 前端部署: 成功
[INFO] 部署耗时: 180秒

╔════════════════════════════════════════════════════════════════╗
║ 部署成功！
╚════════════════════════════════════════════════════════════════╝

[INFO] 📱 前端访问地址: http://101.200.208.45/emotion-museum/
[INFO] 🔌 后端API地址: http://101.200.208.45:19089/api
[INFO] 📊 WebSocket地址: ws://101.200.208.45:19089/ws
```

## 🔄 常见场景

### 场景 1: 仅更新后端代码

```bash
# 1. 修改后端代码
# 2. 执行部署
bash deploy-all.sh backend

# 3. 验证
curl http://101.200.208.45:19089/api/health
```

### 场景 2: 仅更新前端代码

```bash
# 1. 修改前端代码
# 2. 执行部署
bash deploy-all.sh frontend

# 3. 在浏览器中刷新页面
# http://101.200.208.45/emotion-museum/
```

### 场景 3: 仅更新管理后台代码

```bash
# 1. 修改管理后台代码
# 2. 执行部署
bash deploy-all.sh admin

# 3. 在浏览器中刷新页面
# http://101.200.208.45/emotion-museum-admin/
```

### 场景 4: 同时更新所有服务

```bash
# 1. 修改前后端和管理后台代码
# 2. 执行部署
bash deploy-all.sh all

# 3. 等待部署完成
# 4. 验证应用
```

## 📞 支持

如有问题，请参考以下文件：
- `backend-single/部署说明.md` - 后端部署详情
- `web/部署说明.md` - 前端部署详情
- `web-admin/部署说明.md` - 管理后台部署详情
- `backend-single/deploy.sh` - 后端部署脚本
- `web/deploy.sh` - 前端部署脚本
- `web-admin/deploy.sh` - 管理后台部署脚本

---

**最后更新**: 2025-10-26
**版本**: 1.0
**状态**: ✅ 已完成

