You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在私有网络部署embed.diagrams.net服务,适配BookStack离线使用

私有网络/离线环境下BookStack集成draw.io的正确部署方案

核心问题定位

你之前配置无效的原因是:官方jgraph/docker-drawio镜像提供的是完整draw.io站点,而BookStack需要的是嵌入专用的/embed入口,并非在根路径添加embed=1参数——这是它和embed.diagrams.net的核心差异。

正确部署步骤

1. 部署支持Embed模式的draw.io服务(Docker)

使用官方镜像启动服务,确保私有网络内BookStack可访问:

docker run -d -p 8080:8080 -p 8443:8443 --name drawio jgraph/drawio
  • 8080为HTTP端口,可根据私有网络需求调整映射端口
  • 若需持久化存储图表数据,可添加-v /本地存储路径:/usr/local/tomcat/webapps/ROOT/draw挂载存储目录

2. 修正BookStack的DRAWIO配置

修改BookStack的.env配置文件或环境变量,配置正确的Embed入口:

DRAWIO=http://[你的draw.io主机IP/域名]:8080/embed?proto=json&spin=1
  • 关键是使用/embed路径,而非根路径加参数
  • proto=json确保BookStack与draw.io的通信协议兼容,spin=1用于加载时显示等待动画

3. 离线环境适配配置

如果是完全离线环境,需禁用draw.io对外部资源的依赖:

  1. 创建本地配置文件config.js:
var config = {
  offline: true,
  noGoogleFonts: true,
  noDiagramNet: true,
  disableExternalResources: true
};
  1. 重新启动draw.io容器并挂载配置文件:
docker run -d -p 8080:8080 -p 8443:8443 \
  -v /本地config.js路径:/usr/local/tomcat/webapps/ROOT/js/config.js \
  --name drawio jgraph/drawio

4. 跨域问题解决(若BookStack与draw.io端口/域名不同)

如果两者不在同一域名/端口下,需配置draw.io允许BookStack的跨域请求:

  • 若镜像支持环境变量,启动时添加:
docker run -d -p 8080:8080 -p 8443:8443 \
  -e CORS_ALLOW_ORIGIN=http://[BookStack主机IP/域名]:[端口] \
  --name drawio jgraph/drawio
  • 若镜像不支持环境变量,可进入容器修改Tomcat的web.xml,添加CORS过滤器配置。

验证方法

  1. 直接在私有网络内访问http://[draw.io主机]:8080/embed,能正常打开嵌入版编辑器则服务正常
  2. 重启BookStack服务,进入页面编辑界面尝试插入draw.io图表,验证编辑器是否加载正常

内容的提问来源于stack exchange,提问作者user20384984

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 01:15:46