跳过主要内容
D

dsh-cloud-sync

dickpy/dsh-cloud-sync

通过 WebDAV 和兼容 S3 的存储同步 DSH profile 与本地插件源码归档,支持加密快照、冲突感知恢复和显式自更新。

安装

dsh plugin --profile web add github:dickpy/dsh-cloud-sync

README

DSH Cloud Sync

DSH Cloud Sync 云同步控制台

把 DSH 的配置、插件和本地源码,安全地带到每一台设备。

Release License: MIT Node Downloads

@dickpy/dsh-cloud-sync · WebDAV / Amazon S3 / OSS / COS / MinIO / GitHub Gist · 快照历史 · 冲突恢复 · GitHub 自更新

English · 变更日志 · GitHub Releases · 问题反馈


它解决了什么问题?

DSH Cloud Sync 的重点不是绑定某一种存储服务,而是让插件环境可以随时随地同步:在办公室、家里或新电脑上,都能用自己顺手的云服务保存配置和插件信息,再快速恢复出一致的 DSH 环境。

它把这件事变成一个清晰的流程:选择任意支持的云服务,上传可重建的配置和源码归档,把依赖安装交给 DSH / pnpm,在目标设备上恢复出一致的插件环境。

  • 不复制会话、附件、node_modules、pnpm 缓存或明文凭据。
  • 不绑定某一种云服务:WebDAV、Amazon S3、阿里云 OSS、腾讯云 COS、MinIO 和 GitHub Gist 都可以使用。
  • 不把更新放在私有 WebDAV:插件本身通过公开 GitHub Releases 检查和安装更新。

实际效果

设置页提供三个清晰的工作区:云服务、配置与历史、同步状态。下面是当前版本的实际界面:

云服务:选择 WebDAV、S3、OSS、COS 或 MinIO 配置与历史:选择同步策略并恢复快照 同步状态:查看远端快照和插件安装状态

核心能力

能力你得到的结果
多云同步渠道WebDAV、Amazon S3、阿里云 OSS、腾讯云 COS、MinIO、GitHub Gist;同一时间只启用一个渠道,切换服务不需要改代码
GitHub 授权连接复制设备授权码并打开 GitHub 确认,无需手动创建 Gist;也可绑定已有的空 Gist
轻量可重建快照同步 package.json、lockfile、workspace、patch 和市场热更新 YAML,而不是打包整个运行环境
本地源码归档自动发现可达的 file: / link: 插件源码,归档后换盘符、换电脑也能恢复
三种同步策略智能合并、云端优先、本地优先;两端同时修改同一项时先展示差异再执行
历史与恢复每次成功同步留下快照,支持预览、恢复远端版本和回滚到指定历史版本
插件安装状态对比远端快照与本机 Web Profile,直接安装或卸载缺失插件
GitHub 自更新从 GitHub Releases 检查更新,下载 .tgz 后校验 SHA-256,再由用户确认安装
兼容加密和自动同步保留已有 AES-256-GCM、设备名和定时同步配置;界面只保留更容易理解的核心操作

工作方式

下面这张图展示了双向同步的完整链路:两台设备围绕云端快照仓库同步,保留历史、支持回滚,并可按智能合并、云端优先或本地优先执行。

双向云同步工作原理:两台设备、云端快照、历史恢复和插件更新

目标设备只需要相同的同步渠道和 DSH profile。恢复会先备份当前 profile,再写入快照;依赖安装等到完全重启 DSH 后执行,避免覆盖正在运行的 bundle。

快速开始

按推荐顺序,任选一种方式安装;无论哪种方式,安装完成后都需要完全退出并重启 DSH Web,然后在 设置 → 云同步 中开始配置。

方式一:让 AI 助手帮你安装(最省事)

把下面这段话发给 DSH 或 Codex,让它执行安装并重启 DSH Web:

请帮我安装 DSH Cloud Sync 插件(npm 包 @dickpy/dsh-cloud-sync),然后重启 DSH Web。

方式二:通过 npm 安装(推荐)

dsh plugin --profile web add @dickpy/dsh-cloud-sync

方式三:通过聚合包(.tgz)安装

GitHub Releases 下载最新的 dickpy-dsh-cloud-sync-*.tgz,然后执行:

dsh plugin --profile web add .\dickpy-dsh-cloud-sync-0.20.6.tgz

适合无法直接访问 npm registry 的内网或离线环境。

方式四:自己开发启动

git clone https://github.com/dickpy/dsh-cloud-sync.git
cd dsh-cloud-sync
npm install
npm run check
dsh plugin --profile web add .

适合需要修改插件源码、调试或贡献代码的场景。

第一次同步

  1. 打开 云服务,选择 WebDAV、S3、OSS、COS、MinIO 或 GitHub Gist。Gist 可通过授权码连接,授权完成后会自动创建 secret Gist。
  2. 进入 配置与历史,选择同步策略并点击 开始同步
  3. 需要手动补充本地插件源码时,在同一页填写源码目录并点击 备份源码
  4. 换到新设备后,在 同步状态 查看插件安装情况;可先预览远端快照,再应用恢复。

同一时间只有一个同步渠道处于启用状态。连接并启用新的渠道时,旧渠道会自动停用。

每种云服务会分别保存自己的 Endpoint、Region、Bucket、对象前缀和 Access Key ID。切换回已保存的渠道时,表单会自动填充这些信息;如果该渠道的密钥已保存在本机,密钥框留空即可直接复用,不需要再次输入。

GitHub Gist

GitHub Gist 很适合不涉及本地插件源码归档的配置同步:profile 配置、插件依赖、锁文件、市场 YAML、历史快照都很轻量,使用一个 secret Gist 即可完成多设备恢复。

  • 在设置中选择 GitHub Gist,复制显示的授权码并在打开的 GitHub 页面确认授权;插件会自动创建一个受管 secret Gist。
  • Gist API 的单个同步对象限制为约 700 KiB,受管 Gist 最多 200 个文件。超过限制时同步会明确失败,不会截断数据。
  • 连接 Gist 后会自动切换为“仅配置同步”,本地插件源码不会上传。需要同步源码时请使用 WebDAV、S3、OSS、COS 或 MinIO。
  • secret Gist 并不等同于端到端私密存储,持有链接的人可读取内容;建议启用本插件的客户端 AES-256-GCM 加密。

GitHub 授权码连接会使用本项目的 OAuth App,只请求 gist 权限;当授权服务暂不可用时,界面会自动提供拥有 gist 权限的 GitHub Token 作为备用连接方式。

WebDAV 目标目录不存在时,保存连接或首次同步会自动创建该目录;嵌套目录以及包含空格或非 ASCII 字符的目录也无需手动预先创建。

支持的同步渠道

渠道适合场景配置要点
WebDAV坚果云、Nextcloud、NAS 等填写 DAV 地址、用户名和应用密码
Amazon S3AWS 或兼容 S3 的对象存储Endpoint、Region、Bucket、Access Key
阿里云 OSS阿里云对象存储使用 OSS 的 S3 兼容 Endpoint
腾讯云 COS腾讯云对象存储Bucket 通常包含 APPID,填写对应 Region
MinIO自建对象存储、内网或本地开发填写 MinIO Endpoint、Bucket 和密钥

公共网络上的存储服务建议使用 HTTPS。MinIO 在本机或可信内网中可以使用 HTTP。

同步策略

策略行为
智能合并(默认)合并两端的插件依赖、Bundle 和源码归档;发现同一项目被两端修改时,先让你确认
云端优先使用远端快照覆盖当前 profile,适合新设备恢复
本地优先使用当前 profile 覆盖远端快照,适合把本机状态作为最新版本

安全边界

  • 快照、历史和源码归档可使用 AES-256-GCM 客户端加密;每个对象使用新的 KDF salt。
  • 密码和派生密钥不会写入明文设置文件;Windows 使用当前用户 DPAPI 保护已保存凭据。
  • 恢复前自动备份当前 profile,源码归档恢复会做 SHA-256 校验并拒绝路径穿越。
  • 加密保护的是远端内容,不替代对象存储本身的权限控制;请为 Bucket、Endpoint 和 MinIO 管理员账号配置最小权限。

GitHub 自更新

打开云同步设置页时,插件会直接检查 GitHub Releases,不依赖任何 WebDAV 或对象存储配置。发现新版本后:

  1. 用户点击 更新
  2. 插件下载对应的 .tgz 到本机 release 缓存;
  3. 使用 GitHub 提供的 SHA-256 资产摘要校验;
  4. 用户确认后安装到 web profile,重启 DSH 完成切换。

更新始终是显式操作,不会在同步时静默替换正在运行的 Cloud Sync。

开发与测试

环境要求:Node.js 18 或更高版本、pnpm。

npm install
npm run check
npm test
npm pack

项目结构:

lib/index.js       bundle 入口和本地 API 路由
lib/core.js        存储渠道、快照、加密和插件生命周期
lib/client.js      设置页 UI
test/core.test.mjs 核心流程集成测试
docs/screenshots/  README 界面截图

发布

  1. 更新 package.json 版本号并添加 CHANGELOG.md 条目;
  2. 执行 npm run checknpm test
  3. 执行 npm pack 生成 .tgz
  4. 创建同版本的 GitHub Release 并上传 .tgz
  5. 其他设备会在设置页检测到更新,并由用户显式安装。

常见问题

没有 WebDAV,也能检查插件更新吗?

可以。插件更新来自 GitHub Releases,与同步渠道完全独立;WebDAV、S3、OSS、COS、MinIO 只负责你的配置快照和源码归档。

会不会复制整个 node_modules

不会。同步的是可重建的 profile 文件和必要的本地插件源码,依赖由目标设备上的 DSH / pnpm 重新安装。

为什么恢复后要重启 DSH?

恢复会修改 profile 配置。重启可以让 pnpm 和 DSH 从新的 profile 重新建立依赖,避免在运行中的 bundle 上热替换。

如何排除不想同步的文件?

在 DSH 同步目录创建 .dshsyncignore,每行填写一个要排除的文件或目录名。

许可证

MIT © 2025 dickpy

相关插件