>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
TypeScript

如何在单个网页桌面中统一所有云存储

Drivebase

我的工作电脑上同时打开了四个存储标签页。第一个是工作用的 Google Drive,第二个是个人 Dropbox,第三个是带有备份的 AWS S3 控制台,第四个是家里服务器上的 MinIO。把文件从公司云盘传到 S3 存储桶通常会变成一场闹剧:先下载一个 GB 到笔记本,再打开另一个标签页上传回去,还得记得清理下载文件夹。

最近我偶然发现了一个新鲜的开源项目叫 Drivebase。开发者们用一种相当独特的方式解决了这个日常痛点。他们做了一个自托管的 Web 应用,在浏览器里看起来就像一个完整的窗口化操作系统,可以连接不同的存储提供商,还能在它们之间移动文件。

Drivebase UI

窗口化界面,告别无尽的标签页

最引人注目的特点是界面。创作者没有做典型的单页仪表盘,而是构建了一个带有任务栏和窗口的桌面。

你可以并排打开两个文件窗口:左边是 Google Drive,右边是 Cloudflare R2 或 Backblaze 上的 S3 存储桶。文件可以用鼠标拖拽,也可以通过批量操作复制。窗口可以最小化、调整大小、相互重叠。感觉就像坐在原生文件管理器里,比如 Finder 或 Total Commander,只不过是在浏览器标签页里。

目前项目支持多种数据源:

  • Google Drive
  • AWS S3 及任何 S3 兼容存储(MinIO、Wasabi、Cloudflare R2、Backblaze B2)
  • 服务器本地文件系统
  • Dropbox 和 OneDrive

作者计划添加 Box、Azure Blob Storage 和常规 SFTP。

底层引擎能做什么

界面看起来不错,但底层的技术实现更有意思。不同 API 之间的文件传输通常充满陷阱。

直接上传到 S3,不占用服务器资源

如果你要上传一个 10GB 的视频文件到 S3 存储桶,让流量经过 Drivebase 服务器毫无意义。后端生成一个预签名分段 URL,浏览器直接将分片发送到 AWS 或 MinIO 存储。服务器不会在内存和网络带宽上卡脖子。

可恢复的上传

大文件上传会被分成多个分片。如果浏览器意外关闭或 Wi-Fi 抖动中断,进程会从断点继续。

复制前的冲突分析

批量传输文件夹时,系统会进行预检查。如果目标文件夹中已存在同名文件,Drivebase 会显示警告并提供选项:覆盖、跳过、重命名或手动解决冲突。

实时更新,无需轮询

你不需要通过持续的 AJAX 请求来监控后台任务状态。架构使用 Server-Sent Events(SSE)结合 GraphQL。文件传输进度会在客户端即时显示,事件从队列到达时立即更新。

技术栈一览

这里的技术栈很现代,没有历史包袱。

后端运行在 Bun 运行时上。开发者没有使用传统的 REST,而是基于 GraphQL Yoga 和 graphql-sse 包构建了类型化的 GraphQL API。数据库是 PostgreSQL 配合 Drizzle ORM,后台任务通过 BullMQ 和 Redis 运行,Better Auth 处理会话。

前端基于全新的 React 19、Vite、TanStack Router 和 Tailwind CSS 4 构建。

提供商架构围绕 IStorageProvider 接口构建。如果你有自己的企业存储或特定的 WebDAV,只需实现一个包含基本读写和流媒体方法的接口即可添加支持。

如何自行部署

最快体验 Drivebase 的方式是运行官方安装脚本,它会准备配置文件并启动 Docker Compose:

curl -fsSL https://drivebase.io/install | bash
cd drivebase
docker compose up -d

启动后,Web 界面可在 http://localhost:4000 访问。

如果你想用 Bun 进行开发或本地修改:

git clone https://github.com/drivebase/drivebase.git
cd drivebase
bun install

复制示例配置:

cp packages/config/config.example.toml config.toml

config.toml 文件中需要指定 PostgreSQL 和 Redis 连接参数,以及生成加密主密钥和授权密钥:

[server]
env = "prod"
port = 4000
host = "0.0.0.0"

[db]
url = "postgres://user:password@localhost:5432/drivebase"

[redis]
url = "redis://localhost:6379/0"

[crypto]
# Генерация ключа: openssl rand -base64 32
masterKeyBase64 = "ваш-ключ-32-байта"

[auth]
# Генерация секрета: openssl rand -hex 32
betterAuthSecret = "ваш-рандомный-секрет"
baseUrl = "http://localhost:4000"
trustedOrigins = ["http://localhost:3000"]

应用迁移并启动开发服务器:

bun run db:migrate
bun run dev

后端将在 4000 端口启动,Web 客户端在 3000 端口。

适用人群

Drivebase 在两个主要场景下很有用:

  1. 家庭服务器或 homelab。当你运行着 NAS、外接硬盘上的几 TB 数据和免费云配额时,Drivebase 给你一个统一的入口点,无需安装十几个同步工具。
  2. 小团队和自由职业者。把源代码放在 S3、客户资料放在 Google Drive,通过浏览器在它们之间传输工作成果非常方便。

该项目目前在 GitHub 上约有 400 颗星,仓库还很新,所以在边缘情况下可能会遇到一些粗糙的地方。然而,在 Bun 和 React 19 上将异构 API 统一在单一桌面界面下的想法很有前景。代码以 MIT 许可证开源,所以你可以随时 fork 并编写自己的存储适配器。

相关项目