摆脱云端依赖:手把手教你自托管 draw.io 并解决存储痛点

作为一个经常需要画流程图、架构图的技术博主,我一直在找一个趁手的画图工具。draw.io(现在叫 diagrams.net)无疑是开源界最好的选择之一,功能强大,不用配置太多环境就能上手。但是,官方原本的存储支持让人有点头疼:GitHub、Google Drive、OneDrive……这些服务在国内的网络环境下,要么访问困难,要么就是完全不符合我们的“数据私有化”需求。

很多人可能跟我一样,只想把它部署在自己的 NAS 或者服务器上,然后文件能直接存到我的 WebDAV 或者本地存储里。今天就给大伙捋一捋,如何搞定 draw.io 的自托管,并解决那个让人抓狂的“存储后端”问题。

Draw.io 自托管界面示例

部署后的 draw.io 界面

为什么我们需要自托管?

简单说就两点:网络隐私

  1. 访问速度:官方版本加载国外资源慢得很,有时候不仅画图画不进去,连保存个文件都得转圈半天。
  2. 数据安全:不管是公司的架构图还是个人的知识库脑图,放在别人的网盘里总觉得不踏实。自托管意味着数据完全掌控在自己手里。

基础部署:Docker 一键启动

其实 draw.io 的官方早就提供了 Docker 镜像,部署起来非常简单。如果你有一台安装了 Docker 的服务器(或者群晖、威联通等 NAS),几条命令就能跑起来。

Docker 命令行部署演示

使用 Docker 命令启动 draw.io

docker run -d --name="drawio" \
  -p 8080:8080 \
  -v /path/to/data:/root/.local/share/draw.io \
  jgraph/drawio
``

*   `-p 8080:8080`:把容器内的 8080 端口映射到宿主机,你以后通过 `http://你的服务器IP:8080` 就能访问。
*   `-v ...`:这是关键的一步。虽然官方默认主要依赖云端存储,但挂载这个卷可以保留浏览器缓存或者一些本地配置,防止重启丢失。

启动后,打开浏览器访问对应地址,你就能看到一个熟悉的界面。这时候你会发现,虽然能用,但是打开“文件”菜单里的“打开从”或者“另存为”,选项里依然是那些对国内用户不友好的云盘。这时候,如果不解决存储问题,自托管就失去了意义。

## 进阶痛点:如何接入 WebDAV/自建网盘?

这是本文的核心。原生的 draw.io 并没有直接在设置里提供“连接 WebDAV”的按钮。要实现这个功能,我们需要一点“曲线救国”的方案。这里提供两个行之有效的思路。

### 方案一:利用 Trello 后端(改代码流)

这是最硬核但也最彻底的方法。draw.io 的 Trello 集成实际上是基于 OAuth 的 REST API 调用。理论上,我们可以把 draw.io 部署在本地,然后修改源码中的 Trello 驱动,将其替换为支持 WebDAV 的接口。

![WebDAV 配置示意图](/media-load/019f1941-9733-7bce-8f97-a0b3b4c244dc)

*WebDAV 存储配置流程*

**步骤简述:**
1.  **Fork 源码**:去 GitHub 上找到 draw.io 的源码并 Fork。
2.  **修改驱动**:找到 `TrelloClient.js` 相关的文件,重写其上传和下载的逻辑,指向你的 WebDAV 地址(如 `/remote.php/webdav/`)。
3.  **编译打包**:使用 `build.xml` 重新构建 war 包或 docker 镜像。

**评价**:这个方案维护成本高,每次官方更新你都要重新合并代码,适合有开发能力的大佬。

### 方案二:WebDAV 挂载 + 第三方文件管理器(推荐)

对于普通用户,不想折腾代码的话,我们可以换一个思路:**让 draw.io 以为自己在操作本地文件**。

通过在服务器上使用 `rclone` 或 `davfs2` 将你的 WebDAV 网盘挂载为服务器的本地目录。

**1. 安装挂载工具(以 Debian 为例):**
```bash
apt-get install davfs2

2. 挂载 WebDAV:

mkdir /mnt/webdav
mount -t davfs https://your-webdav-url.com /mnt/webdav

3. 利用 draw.io 的设备文件功能: 最方便的自托管方式其实是利用 Filesystem Browser 插件或者直接使用浏览器的文件 API。

我们可以在 draw.io 的部署基础上,配置一个目录浏览服务。例如使用 Nginx 配置一个目录列表:

location /files/ {
    alias /mnt/webdav/; # 指向刚才挂载的 WebDAV 目录
    autoindex on;
    dav_methods PUT DELETE MKCOL COPY MOVE;
    # 这里需要配置好 Basic Auth 保证安全
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

在 draw.io 中,你可以通过“加载 URL」或者配合自定义的插件来读取这个目录下的文件。虽然这不能像原生云盘那样无缝集成,但实现了“文件存自建盘,图在云端画”的闭环。

更优雅的替代:使用 draw.io-integration 插件

还有一些社区维护的插件试图解决这个痛点。例如,你可以尝试在 draw.io 中通过“Extras” -> “Plugins” -> “Add” 导入自定义插件。

有些开源项目专门写了一个 DrawioWebDAVPlugin。导入后,在侧边栏会出现 WebDAV 配置选项,填入服务器地址、账号密码,即可直接挂载。寻找这类插件的关键词可以是 "drawio webdav plugin github"。这类插件通常是一个 .xml 文件,托管在你自己的服务器上,然后在 draw.io 里填入 URL 即可加载。

总结

自托管 draw.io 本身不难,难的是存储的本地化适配。

  • 如果你是极客:推荐修改源码 fork 一份,把存储逻辑写死成适配你私有云的接口。
  • 如果你是运维/NAS 用户:推荐用 davfs2 挂载 + Nginx 目录列表(开启 WebDAV 支持)的方式,或者寻找现成的 WebDAV 插件进行集成。

折腾完这些,你就有了一个完全属于自己的、不需要担心网络波动、数据绝对安全的绘图工作台。画图从此再也不用看别人脸色了!

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭