摆脱云端依赖:手把手教你自托管 draw.io 并解决存储痛点
摆脱云端依赖:手把手教你自托管 draw.io 并解决存储痛点
作为一个经常需要画流程图、架构图的技术博主,我一直在找一个趁手的画图工具。draw.io(现在叫 diagrams.net)无疑是开源界最好的选择之一,功能强大,不用配置太多环境就能上手。但是,官方原本的存储支持让人有点头疼:GitHub、Google Drive、OneDrive……这些服务在国内的网络环境下,要么访问困难,要么就是完全不符合我们的“数据私有化”需求。
很多人可能跟我一样,只想把它部署在自己的 NAS 或者服务器上,然后文件能直接存到我的 WebDAV 或者本地存储里。今天就给大伙捋一捋,如何搞定 draw.io 的自托管,并解决那个让人抓狂的“存储后端”问题。
部署后的 draw.io 界面
为什么我们需要自托管?
简单说就两点:网络和隐私。
- 访问速度:官方版本加载国外资源慢得很,有时候不仅画图画不进去,连保存个文件都得转圈半天。
- 数据安全:不管是公司的架构图还是个人的知识库脑图,放在别人的网盘里总觉得不踏实。自托管意味着数据完全掌控在自己手里。
基础部署:Docker 一键启动
其实 draw.io 的官方早就提供了 Docker 镜像,部署起来非常简单。如果你有一台安装了 Docker 的服务器(或者群晖、威联通等 NAS),几条命令就能跑起来。
使用 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 存储配置流程*
**步骤简述:**
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 插件进行集成。
折腾完这些,你就有了一个完全属于自己的、不需要担心网络波动、数据绝对安全的绘图工作台。画图从此再也不用看别人脸色了!

评论已关闭