116 lines
3.0 KiB
Markdown
116 lines
3.0 KiB
Markdown
|
|
# 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. **迁移**: 如果实施服务器端存储,需要提供数据迁移方案
|
|||
|
|
|