Files
workdizhi/数据持久化问题分析.md

116 lines
3.0 KiB
Markdown
Raw Permalink 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.
# Workdizhi 数据持久化问题分析
## 🔍 问题诊断
### 当前状态
1. **数据存储方式**: 浏览器的 `localStorage`
2. **Docker 配置**: 没有数据卷挂载
3. **问题表现**: 在新电脑打开后,添加的网址都消失了
### 根本原因
- `localStorage` 是浏览器本地存储,存储在用户的浏览器中
- 数据没有保存到服务器文件系统
- 容器中没有数据持久化配置
- 换电脑或清除浏览器数据时,数据会丢失
## ✅ 当前已有的功能
项目已经实现了导出/导入功能:
- ✅ 导出按钮:可以将数据导出为 JSON 文件
- ✅ 导入按钮:可以从 JSON 文件导入数据
- ✅ 快捷键Ctrl+S 快速导出
## 🔧 解决方案
### 方案 1: 使用导出/导入功能(临时方案)
**优点**
- 无需修改代码
- 立即可用
- 用户可以手动备份
**使用方法**
1. 定期点击"导出"按钮,保存 JSON 文件
2. 在新电脑上,点击"导入"按钮,选择之前导出的 JSON 文件
3. 数据即可恢复
**缺点**
- 需要手动操作
- 容易忘记备份
### 方案 2: 添加服务器端存储(推荐)
需要修改代码,添加后端 API 来保存数据到服务器文件系统。
#### 实施步骤
1. **创建简单的后端服务**Node.js + Express
2. **修改前端代码**,使用 API 保存和加载数据
3. **添加数据卷挂载**到 docker-compose.yml
4. **重新构建和部署**
详细方案请参考:`workdizhi数据持久化修复方案.md`
### 方案 3: 使用浏览器同步(如果支持)
如果浏览器支持同步功能(如 Chrome 同步),可以:
- 启用浏览器同步
- localStorage 数据会同步到云端
- 在新电脑登录同一账号即可恢复
**缺点**
- 依赖浏览器服务
- 可能不适用于所有浏览器
## 📋 当前 Docker 配置
```yaml
version: '3.8'
services:
web:
build: .
container_name: workdizhi-web
ports:
- "3006:80"
restart: unless-stopped
networks:
- workdizhi-network
# ❌ 缺少 volumes 配置
```
## 🔨 快速修复建议
### 立即行动
1. **使用导出功能备份当前数据**
- 打开网站http://101.43.95.130:3006
- 点击"导出"按钮
- 保存 JSON 文件到安全位置
2. **在新电脑上导入数据**
- 打开网站
- 点击"导入"按钮
- 选择之前导出的 JSON 文件
### 长期方案
实施方案 2添加服务器端存储实现真正的数据持久化。
## 📊 数据位置对比
| 存储方式 | 当前 | 修复后 |
|---------|------|--------|
| **浏览器 localStorage** | ✅ 使用中 | ⚠️ 降级使用API 失败时) |
| **服务器文件** | ❌ 无 | ✅ `/home/renjianbo/devops/workdizhi/workdizhi/data/urls.json` |
| **Docker 卷** | ❌ 无 | ✅ 挂载到容器 |
## ⚠️ 注意事项
1. **立即备份**: 在修改前,先导出当前所有数据
2. **测试**: 修改后充分测试数据保存和加载
3. **迁移**: 如果实施服务器端存储,需要提供数据迁移方案