# 模块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 - 标准间距:16px(1rem) - 组件内边距: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 sftp-manager SFTP Manager SFTP文件管理系统 java -jar "C:\path\to\sftp-manager-1.0.0.jar" C:\logs\sftp-manager ``` 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":"","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 org.springframework.boot spring-boot-starter-actuator ``` 配置: ```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 # 查看日志 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文件管理系统开发完成!**