Draw.io 在线绘图工具私有部署
Draw.io(现更名为 diagrams.net)是全球最流行的在线绘图工具之一,支持流程图、架构图、网络拓扑图、UML 图等多种图表类型。虽然官方提供了免费的在线版本,但如果你对数据安全有要求,或者希望在内网环境使用,可以将其私有部署到搬瓦工 VPS 上。本文将介绍如何通过 Docker 快速完成部署。
一、Draw.io 私有部署的优势
- 数据安全:所有图表文件保存在自己的服务器上,不经过第三方服务器。
- 内网可用:部署在内网服务器上,无需互联网即可使用。
- 自定义配置:可以预配置模板库、形状库,统一团队绘图规范。
- 无使用限制:没有文件数量和大小限制,不受公共服务的速率限制。
- 集成能力:可与 Nextcloud、Confluence 等平台集成。
二、环境要求
- 搬瓦工 VPS 一台,512MB 内存即可运行(购买时使用优惠码 NODESEEK2026 享受 6.77% 折扣)。
- 已安装 Docker 和 Docker Compose(参考 Docker 安装教程)。
- 域名一个(可选,用于 HTTPS 访问)。
2.1 创建项目目录
mkdir -p /opt/drawio
cd /opt/drawio
三、Docker Compose 部署
Draw.io 的 Docker 部署非常简单,因为它本质上是一个纯前端应用加上导出服务。
cat > /opt/drawio/docker-compose.yml <<'EOF'
version: '3.8'
services:
drawio:
image: jgraph/drawio:latest
restart: always
ports:
- "8080:8080"
- "8443:8443"
environment:
DRAWIO_SELF_CONTAINED: 1
DRAWIO_SERVER_URL: https://draw.yourdomain.com
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080"]
interval: 30s
timeout: 10s
retries: 3
EOF
其中 DRAWIO_SELF_CONTAINED: 1 表示启用自包含模式,所有资源都从本地加载,不依赖外部 CDN。
四、启动服务
cd /opt/drawio
docker compose up -d
检查运行状态:
docker compose ps
docker compose logs drawio
服务启动后,通过 http://VPS_IP:8080 即可访问 Draw.io。
五、配置 Nginx 反向代理与 HTTPS
5.1 安装 Nginx
apt update
apt install nginx certbot python3-certbot-nginx -y
5.2 配置反向代理
cat > /etc/nginx/sites-available/drawio <<'EOF'
server {
listen 80;
server_name draw.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
}
client_max_body_size 100m;
}
EOF
ln -sf /etc/nginx/sites-available/drawio /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
5.3 申请 SSL 证书
certbot --nginx -d draw.yourdomain.com
六、高级配置
6.1 禁用外部服务连接
如果你希望完全隔离,不允许用户连接 Google Drive、OneDrive 等外部服务,可以通过环境变量设置:
environment:
DRAWIO_SELF_CONTAINED: 1
DRAWIO_GOOGLE_CLIENT_ID: ""
DRAWIO_MSGRAPH_CLIENT_ID: ""
DRAWIO_GITLAB_ID: ""
DRAWIO_CLOUD_CONVERT_APIKEY: ""
6.2 配置自定义模板
你可以将自定义模板文件挂载到容器中:
volumes:
- /opt/drawio/templates:/usr/local/tomcat/webapps/draw/templates2
将你的 XML 模板文件放入 /opt/drawio/templates 目录即可。
6.3 导出功能配置
Draw.io 支持将图表导出为 PNG、PDF、SVG 等格式。导出功能需要服务端渲染支持,jgraph/drawio 镜像已经内置了导出服务器,无需额外配置。
七、与 Nextcloud 集成
如果你同时部署了 Nextcloud,可以在 Nextcloud 中安装 Draw.io 集成插件:
- 在 Nextcloud 应用商店中搜索并安装「Draw.io」插件。
- 在管理设置中配置 Draw.io 服务器地址为你私有部署的地址。
- 之后在 Nextcloud 中打开 .drawio 文件会自动调用你的私有 Draw.io 服务器。
八、性能优化
Draw.io 主要是前端应用,对服务器资源消耗较低。以下是一些优化建议:
- 启用 Gzip 压缩:在 Nginx 中启用压缩可以减少传输量,加快页面加载。
- 配置缓存:静态资源可以设置较长的缓存时间。
- 限制导出并发:如果导出请求量大,可以限制并发数避免 OOM。
# 在 Nginx 中添加静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
proxy_pass http://127.0.0.1:8080;
expires 30d;
add_header Cache-Control "public, immutable";
}
九、版本更新
cd /opt/drawio
docker compose pull
docker compose up -d
docker image prune -f
十、常见问题
导出 PDF 空白
这通常是导出服务内存不足导致的。检查容器日志:
docker compose logs drawio | tail -50
可以增加容器内存限制或升级 VPS 方案。
页面加载缓慢
确认 DRAWIO_SELF_CONTAINED 设置为 1,避免从外部 CDN 加载资源。同时检查 Nginx 是否启用了 Gzip 压缩。
总结
Draw.io 是一个功能强大且轻量的绘图工具,私有部署后可以保障数据安全并提供稳定的内网服务。结合 Nextcloud 使用效果更佳。搬瓦工 VPS 可在 bwh81.net 购买,使用优惠码 NODESEEK2026 享受 6.77% 折扣。