winupdate-neo/DEPLOYMENT.md
2025-06-28 15:16:06 +08:00

248 lines
5.2 KiB
Markdown
Raw 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.

# Winupdate Neo 部署指南
## 系统架构
本项目使用以下技术栈:
- **前端**: Next.js 15 (TypeScript)
- **数据库**: PostgreSQL + Prisma ORM
- **对象存储**: MinIO (自建 S3 兼容存储)
- **包管理**: Bun
- **运行时**: Node.js
## 部署步骤
### 1. 环境准备
#### 1.1 安装 Bun
```bash
curl -fsSL https://bun.sh/install | bash
# 或在 Windows 上:
powershell -c "irm bun.sh/install.ps1 | iex"
```
#### 1.2 安装 PostgreSQL
确保 PostgreSQL 服务正在运行,并创建数据库。
#### 1.3 部署 MinIO
```bash
# Docker 方式部署 MinIO
docker run -p 9000:9000 -p 9001:9001 \
-v /data/minio:/data \
-e "MINIO_ROOT_USER=feie9454" \
-e "MINIO_ROOT_PASSWORD=zjh94544549ok" \
minio/minio server /data --console-address ":9001"
```
访问 http://192.168.5.13:9001 进入 MinIO 控制台,创建名为 "winupdate" 的 bucket。
### 2. 项目配置
#### 2.1 克隆项目
```bash
git clone <repository-url>
cd winupdate-neo
```
#### 2.2 安装依赖
```bash
bun install
```
#### 2.3 配置环境变量
复制并编辑 `.env` 文件:
```env
# 数据库配置
DATABASE_URL="postgresql://username:password@localhost:5432/winupdate_neo?schema=public"
# 认证配置
AUTH_USERNAME=admin
AUTH_PASSWORD=password
# 服务端口
PORT=3000
# MinIO 配置(在代码中硬编码,生产环境建议移到环境变量)
```
#### 2.4 初始化数据库
```bash
# 生成 Prisma 客户端
bun run db:generate
# 运行数据库迁移
bun run db:migrate
```
### 3. 测试部署
#### 3.1 测试 MinIO 连接
```bash
bun run test-minio.ts
```
应该看到:
```
🎉 MinIO 测试完全成功!可以开始使用了。
```
#### 3.2 测试文件操作
```bash
bun run test-file-operations.ts
```
应该看到完整的文件上传、下载、删除测试成功。
#### 3.3 启动开发服务器
```bash
bun run dev
```
访问 http://localhost:3000/api-test 查看 API 状态。
### 4. 生产部署
#### 4.1 构建项目
```bash
bun run build
```
#### 4.2 启动生产服务器
```bash
bun run start
```
## 存储架构说明
### MinIO 对象存储结构
```
winupdate bucket/
├── screenshots/ # 截图文件
│ ├── 2025/
│ │ ├── 01/
│ │ │ ├── hostname1/
│ │ │ │ ├── uuid1.webp
│ │ │ │ └── uuid2.webp
│ │ │ └── hostname2/
│ │ └── 02/
│ └── 2024/
├── versions/ # 版本文件
│ ├── 2025/
│ │ ├── 06/
│ │ │ ├── uuid1.exe
│ │ │ └── uuid2.exe
│ │ └── 07/
│ └── 2024/
└── files/ # 其他文件
└── ...
```
### 性能优化特性
1. **分层目录结构**: 按时间和主机名分层,避免单目录文件过多
2. **数据库索引**: objectName 字段建立索引,快速查找
3. **元数据存储**: 文件元数据存储在 MinIO 中,避免额外数据库查询
4. **缓存友好**: 静态文件设置长期缓存
5. **并发支持**: MinIO 原生支持高并发读写
### 扩展能力
1. **水平扩展**: MinIO 支持分布式部署
2. **存储容量**: 理论上无限制,实际受硬件限制
3. **备份恢复**: 支持 S3 兼容的备份工具
4. **监控告警**: 可集成 Prometheus + Grafana
## API 接口说明
### 文件上传流程
1. 客户端上传文件到 `/api/hosts/{hostname}/screenshots`
2. 服务器将文件存储到 MinIO生成 objectName
3. 在数据库中保存文件元数据,包含 objectName
4. 返回成功响应
### 文件下载流程
1. 客户端请求 `/api/screenshots/{fileId}`
2. 服务器根据 fileId 从数据库查找 objectName
3. 从 MinIO 下载文件
4. 返回文件数据
## 监控和维护
### 日志监控
- MinIO 操作日志
- 应用程序日志
- 数据库查询日志
### 存储监控
```bash
# 查看存储统计
curl http://localhost:3000/api/storage/stats
```
### 清理策略
- 定期清理过期截图(可配置保留时间)
- 监控存储空间使用情况
- 设置存储告警阈值
## 故障排除
### 常见问题
1. **MinIO 连接失败**
- 检查 MinIO 服务状态
- 确认网络连通性
- 验证认证信息
2. **数据库连接失败**
- 检查 PostgreSQL 服务状态
- 确认连接字符串正确
- 检查用户权限
3. **文件上传失败**
- 检查磁盘空间
- 确认 MinIO bucket 存在
- 查看 MinIO 日志
4. **性能问题**
- 监控数据库查询性能
- 检查 MinIO 服务器负载
- 优化数据库索引
### 性能调优建议
1. **数据库优化**
- 定期更新统计信息
- 监控慢查询
- 适当增加连接池大小
2. **MinIO 优化**
- 使用 SSD 存储
- 配置适当的并发数
- 启用压缩(如果需要)
3. **应用优化**
- 启用文件缓存
- 使用 CDN如果有公网访问需求
- 实现文件预签名 URL减少服务器负载
## 安全建议
1. **访问控制**
- 使用强密码
- 定期轮换认证信息
- 限制网络访问范围
2. **数据安全**
- 启用数据加密
- 定期备份数据
- 监控异常访问
3. **网络安全**
- 使用 HTTPS
- 配置防火墙
- 启用访问日志