Files
sftp-manager/docs/13-部署与测试.md
liu 14289beb66 Initial commit
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 10:10:11 +08:00

789 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 模块13部署与测试
---
## 🎨 UI设计系统概览
> **完整设计系统文档请参考:** `UI设计系统.md`
### 核心设计原则
- **现代简约**:界面清晰,层次分明
- **专业高效**:减少操作步骤,提升工作效率
- **一致性**:统一的视觉语言和交互模式
- **可访问性**符合WCAG 2.1 AA标准
### 关键设计令牌
**颜色系统:**
- 主色:`#0d6efd`(操作按钮、选中状态)
- 成功:`#198754`(连接成功状态)
- 危险:`#dc3545`(删除操作、错误提示)
- 深灰:`#212529`(导航栏背景)
- 浅灰:`#e9ecef`(工具栏背景)
**字体系统:**
- 字体族:系统字体栈(-apple-system, Segoe UI, Roboto等
- 正文14px行高1.5
- 标题20-32px行高1.2-1.4
- 小号文字12px文件大小、日期等
**间距系统:**
- 基础单位8px
- 标准间距16px1rem
- 组件内边距8px-16px
**组件规范:**
- 导航栏高度48px深色背景
- 工具栏浅灰背景按钮间距8px
- 文件项最小高度44px悬停效果150ms
- 按钮圆角4px过渡150ms
**交互规范:**
- 悬停效果150ms过渡
- 触摸目标最小44x44px
- 键盘导航Tab、Enter、Delete、F2、F5、Esc
- 焦点状态2px蓝色轮廓
**响应式断点:**
- 移动端:< 768px双面板垂直排列
- 平板768px - 1024px
- 桌面:> 1024px标准布局
---
## 13.1 部署说明
### 13.1.1 本地运行
**环境要求:**
- JDK 8或更高版本
- Maven 3.6+
- 8080端口未被占用
**启动步骤:**
1. **克隆或下载项目**
```bash
cd sftp-manager
```
2. **编译项目**
```bash
mvn clean install
```
3. **运行项目**
```bash
mvn spring-boot:run
```
4. **访问应用**
```
http://localhost:8080/sftp-manager
```
5. **访问H2控制台可选**
```
http://localhost:8080/sftp-manager/h2-console
JDBC URL: jdbc:h2:file:./data/sftp-manager
用户名: sa
密码: (留空)
```
### 13.1.2 打包部署
**打包命令:**
```bash
mvn clean package
```
打包完成后,在 `target` 目录下会生成 `sftp-manager-1.0.0.jar`
**运行JAR包**
```bash
java -jar target/sftp-manager-1.0.0.jar
```
**自定义端口:**
```bash
java -jar target/sftp-manager-1.0.0.jar --server.port=8081
```
**后台运行Linux**
```bash
nohup java -jar target/sftp-manager-1.0.0.jar > app.log 2>&1 &
```
**Windows服务部署可选**
使用 [WinSW](https://github.com/winsw/winsw) 将JAR包注册为Windows服务。
1. 下载WinSW.exe重命名为 `sftp-manager.exe`
2. 创建配置文件 `sftp-manager.xml`
```xml
<service>
<id>sftp-manager</id>
<name>SFTP Manager</name>
<description>SFTP文件管理系统</description>
<executable>java</executable>
<arguments>-jar "C:\path\to\sftp-manager-1.0.0.jar"</arguments>
<logpath>C:\logs\sftp-manager</logpath>
</service>
```
3. 安装服务:
```bash
sftp-manager.exe install
sftp-manager.exe start
```
### 13.1.3 Docker部署
**Dockerfile**
```dockerfile
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/sftp-manager-1.0.0.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
```
**构建镜像:**
```bash
docker build -t sftp-manager:1.0.0 .
```
**运行容器:**
```bash
docker run -d -p 8080:8080 --name sftp-manager sftp-manager:1.0.0
```
**Docker Compose推荐**
```yaml
version: '3'
services:
sftp-manager:
build: .
ports:
- "8080:8080"
volumes:
- ./data:/app/data
- ./logs:/app/logs
environment:
- SPRING_PROFILES_ACTIVE=prod
restart: always
```
启动:
```bash
docker-compose up -d
```
### 13.1.4 生产环境配置
**外部配置文件application-prod.yml**
```yaml
server:
port: 80
tomcat:
max-threads: 200
accept-count: 100
spring:
datasource:
url: jdbc:h2:file:/var/data/sftp-manager
username: ${DB_USERNAME:sa}
password: ${DB_PASSWORD:}
hikari:
maximum-pool-size: 10
minimum-idle: 5
jpa:
hibernate:
ddl-auto: update
show-sql: false
servlet:
multipart:
max-file-size: 500MB
max-request-size: 2GB
app:
sftp:
session-timeout: 60000
connection-timeout: 30000
max-retries: 5
logging:
file:
name: /var/log/sftp-manager/app.log
level:
root: INFO
com.sftp.manager: INFO
```
**启动命令:**
```bash
java -jar target/sftp-manager-1.0.0.jar --spring.profiles.active=prod
```
**环境变量配置:**
```bash
export DB_USERNAME=admin
export DB_PASSWORD=secret
export SERVER_PORT=80
java -jar target/sftp-manager-1.0.0.jar
```
## 13.2 测试指南
### 13.2.1 功能测试清单
#### 连接管理测试
- [ ] 建立SFTP连接密码认证
- [ ] 建立SFTP连接密钥认证
- [ ] 断开连接
- [ ] 保存连接配置
- [ ] 加载保存的连接
- [ ] 删除连接配置
- [ ] 同时连接多个SFTP服务器
**测试步骤:**
1. **测试密码认证**
- 点击"连接管理"
- 点击"添加连接"
- 输入连接信息(主机、端口、用户名、密码)
- 点击"保存"
- 在列表中点击"连接"
- 验证是否连接成功
2. **测试密钥认证**
- 准备SSH私钥文件
- 创建连接,填写私钥路径和私钥密码
- 测试连接
3. **测试多连接**
- 创建多个连接配置
- 分别连接到不同的SFTP服务器
- 验证同时连接多个服务器
#### 文件浏览测试
- [ ] 浏览本地文件系统
- [ ] 浏览SFTP服务器文件
- [ ] 进入子目录
- [ ] 返回上级目录
- [ ] 直接输入路径跳转
- [ ] 刷新文件列表
**测试步骤:**
1. **测试本地文件浏览**
- 切换到"本地文件"模式
- 浏览不同目录
- 进入子目录
- 点击"↑"返回上级目录
2. **测试SFTP文件浏览**
- 切换到"SFTP服务器"模式
- 连接到SFTP服务器
- 浏览远程文件
- 验证文件信息显示正确
#### 文件操作测试
- [ ] 上传单个文件到SFTP
- [ ] 批量上传文件
- [ ] 从SFTP下载文件
- [ ] 删除本地文件
- [ ] 删除SFTP文件
- [ ] 删除目录(递归)
- [ ] 批量删除
- [ ] 重命名文件
- [ ] 重命名目录
- [ ] 新建文件夹
**测试步骤:**
1. **测试上传**
- 在左面板选择本地文件
- 在右面板连接SFTP服务器
- 选择文件,点击"传输到右侧"
- 验证文件上传成功
- 测试大文件上传
2. **测试下载**
- 在左面板连接SFTP服务器
- 在右面板选择本地目录
- 选择文件,点击"传输到右侧"
- 验证文件下载成功
3. **测试删除**
- 选择单个文件,点击"删除"
- 确认删除
- 验证文件已删除
- 测试批量删除
- 测试目录删除
4. **测试重命名**
- 选择文件,点击"重命名"
- 输入新文件名
- 验证重命名成功
- 测试非法文件名
5. **测试新建文件夹**
- 点击"新建文件夹"
- 输入文件夹名称
- 验证文件夹创建成功
- 测试非法文件夹名
#### 跨面板操作测试
- [ ] 本地 → SFTP传输
- [ ] SFTP → 本地传输
- [ ] SFTP → SFTP传输
- [ ] 本地 → 本地传输
- [ ] 拖拽传输
**测试步骤:**
1. **测试本地到SFTP传输**
- 左面板:本地文件
- 右面板SFTP服务器
- 左面板选择文件
- 点击"传输到右侧"
- 验证传输成功
2. **测试SFTP到SFTP传输**
- 左面板SFTP服务器A
- 右面板SFTP服务器B
- 左面板选择文件
- 点击"传输到右侧"
- 验证文件传输成功
3. **测试拖拽传输**
- 左面板选择文件
- 拖拽到右面板
- 验证传输成功
#### 模式切换测试
- [ ] 左面板本地/SFTP切换
- [ ] 右面板本地/SFTP切换
- [ ] 双SFTP模式
- [ ] 双本地模式
- [ ] 混合模式左本地右SFTP、左SFTP右本地
**测试步骤:**
1. **测试模式切换**
- 左面板切换到SFTP模式
- 验证连接选择器显示
- 连接到SFTP服务器
- 切换回本地模式
- 验证连接选择器隐藏
2. **测试混合模式**
- 左面板:本地
- 右面板SFTP
- 测试文件传输
- 切换模式
- 左面板SFTP
- 右面板:本地
- 测试文件传输
### 13.2.2 边界条件测试
#### 大文件测试
- [ ] 上传大于100MB的文件
- [ ] 下载大于100MB的文件
- [ ] 断点续传测试
**测试步骤:**
1. 创建一个500MB的测试文件
2. 上传到SFTP服务器
3. 验证上传进度显示
4. 验证文件完整性MD5校验
#### 特殊文件名测试
- [ ] 中文文件名
- [ ] 空格文件名
- [ ] 特殊字符文件名
- [ ] 超长文件名
**测试步骤:**
1. 创建以下测试文件:
- `测试文件.txt`
- `test file.txt`
- `test@file.txt`
- `test.file.name.txt`
- `a` (256字符).txt
2. 测试上传、重命名、删除操作
#### 权限测试
- [ ] 无权限文件操作
- [ ] 只读文件上传
- [ ] 受保护目录访问
**测试步骤:**
1. 创建只读文件
2. 尝试修改文件
3. 验证错误提示
#### 异常情况测试
- [ ] 网络中断
- [ ] 服务器断开
- [ ] 连接超时
- [ ] 磁盘空间不足
**测试步骤:**
1. 在传输过程中断开网络
2. 验证错误提示
3. 恢复网络连接
4. 验证是否可以重新连接
### 13.2.3 性能测试
#### 测试指标
- 文件上传/下载速度
- 目录列表加载时间
- 同时操作多个连接的响应时间
- 内存占用
#### 测试工具
**Apache JMeter**
1. 创建测试计划
2. 添加HTTP请求采样器
3. 配置并发用户数
4. 运行测试
5. 查看结果
**Postman**
1. 创建Collection
2. 添加请求
3. 配置环境变量
4. 运行测试
5. 查看结果
**性能测试示例:**
```bash
# 使用ab工具测试并发性能
ab -n 1000 -c 100 http://localhost:8080/sftp-manager/api/connection/list
```
### 13.2.4 安全测试
#### SQL注入测试
```bash
# 测试参数注入
curl -X POST http://localhost:8080/sftp-manager/api/files/list \
-H "Content-Type: application/json" \
-d '{"sessionId":"local","path":"C:/test'; DROP TABLE connections;--"}'
```
#### XSS测试
```bash
# 测试XSS攻击
curl -X POST http://localhost:8080/sftp-manager/api/connection/save \
-H "Content-Type: application/json" \
-d '{"name":"<script>alert(1)</script>","host":"test","port":22,"username":"test"}'
```
#### 路径遍历测试
```bash
# 测试路径遍历
curl -X POST http://localhost:8080/sftp-manager/api/files/list \
-H "Content-Type: application/json" \
-d '{"sessionId":"local","path":"../../../etc/passwd"}'
```
## 13.3 常见问题排查
### 13.3.1 问题排查清单
| 问题 | 可能原因 | 解决方案 |
|------|---------|---------|
| 无法连接SFTP服务器 | 网络问题、服务器地址错误 | 检查网络、验证服务器地址和端口 |
| 文件上传失败 | 权限不足、磁盘空间不足 | 检查权限、清理磁盘空间 |
| 文件列表加载慢 | 网络延迟、文件数量多 | 增加超时时间、实现分页 |
| 连接频繁断开 | 防火墙设置、超时设置 | 调整防火墙、增加超时时间 |
| 内存占用过高 | 大文件操作、连接过多 | 增加JVM内存、限制并发数 |
### 13.3.2 日志分析
**查看应用日志:**
```bash
tail -f logs/sftp-manager.log
```
**查看错误日志:**
```bash
tail -f logs/sftp-manager-error.log
```
**搜索特定错误:**
```bash
grep "ERROR" logs/sftp-manager.log
```
### 13.3.3 性能优化
**JVM参数优化**
```bash
java -Xms512m -Xmx2g -XX:+UseG1GC -jar sftp-manager-1.0.0.jar
```
**数据库优化:**
```yaml
spring:
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 10
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
```
**文件上传优化:**
```yaml
spring:
servlet:
multipart:
max-file-size: 500MB
max-request-size: 2GB
file-size-threshold: 10MB
```
## 13.4 监控与维护
### 13.4.1 应用监控
**Actuator集成**
添加依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
```
配置:
```yaml
management:
endpoints:
web:
exposure:
include: health,info,metrics,prometheus
endpoint:
health:
show-details: always
```
访问端点:
- 健康检查http://localhost:8080/sftp-manager/actuator/health
- 应用信息http://localhost:8080/sftp-manager/actuator/info
- 性能指标http://localhost:8080/sftp-manager/actuator/metrics
### 13.4.2 定期维护任务
**日志清理:**
```bash
# 清理30天前的日志
find logs/ -name "*.log" -mtime +30 -delete
```
**数据库备份:**
```bash
# 备份H2数据库
cp data/sftp-manager.mv.db backup/sftp-manager-$(date +%Y%m%d).mv.db
```
**临时文件清理:**
```bash
# 清理临时文件
find /tmp -name "sftp-manager-*" -mtime +1 -delete
```
### 13.4.3 自动化部署脚本
**部署脚本deploy.sh**
```bash
#!/bin/bash
APP_NAME="sftp-manager"
JAR_FILE="${APP_NAME}-1.0.0.jar"
PID_FILE="${APP_NAME}.pid"
LOG_FILE="${APP_NAME}.log"
# 停止服务
stop() {
if [ -f $PID_FILE ]; then
PID=$(cat $PID_FILE)
kill $PID
rm $PID_FILE
echo "服务已停止"
fi
}
# 启动服务
start() {
nohup java -jar $JAR_FILE --spring.profiles.active=prod > $LOG_FILE 2>&1 &
echo $! > $PID_FILE
echo "服务已启动"
}
# 重启服务
restart() {
stop
sleep 2
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
```
**使用方法:**
```bash
chmod +x deploy.sh
./deploy.sh start
./deploy.sh stop
./deploy.sh restart
```
## 实施步骤
1. **本地测试**:在本地环境完成所有功能测试
2. **打包部署**:打包应用并部署到测试环境
3. **集成测试**:在测试环境进行完整的集成测试
4. **性能测试**:使用测试工具进行性能测试
5. **安全测试**:进行安全漏洞扫描
6. **生产部署**:部署到生产环境
7. **监控配置**:配置监控和告警
## 注意事项
1. **备份**:部署前做好数据备份
2. **回滚**:准备回滚方案
3. **监控**:部署后密切监控
4. **文档**:及时更新部署文档
5. **测试**:充分测试后再部署
## 附录
### A. 环境变量参考
| 环境变量 | 说明 | 默认值 |
|---------|------|--------|
| SERVER_PORT | 服务端口 | 8080 |
| DB_USERNAME | 数据库用户名 | sa |
| DB_PASSWORD | 数据库密码 | 空 |
| SPRING_PROFILES_ACTIVE | 激活的配置文件 | dev |
| LOG_LEVEL | 日志级别 | INFO |
### B. 端口占用检查
```bash
# Linux/Mac
lsof -i :8080
# Windows
netstat -ano | findstr :8080
```
### C. 常用命令
```bash
# 查看进程
ps aux | grep sftp-manager
# 杀死进程
kill -9 <PID>
# 查看日志
tail -f logs/sftp-manager.log
# 查看端口
netstat -tlnp | grep 8080
```
---
## 项目完成清单
### 核心功能
- [x] 项目初始化与基础配置
- [x] 数据模型设计
- [x] 连接管理功能
- [x] 文件浏览功能
- [x] 文件上传下载功能
- [x] 文件删除功能
- [x] 文件重命名功能
- [x] 新建文件夹功能
- [x] 双面板UI界面设计
- [x] 模式切换功能
- [x] API接口设计规范
- [x] 错误处理与日志
- [x] 部署与测试
### 技术实现
- [x] Spring Boot后端
- [x] JSch SFTP客户端
- [x] H2嵌入式数据库
- [x] Bootstrap 5前端
- [x] jQuery JavaScript库
- [x] RESTful API
- [x] 全局异常处理
- [x] 操作日志记录
- [x] Docker支持
---
**恭喜SFTP文件管理系统开发完成**