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

5.2 KiB
Raw Permalink Blame History

Winupdate Neo 部署指南

系统架构

本项目使用以下技术栈:

  • 前端: Next.js 15 (TypeScript)
  • 数据库: PostgreSQL + Prisma ORM
  • 对象存储: MinIO (自建 S3 兼容存储)
  • 包管理: Bun
  • 运行时: Node.js

部署步骤

1. 环境准备

1.1 安装 Bun

curl -fsSL https://bun.sh/install | bash
# 或在 Windows 上:
powershell -c "irm bun.sh/install.ps1 | iex"

1.2 安装 PostgreSQL

确保 PostgreSQL 服务正在运行,并创建数据库。

1.3 部署 MinIO

# 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 克隆项目

git clone <repository-url>
cd winupdate-neo

2.2 安装依赖

bun install

2.3 配置环境变量

复制并编辑 .env 文件:

# 数据库配置
DATABASE_URL="postgresql://username:password@localhost:5432/winupdate_neo?schema=public"

# 认证配置
AUTH_USERNAME=admin
AUTH_PASSWORD=password

# 服务端口
PORT=3000

# MinIO 配置(在代码中硬编码,生产环境建议移到环境变量)

2.4 初始化数据库

# 生成 Prisma 客户端
bun run db:generate

# 运行数据库迁移
bun run db:migrate

3. 测试部署

3.1 测试 MinIO 连接

bun run test-minio.ts

应该看到:

🎉 MinIO 测试完全成功!可以开始使用了。

3.2 测试文件操作

bun run test-file-operations.ts

应该看到完整的文件上传、下载、删除测试成功。

3.3 启动开发服务器

bun run dev

访问 http://localhost:3000/api-test 查看 API 状态。

4. 生产部署

4.1 构建项目

bun run build

4.2 启动生产服务器

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 操作日志
  • 应用程序日志
  • 数据库查询日志

存储监控

# 查看存储统计
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
    • 配置防火墙
    • 启用访问日志