Files
jurong_circle_black/MIGRATION-GUIDE.md

186 lines
4.3 KiB
Markdown
Raw Permalink Normal View History

2025-09-02 16:50:35 +08:00
# 文件迁移到 MinIO 指南
本指南将帮助您将现有的本地静态文件迁移到 MinIO 对象存储。
## 迁移前准备
### 1. 确保 MinIO 配置正确
确保 `.env` 文件中的 MinIO 配置正确:
```env
MINIO_ENDPOINT=your-minio-server
MINIO_PORT=9000
MINIO_ACCESS_KEY=your-access-key
MINIO_SECRET_KEY=your-secret-key
MINIO_USE_SSL=false
MINIO_PUBLIC_URL=https://minio.yourdomain.com
```
### 2. 确保存储桶已创建
确保以下存储桶在 MinIO 中已存在:
- `avatars` - 用户头像
- `products` - 产品图片
- `documents` - 文档文件
### 3. 备份数据库
**重要:在开始迁移前,请务必备份数据库!**
```bash
mysqldump -u username -p database_name > backup_before_migration.sql
```
## 执行迁移
### 1. 运行迁移脚本
```bash
cd jurong_circle_black
node migrate-to-minio.js
```
### 2. 监控迁移过程
脚本会显示详细的迁移进度:
- 扫描本地文件
- 逐个上传到 MinIO
- 更新数据库中的文件路径引用
- 生成迁移报告
## 迁移后验证
### 1. 检查迁移报告
查看生成的 `migration-report.json` 文件:
```json
{
"migrationDate": "2024-01-15T10:30:00.000Z",
"totalFiles": 150,
"successCount": 148,
"failedCount": 2,
"migratedFiles": [...],
"failedFiles": [...]
}
```
### 2. 验证文件访问
- 检查用户头像是否正常显示
- 检查产品图片是否正常显示
- 检查文档下载是否正常
### 3. 验证数据库更新
检查数据库中的文件路径是否已更新:
```sql
-- 检查用户头像路径
SELECT id, username, avatar FROM users WHERE avatar LIKE 'https://minio%' LIMIT 10;
-- 检查产品图片路径
SELECT id, name, image_url FROM products WHERE image_url LIKE 'https://minio%' LIMIT 10;
```
## 文件组织结构
迁移后,文件将按以下结构组织:
```
MinIO 存储桶/
├── avatars/
│ ├── 2024/
│ │ ├── 01/
│ │ │ ├── 15/
│ │ │ │ ├── 1640995200000_a1b2c3d4.jpg
│ │ │ │ └── 1640995300000_b2c3d4e5.png
│ │ │ └── 16/
│ │ └── 02/
│ └── 2023/
├── products/
│ ├── 2024/
│ │ ├── 01/
│ │ │ ├── 15/
│ │ │ └── 16/
│ │ └── 02/
│ └── 2023/
└── documents/
├── 2024/
└── 2023/
```
## 故障排除
### 常见问题
1. **连接 MinIO 失败**
- 检查 MinIO 服务是否运行
- 验证网络连接
- 确认访问密钥正确
2. **存储桶不存在**
- 在 MinIO 控制台创建所需的存储桶
- 确保存储桶名称与配置一致
3. **权限问题**
- 确保 MinIO 用户有读写权限
- 检查存储桶策略设置
4. **部分文件迁移失败**
- 查看迁移报告中的失败文件列表
- 检查文件是否损坏或被占用
- 手动重新上传失败的文件
### 回滚方案
如果迁移出现问题,可以通过以下步骤回滚:
1. **恢复数据库备份**
```bash
mysql -u username -p database_name < backup_before_migration.sql
```
2. **重新配置文件上传路径**
- 修改 `routes/upload.js` 使用本地存储
- 确保 `uploads` 目录存在且有正确权限
## 迁移完成后的清理
### 1. 删除本地文件(可选)
**警告:只有在确认迁移成功且系统运行正常后才执行此操作!**
```bash
# 备份 uploads 目录
mv uploads uploads_backup_$(date +%Y%m%d)
# 或者直接删除(谨慎操作)
# rm -rf uploads
```
### 2. 更新部署脚本
更新生产环境的部署脚本,移除对 `uploads` 目录的依赖。
### 3. 更新备份策略
确保备份策略包含 MinIO 数据的备份。
## 注意事项
1. **迁移时间**:根据文件数量和大小,迁移可能需要较长时间
2. **网络稳定性**:确保网络连接稳定,避免迁移中断
3. **存储空间**:确保 MinIO 有足够的存储空间
4. **并发限制**:脚本已添加延迟避免过快请求,如需调整可修改代码
5. **文件路径**:迁移后的文件路径将包含日期文件夹结构
## 技术支持
如果在迁移过程中遇到问题,请:
1. 查看控制台输出的错误信息
2. 检查 `migration-report.json` 中的详细信息
3. 确保 MinIO 服务正常运行
4. 验证网络连接和权限设置