用 docker 部署最稳最快,90% 的 linux 用户应首选;源码部署仅限需修改前端或调试时使用。需注意端口映射、防火墙开放、容器间网络通信及镜像版本指定,纯前端镜像不支持实时协作,须搭配 room 和 storage 后端服务。

直接上结论:用 Docker 部署最稳、最快,90% 的 Linux 用户应该选这个方案;源码部署只在你要改前端逻辑或调试时才必要。
docker run 一行启动但端口不生效?检查 -p 映射和防火墙
常见现象是执行 docker run -d -p 8080:80 excalidraw/excalidraw 后,curl http://localhost:8080 返回空或连接被拒绝。
- 确认容器确实在运行:
docker ps | grep excalidraw,看 STATUS 是否为Up - 检查端口是否被占用:
sudo ss -tuln | grep :8080,如果已有进程占着,换端口比如-p 8090:80 - Ubuntu/Debian 默认启用 ufw 防火墙,开放端口:
sudo ufw allow 8080(或你映射的端口) - 别用
localhost测试——这是本地回环;从局域网其他设备访问时,要用服务器真实 IP,比如http://192.168.1.100:8080
想多人实时协作?光跑前端镜像不够
官方 excalidraw/excalidraw 镜像是纯前端,不带后端服务。点击「分享链接」或「加入房间」会失败,报错类似 Failed to connect to room server 或空白白板无法保存。
- 必须额外部署
excalidraw-room(WebSocket 房间服务)和excalidraw-storage-backend(v2 API 存储后端) - 推荐用
docker-compose管理多容器:它们之间需通过内部网络通信,硬编码http://localhost:8080在容器里会指向自己而非目标服务 -
BACKEND_V2_POST_URL等环境变量必须设成容器名,例如http://excalidraw-storage-backend:8080/api/v2/scenes/ - Redis 是必需依赖,
excalidraw-storage-backend用它暂存共享画布状态,不能省略
拉不到镜像?换 registry mirror 再试
国内直连 docker.io 经常超时或 404,尤其 excalidraw/excalidraw 镜像没打 tag 时默认拉 latest,而该 tag 近期已被移除(2026 年起官方主推带后端的组合部署)。
- 编辑
/etc/docker/daemon.json,加入国内镜像源(如https://docker.mirrors.ustc.edu.cn) - 重启 Docker:
sudo systemctl restart docker - 明确指定版本拉取:
docker pull excalidraw/excalidraw:v1.9.0(查最新 tag 可访问 Docker Hub 页面) - 若仍失败,临时用 GitHub Actions 构建的镜像:
docker pull ghcr.io/excalidraw/excalidraw:stable
源码部署时 yarn install 卡住?关掉代理再试
很多人 clone 完代码跑 yarn install 卡在 fetching @excalidraw/... 或反复重试,本质是 npm registry 被限流或代理污染。
- 先清缓存:
yarn cache clean - 临时禁用代理:
export HTTP_PROXY= HTTPS_PROXY=(注意不是 unset,有些 shell 会继承父进程) - 切 registry:
yarn config set registry https://registry.npmjs.org/(避免 cnpm 或私有源兼容问题) - 不要用
yarn install --production启动开发服——它会跳过 devDependencies,导致yarn start报错找不到webpack-dev-server
真正麻烦的从来不是“怎么装”,而是“装完能不能协作”和“别人能不能访问”。只要容器间网络通、环境变量指向对、镜像 tag 拉得准,剩下的就是配个反向代理(Nginx)或加个域名的事了。











