16 KiB
16 KiB
模块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端口未被占用
启动步骤:
-
克隆或下载项目
cd sftp-manager -
编译项目
mvn clean install -
运行项目
mvn spring-boot:run -
访问应用
http://localhost:8080/sftp-manager -
访问H2控制台(可选)
http://localhost:8080/sftp-manager/h2-console JDBC URL: jdbc:h2:file:./data/sftp-manager 用户名: sa 密码: (留空)
13.1.2 打包部署
打包命令:
mvn clean package
打包完成后,在 target 目录下会生成 sftp-manager-1.0.0.jar
运行JAR包:
java -jar target/sftp-manager-1.0.0.jar
自定义端口:
java -jar target/sftp-manager-1.0.0.jar --server.port=8081
后台运行(Linux):
nohup java -jar target/sftp-manager-1.0.0.jar > app.log 2>&1 &
Windows服务部署(可选):
使用 WinSW 将JAR包注册为Windows服务。
- 下载WinSW.exe,重命名为
sftp-manager.exe - 创建配置文件
sftp-manager.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> - 安装服务:
sftp-manager.exe install sftp-manager.exe start
13.1.3 Docker部署
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"]
构建镜像:
docker build -t sftp-manager:1.0.0 .
运行容器:
docker run -d -p 8080:8080 --name sftp-manager sftp-manager:1.0.0
Docker Compose(推荐):
version: '3'
services:
sftp-manager:
build: .
ports:
- "8080:8080"
volumes:
- ./data:/app/data
- ./logs:/app/logs
environment:
- SPRING_PROFILES_ACTIVE=prod
restart: always
启动:
docker-compose up -d
13.1.4 生产环境配置
外部配置文件(application-prod.yml):
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
启动命令:
java -jar target/sftp-manager-1.0.0.jar --spring.profiles.active=prod
环境变量配置:
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服务器
测试步骤:
-
测试密码认证
- 点击"连接管理"
- 点击"添加连接"
- 输入连接信息(主机、端口、用户名、密码)
- 点击"保存"
- 在列表中点击"连接"
- 验证是否连接成功
-
测试密钥认证
- 准备SSH私钥文件
- 创建连接,填写私钥路径和私钥密码
- 测试连接
-
测试多连接
- 创建多个连接配置
- 分别连接到不同的SFTP服务器
- 验证同时连接多个服务器
文件浏览测试
- 浏览本地文件系统
- 浏览SFTP服务器文件
- 进入子目录
- 返回上级目录
- 直接输入路径跳转
- 刷新文件列表
测试步骤:
-
测试本地文件浏览
- 切换到"本地文件"模式
- 浏览不同目录
- 进入子目录
- 点击"↑"返回上级目录
-
测试SFTP文件浏览
- 切换到"SFTP服务器"模式
- 连接到SFTP服务器
- 浏览远程文件
- 验证文件信息显示正确
文件操作测试
- 上传单个文件到SFTP
- 批量上传文件
- 从SFTP下载文件
- 删除本地文件
- 删除SFTP文件
- 删除目录(递归)
- 批量删除
- 重命名文件
- 重命名目录
- 新建文件夹
测试步骤:
-
测试上传
- 在左面板选择本地文件
- 在右面板连接SFTP服务器
- 选择文件,点击"传输到右侧"
- 验证文件上传成功
- 测试大文件上传
-
测试下载
- 在左面板连接SFTP服务器
- 在右面板选择本地目录
- 选择文件,点击"传输到右侧"
- 验证文件下载成功
-
测试删除
- 选择单个文件,点击"删除"
- 确认删除
- 验证文件已删除
- 测试批量删除
- 测试目录删除
-
测试重命名
- 选择文件,点击"重命名"
- 输入新文件名
- 验证重命名成功
- 测试非法文件名
-
测试新建文件夹
- 点击"新建文件夹"
- 输入文件夹名称
- 验证文件夹创建成功
- 测试非法文件夹名
跨面板操作测试
- 本地 → SFTP传输
- SFTP → 本地传输
- SFTP → SFTP传输
- 本地 → 本地传输
- 拖拽传输
测试步骤:
-
测试本地到SFTP传输
- 左面板:本地文件
- 右面板:SFTP服务器
- 左面板选择文件
- 点击"传输到右侧"
- 验证传输成功
-
测试SFTP到SFTP传输
- 左面板:SFTP服务器A
- 右面板:SFTP服务器B
- 左面板选择文件
- 点击"传输到右侧"
- 验证文件传输成功
-
测试拖拽传输
- 左面板选择文件
- 拖拽到右面板
- 验证传输成功
模式切换测试
- 左面板本地/SFTP切换
- 右面板本地/SFTP切换
- 双SFTP模式
- 双本地模式
- 混合模式(左本地右SFTP、左SFTP右本地)
测试步骤:
-
测试模式切换
- 左面板切换到SFTP模式
- 验证连接选择器显示
- 连接到SFTP服务器
- 切换回本地模式
- 验证连接选择器隐藏
-
测试混合模式
- 左面板:本地
- 右面板:SFTP
- 测试文件传输
- 切换模式
- 左面板:SFTP
- 右面板:本地
- 测试文件传输
13.2.2 边界条件测试
大文件测试
- 上传大于100MB的文件
- 下载大于100MB的文件
- 断点续传测试
测试步骤:
- 创建一个500MB的测试文件
- 上传到SFTP服务器
- 验证上传进度显示
- 验证文件完整性(MD5校验)
特殊文件名测试
- 中文文件名
- 空格文件名
- 特殊字符文件名
- 超长文件名
测试步骤:
-
创建以下测试文件:
测试文件.txttest file.txttest@file.txttest.file.name.txta(256字符).txt
-
测试上传、重命名、删除操作
权限测试
- 无权限文件操作
- 只读文件上传
- 受保护目录访问
测试步骤:
- 创建只读文件
- 尝试修改文件
- 验证错误提示
异常情况测试
- 网络中断
- 服务器断开
- 连接超时
- 磁盘空间不足
测试步骤:
- 在传输过程中断开网络
- 验证错误提示
- 恢复网络连接
- 验证是否可以重新连接
13.2.3 性能测试
测试指标
- 文件上传/下载速度
- 目录列表加载时间
- 同时操作多个连接的响应时间
- 内存占用
测试工具
Apache JMeter:
- 创建测试计划
- 添加HTTP请求采样器
- 配置并发用户数
- 运行测试
- 查看结果
Postman:
- 创建Collection
- 添加请求
- 配置环境变量
- 运行测试
- 查看结果
性能测试示例:
# 使用ab工具测试并发性能
ab -n 1000 -c 100 http://localhost:8080/sftp-manager/api/connection/list
13.2.4 安全测试
SQL注入测试
# 测试参数注入
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测试
# 测试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"}'
路径遍历测试
# 测试路径遍历
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 日志分析
查看应用日志:
tail -f logs/sftp-manager.log
查看错误日志:
tail -f logs/sftp-manager-error.log
搜索特定错误:
grep "ERROR" logs/sftp-manager.log
13.3.3 性能优化
JVM参数优化:
java -Xms512m -Xmx2g -XX:+UseG1GC -jar sftp-manager-1.0.0.jar
数据库优化:
spring:
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 10
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
文件上传优化:
spring:
servlet:
multipart:
max-file-size: 500MB
max-request-size: 2GB
file-size-threshold: 10MB
13.4 监控与维护
13.4.1 应用监控
Actuator集成:
添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
配置:
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 定期维护任务
日志清理:
# 清理30天前的日志
find logs/ -name "*.log" -mtime +30 -delete
数据库备份:
# 备份H2数据库
cp data/sftp-manager.mv.db backup/sftp-manager-$(date +%Y%m%d).mv.db
临时文件清理:
# 清理临时文件
find /tmp -name "sftp-manager-*" -mtime +1 -delete
13.4.3 自动化部署脚本
部署脚本(deploy.sh):
#!/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
使用方法:
chmod +x deploy.sh
./deploy.sh start
./deploy.sh stop
./deploy.sh restart
实施步骤
-
本地测试:在本地环境完成所有功能测试
-
打包部署:打包应用并部署到测试环境
-
集成测试:在测试环境进行完整的集成测试
-
性能测试:使用测试工具进行性能测试
-
安全测试:进行安全漏洞扫描
-
生产部署:部署到生产环境
-
监控配置:配置监控和告警
注意事项
- 备份:部署前做好数据备份
- 回滚:准备回滚方案
- 监控:部署后密切监控
- 文档:及时更新部署文档
- 测试:充分测试后再部署
附录
A. 环境变量参考
| 环境变量 | 说明 | 默认值 |
|---|---|---|
| SERVER_PORT | 服务端口 | 8080 |
| DB_USERNAME | 数据库用户名 | sa |
| DB_PASSWORD | 数据库密码 | 空 |
| SPRING_PROFILES_ACTIVE | 激活的配置文件 | dev |
| LOG_LEVEL | 日志级别 | INFO |
B. 端口占用检查
# Linux/Mac
lsof -i :8080
# Windows
netstat -ano | findstr :8080
C. 常用命令
# 查看进程
ps aux | grep sftp-manager
# 杀死进程
kill -9 <PID>
# 查看日志
tail -f logs/sftp-manager.log
# 查看端口
netstat -tlnp | grep 8080
项目完成清单
核心功能
- 项目初始化与基础配置
- 数据模型设计
- 连接管理功能
- 文件浏览功能
- 文件上传下载功能
- 文件删除功能
- 文件重命名功能
- 新建文件夹功能
- 双面板UI界面设计
- 模式切换功能
- API接口设计规范
- 错误处理与日志
- 部署与测试
技术实现
- Spring Boot后端
- JSch SFTP客户端
- H2嵌入式数据库
- Bootstrap 5前端
- jQuery JavaScript库
- RESTful API
- 全局异常处理
- 操作日志记录
- Docker支持
恭喜!SFTP文件管理系统开发完成!