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