feat: 添加性能和安全测试,完善部署文档

阶段五:性能和安全测试
- 创建负载测试脚本:模拟正常用户访问模式
- 创建压力测试脚本:测试系统极限性能
- 创建SQL注入测试脚本:验证SQL注入防护
- 创建XSS防护测试脚本:验证XSS防护
- 添加测试脚本到package.json

阶段六:文档和培训
- 更新README.md:添加监控和告警文档
- 添加性能测试文档和命令
- 添加安全测试文档和命令
- 添加Docker部署文档
- 添加生产环境配置文档
- 添加备份和恢复文档
This commit is contained in:
张翔
2026-03-09 11:12:26 +08:00
parent 4897c6e11c
commit 261c45b4d9
7 changed files with 603 additions and 2 deletions
+286 -2
View File
@@ -311,10 +311,294 @@ npm run test
## CI/CD
项目使用 Woodpecker CI 进行持续集成,配置文件为 `.woodpecker.yml`
项目使用 Woodpecker CI 进行持续集成,配置文件为 `.woodpecker/` 目录
CI 流水线包括:
- E2E 测试(全量、冒烟、回归、性能、响应式、视觉)
- **CI 工作流** (`.woodpecker/ci.yml`) - 代码检查、测试、构建
- **部署工作流** (`.woodpecker/deploy.yml`) - 生产环境部署
- **质量门禁** (`.woodpecker/quality-gate.yml`) - 代码质量检查
### CI 触发条件
- 分支:`main``develop`
- 事件:`push``pull_request`
### 质量门禁标准
- ESLint 检查通过
- TypeScript 类型检查通过
- 单元测试覆盖率 ≥ 70%
- E2E 测试通过率 ≥ 95%
## 监控和告警
### Sentry 错误监控
项目集成了 Sentry 错误监控,用于追踪生产环境中的错误。
**配置环境变量:**
```env
NEXT_PUBLIC_SENTRY_DSN=https://xxx@xxx.ingest.sentry.io/xxx
```
**监控内容:**
- JavaScript 错误
- API 错误
- 性能追踪
- 用户会话回放
### 健康检查
健康检查 API`GET /api/health`
**返回信息:**
- 应用状态
- 运行时间
- 内存使用
- 数据库连接状态
- 请求统计
### 性能监控
项目内置性能监控工具,记录关键指标:
- 响应时间(平均值、P50、P95、P99)
- 请求计数
- 内存使用率
**查看性能数据:**
```bash
curl http://localhost:3000/api/health
```
## 备份和恢复
### 备份
使用备份脚本定期备份数据:
```bash
./scripts/backup.sh
```
**备份内容包括:**
- SQLite 数据库文件
- 上传文件
- 环境配置
**备份文件位置:** `./backups/backup_YYYYMMDD_HHMMSS.tar.gz`
**自动清理:** 保留最近 7 天的备份
### 恢复
使用恢复脚本从备份中恢复数据:
```bash
./scripts/restore.sh <backup_file.tar.gz>
```
**注意事项:**
- 恢复操作会覆盖当前数据
- 恢复后需要重启应用
- 建议在恢复前先备份当前数据
## 性能测试
项目使用 k6 进行性能测试。
### 负载测试
模拟正常用户访问模式,测试系统在预期负载下的表现。
```bash
npm run test:performance
```
**测试场景:**
- 逐步增加用户数(100 → 200)
- 访问主要页面
- 提交联系表单
**性能指标:**
- P95 响应时间 < 500ms
- P99 响应时间 < 1000ms
- 错误率 < 1%
### 压力测试
测试系统在极端负载下的表现和极限。
```bash
npm run test:stress
```
**测试场景:**
- 快速增加用户数(50 → 300
- 持续高负载
- 快速下降
**性能指标:**
- P95 响应时间 < 1000ms
- P99 响应时间 < 2000ms
- 错误率 < 5%
**测试报告:** `tests/performance/load-test-summary.json`
## 安全测试
项目使用 k6 进行安全测试。
### SQL 注入测试
测试系统对 SQL 注入攻击的防护能力。
```bash
npm run test:sql-injection
```
**测试内容:**
- 常见 SQL 注入 payload
- UNION 查询注入
- 盲注攻击
- 时间注入
**防护措施:**
- 使用参数化查询(Drizzle ORM
- 输入验证和过滤
- 错误信息脱敏
### XSS 防护测试
测试系统对跨站脚本攻击的防护能力。
```bash
npm run test:xss
```
**测试内容:**
- Script 标签注入
- 事件处理器注入
- JavaScript 伪协议
- 外部资源引用
**防护措施:**
- 输入转义(DOMPurify
- CSP 策略
- HTTPOnly Cookie
### 完整安全测试
运行所有安全测试:
```bash
npm run test:security
```
## Docker 部署
项目提供 Docker 部署方案。
### 构建镜像
```bash
docker build -t novalon-website .
```
### 使用 Docker Compose
```bash
cp .env.production.example .env.production
docker-compose -f docker-compose.prod.yml up -d
```
### 健康检查
Docker 容器配置了健康检查:
```yaml
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/api/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
```
## 生产环境配置
### 环境变量
生产环境需要配置以下变量:
```env
# 数据库
DATABASE_URL=file:./data/prod.db
# NextAuth
NEXTAUTH_URL=https://novalon.cn
NEXTAUTH_SECRET=your-production-secret-here
# 管理员
ADMIN_EMAIL=admin@novalon.cn
ADMIN_PASSWORD=your-secure-password
# Sentry
NEXT_PUBLIC_SENTRY_DSN=https://xxx@xxx.ingest.sentry.io/xxx
# 邮件服务
RESEND_API_KEY=your_resend_api_key
COMPANY_EMAIL=contact@novalon.cn
# 文件上传
UPLOAD_DIR=./uploads
MAX_FILE_SIZE=10485760
# 站点 URL
NEXT_PUBLIC_SITE_URL=https://novalon.cn
```
### 部署流程
1. **准备环境**
```bash
cp .env.production.example .env.production
# 编辑 .env.production 配置生产环境变量
```
2. **构建应用**
```bash
npm run build
```
3. **初始化数据库**
```bash
npm run db:push
npm run db:seed
```
4. **启动服务**
```bash
npm start
# 或使用 Docker
docker-compose -f docker-compose.prod.yml up -d
```
5. **验证部署**
```bash
curl http://localhost:3000/api/health
```
6. **配置监控**
- 在 Sentry 创建项目并配置 DSN
- 配置告警规则
7. **设置定时备份**
```bash
# 添加到 crontab
0 2 * * * /path/to/scripts/backup.sh
```
## 文档