修复网址数据服务器持久化存储

This commit is contained in:
rjb
2025-12-23 11:09:02 +08:00
parent e5a9b31a6c
commit cd8b30e0d4
15 changed files with 1755 additions and 20 deletions

View File

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