# 04g WebDAV 远程同步流程 > 状态:✅ 已实现 ## 1. 操作入口 | 方式 | 入口 | |------|------| | CLI | `certflow db-sync push/pull/status` | | 自动 | 应用启动时(`main.py::init_database_manager`)可选自动同步 | 远程同步基于坚果云 WebDAV,将本地数据库备份到云端或从云端拉取。 ## 2. 涉及配置 | 配置文件 | 关键字段 | 说明 | |----------|----------|------| | `config/sync.yaml` | WebDAV 端点/远程路径 | 同步参数 | | `.env` | `NUTSTORE_WEBDAV_USER` / `NUTSTORE_WEBDAV_TOKEN` | 认证 | ## 3. 涉及代码文件 | 层 | 文件 | 职责 | |----|------|------| | CLI | `cli/commands/db_sync.py` | 同步命令(push/pull/status) | | Main | `main.py::setup_webdav_config` | 从 .env 加载配置 | | Main | `main.py::init_database_manager` | 初始化时可选 `sync_from_webdav` | | Service | `services/db_source_adapter.py` | 数据源适配(含 WebDAV) | ## 4. 逐步流程 ### 4.1 配置 WebDAV 在 `.env` 中填写: ```bash NUTSTORE_WEBDAV_USER=your_email@example.com NUTSTORE_WEBDAV_TOKEN=your_token ``` 若未配置,start.sh 阶段0.8 会提示"WebDAV用户未配置(将跳过远程同步)"。 ### 4.2 推送(backup) ```bash certflow db-sync push ``` 将本地数据库上传到坚果云 WebDAV 远程路径。 ### 4.3 拉取(restore) ```bash certflow db-sync pull ``` 从云端下载数据库到本地(注意:会覆盖本地,建议先 `db-backup`)。 ### 4.4 查看状态 ```bash certflow db-sync status ``` 显示本地/远程数据库大小、最后同步时间。 ### 4.5 启动自动同步 `main.py` 的 `DatabaseManager.init_db(sync_from_webdav=...)` 在启动时根据配置拉取远程数据库(若配置)。 ## 5. 数据库备份(独立命令) ```bash certflow db-backup --out ./backup/certflow_20260804.db ``` 对应四库模型(A/B/C/D)中的主库 A。 ## 6. 数据库重置 ```bash certflow db-reset --force # 清空重建 certflow db-reset --baseline --force # 从基线库重建 ``` `start.sh` 阶段10 也基于此实现调试库 B 的重置。 ## 7. 常见问题 - **同步超时**:检查网络/坚果云令牌是否过期 - **跳过同步**:未配置 `NUTSTORE_WEBDAV_*` 时自动跳过 - **冲突**:push/pull 不做三方合并,先 `db-backup` 再操作