如何在私有网络部署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对外部资源的依赖:
- 创建本地配置文件
config.js:
var config = { offline: true, noGoogleFonts: true, noDiagramNet: true, disableExternalResources: true };
- 重新启动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过滤器配置。
验证方法
- 直接在私有网络内访问
http://[draw.io主机]:8080/embed,能正常打开嵌入版编辑器则服务正常 - 重启BookStack服务,进入页面编辑界面尝试插入draw.io图表,验证编辑器是否加载正常
内容的提问来源于stack exchange,提问作者user20384984
相关产品推荐
相关产品推荐

