news 2026/1/22 17:10:11

本地部署Excalidraw手绘白板指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
本地部署Excalidraw手绘白板指南

本地部署 Excalidraw 手绘白板指南

在远程协作日益频繁的今天,一个轻量、直观且安全的可视化工具几乎成了每个技术团队的刚需。无论是画架构草图、梳理业务流程,还是开一场即兴的头脑风暴,一张“能写会动”的数字白板往往比复杂的建模软件更高效。而Excalidraw正是这样一款让人眼前一亮的开源工具——它用极简的手绘风格还原了纸笔书写的自然感,却又无缝集成了现代协作能力。

更难得的是,它的整个技术栈设计得非常友好:前端基于 React + Canvas 实现,后端协作服务使用 Node.js 和 WebSocket,整体结构清晰,部署成本低。尤其适合希望将白板系统私有化部署、保障数据不出内网的企业或个人开发者。

本文不讲概念堆砌,直接带你从零开始,在本地快速搭建一个支持实时协作、具备基础持久化能力的 Excalidraw 私有实例。全程基于 Docker 部署,兼顾效率与可维护性,最后还会补充手动构建静态版本的方法,满足不同场景需求。


环境准备:别让依赖卡住第一步

动手前先确认你的主机已经装好了以下组件:

  • Git:用来拉取官方源码
  • Docker(建议 20.10+):容器运行时核心
  • Docker Compose v2.x:注意是新版docker compose(无横杠),不是旧版docker-compose

💡 小贴士:如果你还在用老版本的 Compose 插件,可以通过以下命令检查:

bash docker compose version

如果提示找不到命令,说明需要安装或升级。参考官方文档:
https://docs.docker.com/compose/install/

内存方面,至少预留 512MB 给容器使用。网络要通畅,毕竟第一次部署得下载镜像。


一键启动:用 Docker 快速跑起来

Excalidraw 官方提供了完整的docker-compose.yml模板,省去了自己打包前端的麻烦。我们只需要几步就能让服务跑起来。

首先克隆仓库:

git clone https://github.com/excalidraw/excalidraw.git cd excalidraw

这个仓库不仅包含前端代码,还有生产用的 Nginx 镜像配置和开发服务器设置。

接着直接启动默认服务:

docker compose up -d

这条命令会自动完成三件事:

  1. 拉取excalidraw/excalidraw镜像(基于 Alpine + Nginx 的静态站点)
  2. 后台运行容器
  3. 把宿主机的3000端口映射到容器的80,即访问 http://localhost:3000

等几秒后查看运行状态:

docker ps | grep excalidraw

你应该能看到类似输出:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES abc123def456 excalidraw/excalidraw "nginx -g 'daemon of…" 2 minutes ago Up 2 mins 0.0.0.0:3000->80/tcp excalidraw-excalidraw-1

此时打开浏览器访问 http://localhost:3000,就能看到干净清爽的手绘界面了。

但别高兴太早——这时候的 Excalidraw 只是一个“单机版”,没有协作功能,刷新页面就丢内容。要想真正发挥它的潜力,还得加上后端同步服务。


自定义配置:改端口、设环境变量

默认映射到3000端口虽然方便,但在实际环境中容易冲突。比如你本机可能已经有其他服务占用了这个端口。所以最好提前修改一下配置。

编辑项目根目录下的docker-compose.yml文件:

vi docker-compose.yml

找到services.excalidraw.ports这一项,改成你喜欢的端口,比如3002

services: excalidraw: image: excalidraw/excalidraw ports: - "3002:80" environment: - NODE_ENV=production

这里顺手加上NODE_ENV=production是个好习惯。它可以关闭开发模式下的调试日志,减少不必要的输出,也让前端资源加载更快一点。

改完之后重启服务:

docker compose down docker compose up -d

现在访问 http://localhost:3002 即可生效。


加入协作能力:让多人同时画画

这才是 Excalidraw 的灵魂所在。默认的单容器部署只是个静态页面,真正的“实时协同编辑”依赖于另一个独立的服务:excalidraw-room

这是一个轻量级的 WebSocket 服务,负责处理客户端之间的连接、消息广播和房间管理。它的设计很巧妙——前端会自动探测是否存在名为room的服务,如果发现,就会自动启用协作模式。

所以我们只需在docker-compose.yml中新增一个服务即可:

version: '3' services: excalidraw: image: excalidraw/excalidraw ports: - "3002:80" environment: - NODE_ENV=production depends_on: - room room: image: excalidraw/excalidraw-room environment: - HTTP_SERVER_PORT=80 - COLLABORATION_PORT=443 expose: - "80"

几点说明:

  • depends_on确保前端等待room服务启动后再运行,避免连接失败。
  • COLLABORATION_PORT=443是协议要求,即使实际通信走的是 80 端口,也建议保留该变量。
  • expose: 80表示该端口仅对内部网络开放,无需对外暴露,提升安全性。

保存后重新部署:

docker compose down && docker compose up -d

刷新网页,点击右上角的「Share」按钮,你会发现多了一个选项:“Collaborative realtime editing”。点击后生成的链接就可以分享给同事,邀请他们加入同一个画布协同编辑。

⚠️ 注意:当前这种部署方式下,所有房间数据都存在内存里。一旦容器重启,所有正在进行的协作会话都会中断,未导出的内容也会丢失。这在演示或临时会议中问题不大,但如果想长期使用,就得考虑持久化方案。


数据持久化尝试:留住关键记录

虽然excalidraw-room目前不支持数据库存储(如 PostgreSQL 或 Redis),但它会在运行时生成一些日志文件,记录连接事件和错误信息。我们可以把这些日志挂载出来,便于排查问题。

room服务中添加卷挂载:

room: image: excalidraw/excalidraw-room environment: - HTTP_SERVER_PORT=80 - COLLABORATION_PORT=443 expose: - "80" volumes: - ./logs:/app/logs

下次启动时,容器内的/app/logs目录就会映射到宿主机的./logs文件夹,日志得以保留。

当然,这不是真正意义上的“数据持久化”。如果你想保存画布内容,目前最可行的方式是在客户端手动导出为.excalidraw文件(本质是 JSON),然后集中归档管理。未来如果有社区插件或自研后端接入,也可以通过扩展room服务来实现自动备份。


使用体验:不只是好看,更要好用

打开 http://localhost:3002,你会被那种“纸上作画”的质感吸引。左侧工具栏简洁明了,右侧属性面板提供颜色、粗细、字体等调节项,顶部菜单则藏着导出、共享、主题切换等功能。

常用功能一览:

功能说明
🖊️ 手绘线条支持压感笔触,模拟真实书写抖动感
▢ 图形绘制包括矩形、圆形、箭头、菱形判断等流程图元素
🧩 对齐与分布自动吸附、智能辅助线提升排版效率
📤 导出图像支持 PNG/SVG 格式,透明背景开箱即用
🔗 共享协作获取链接即可发起实时会话
🎨 主题切换支持亮色 / 暗色模式,保护夜间视力

特别值得一提的是它的端到端加密协作机制:即便通过公网传输,每个房间的数据在客户端就已经加密,服务端无法解密。这意味着哪怕你把服务部署在公有云上,别人也无法窥探你们的讨论内容——非常适合敏感项目的内部协作。

不过也有局限:比如不支持用户认证、不能限制访问权限。如果你打算对外发布,强烈建议加一层反向代理(如 Nginx),配合 HTTPS 和 Basic Auth 做基础防护。


脱离容器:构建静态版本用于内网展示

有些人可能不想依赖 Docker,或者只想在一个简单的 HTTP 服务器上运行 Excalidraw。比如嵌入公司内部 Wiki、培训系统或离线文档站。

这时你可以选择手动构建前端静态资源。

进入项目目录:

cd excalidraw

确保已安装 Node.js(推荐 v16+),然后安装依赖并构建:

npm install npm run build

构建完成后,所有静态文件会输出到build/目录,包括 HTML、JS、CSS 和资源文件。

接下来可以复制到任意 Web 服务器。例如 Nginx:

sudo cp -r build/* /var/www/html/

然后访问http://your-server-ip/index.html即可。

❗ 重要提醒:这种方式只能作为离线白板使用,完全不支持协作功能。因为缺少room服务,WebSocket 连接无法建立。但它非常适合做产品原型展示、教学演示或静态文档附图。


这种高度集成又灵活可拆解的设计思路,正是 Excalidraw 能迅速赢得开发者喜爱的原因之一。它既可以用最简单的方式快速上手,也能通过模块化组合满足进阶需求。

随着 AI 辅助设计的兴起,我们甚至可以看到更多可能性:比如结合 OpenAI API,输入“画一个订单支付流程”,自动生成带节点和连线的草图;或是通过图像识别,把手机拍的手绘稿转成数字化图表。

而现在,你已经有了一个属于自己的私有化实例。下一步怎么玩,取决于你的想象力。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/31 1:02:18

基于深度学习的植物病害检测系统(UI界面+YOLOv8/v7/v6/v5代码+训练数据集)

摘要 植物病害是全球农业生产面临的重要挑战之一,传统的人工检测方法效率低下且容易出错。本文介绍了一套完整的基于深度学习的植物病害检测系统,该系统整合了YOLOv5、YOLOv8和YOLOv10等多种先进的目标检测算法,并配备了直观的用户界面。我们将详细探讨系统架构设计、数据集…

作者头像 李华
网站建设 2026/1/20 7:16:54

Stable Diffusion 3.5本地部署指南与一键整合包

Stable Diffusion 3.5 FP8本地部署实战:如何用12GB显存跑出高质量AI图像? 在AI绘画领域,每次新模型的发布都像一场技术地震。2024年11月,Stability AI推出的 Stable-Diffusion-3.5-FP8 模型,就让不少原本以为自己硬件…

作者头像 李华
网站建设 2026/1/19 3:58:22

Wan2.2-T2V-A14B本地部署与多GPU推理指南

Wan2.2-T2V-A14B本地部署与多GPU推理实战:从零构建高性能视频生成系统 你有没有遇到过这样的场景?团队正在为一个广告项目反复修改分镜脚本,导演希望看到“赛博猫在霓虹雨夜屋顶追逐”的动态预览,但传统3D动画流程耗时动辄数天。…

作者头像 李华
网站建设 2026/1/21 0:26:42

基于深度学习的跌倒检测系统(UI界面+YOLOv8/v7/v6/v5代码+训练数据集)

摘要 随着人口老龄化加剧和智能安防需求增长,跌倒检测系统已成为计算机视觉领域的重要研究方向。本文详细介绍了基于深度学习YOLO系列模型的跌倒检测系统,涵盖YOLOv5/v6/v7/v8/v10等多个版本的技术演进、数据集构建、模型训练及可视化界面实现。通过对比不同YOLO版本在跌倒检…

作者头像 李华
网站建设 2026/1/22 15:00:09

构建个性化AI助手:LobeChat + 开源大模型完美组合

构建个性化AI助手:LobeChat 开源大模型的实践之路 在今天,一个开发者只需几条命令,就能在自己的笔记本上运行一个堪比几年前顶尖商业AI的语言模型。这种变化背后,是开源大模型与现代化前端工具协同演进的结果。如果你曾为数据隐私…

作者头像 李华
网站建设 2026/1/22 2:08:25

免费守护网站安全:精选一年期SSL证书获取攻略

在当今网络环境中,为网站部署SSL证书实现HTTPS加密,已是保障数据传输安全、建立用户信任的基础门槛。对于预算有限的个人站点、初创企业或非营利组织而言,寻找可靠的一年期免费SSL证书成为现实需求。本文将基于当前市场实测情况,梳…

作者头像 李华