部署 Excalidraw:Docker 搭建手绘白板,再配置固定公网访问

前言

我一直挺喜欢 Excalidraw 这种工具:画架构图不用先挑一堆形状,临时梳理流程也不用把页面做得特别"正式",打开画布就能画,反而更接近纸上打草稿的感觉。可在线版用得久了以后,我会自然冒出另一个想法------既然极空间本来就长期在线,能不能把这个白板也放到自己的 NAS 上?这样至少访问入口、运行环境和部署方式都掌握在自己手里,需要时电脑和手机直接用浏览器打开。对我来说,这种工具最重要的不是功能堆得多,而是想画的时候马上能进去,不必先登录一堆平台,也不用为了临时画张图重新找入口。

这次我没有把流程做复杂,而是直接通过 SSH 在极空间里拉取 excalidraw/excalidraw 镜像,再用 Docker 把容器 80 端口映射到宿主机 5000,先确认局域网里能正常打开白板。随后安装 cpolar,把 5000 Web 页面映射到公网,先使用随机地址测试,再配置固定二级子域名 exc。我更关心的是"白板能不能稳定打开、远程入口是不是清楚",而不是把网页能访问就直接写成"实时协作、数据完全私有、永久可用"都已经验证完成。对于这类轻量工具,先把部署和访问链跑通,反而更实际,也更容易判断自己以后到底会不会长期用它。

1. 为什么我会把 Excalidraw 放到极空间?

Excalidraw 是一个带手绘风格的虚拟白板工具,适合画架构图、流程图、读书笔记、项目草稿和思维梳理。

它比较吸引我的地方,是操作足够轻:

  • 画布可以自由拖动;
  • 图形带明显的手绘感;
  • 临时画一张图不需要先搭复杂模板;
  • 浏览器就能直接使用。

如果极空间已经长期在线,把 Excalidraw 作为一个自建 Web 工具放进去,至少能把"从哪里打开白板"这件事固定下来。

需要区分的是,这次真正操作的是:

极空间 Docker → Excalidraw Web 页面 → 局域网访问 → cpolar 公网访问。

源内容提到了"协作""私有""数据掌握在自己手中"等能力,但这次并没有继续展示多人实时协作、数据持久化位置或完整存储机制,所以这里只把已经跑通的部分写实。

2. 先通过 SSH 进入极空间

当前流程使用 SSH 终端部署。

如果极空间还没有开启 SSH,可以先按设备设置完成开启。

源内容还给出了一篇 SSH 参考:

极空间别再吃灰了!开启SSH,秒变全能服务器! - cpolar 极点云官网

使用 SSH 工具连接极空间,并切换到 root 用户。

后面的镜像拉取、容器创建和状态检查都在终端里完成。

3. 拉取 Excalidraw 镜像

先执行:

shell 复制代码
sudo docker pull excalidraw/excalidraw

拉取完成以后查看本地镜像:

shell 复制代码
sudo docker images

这一步只是确认 excalidraw/excalidraw 镜像已经出现在当前 Docker 环境中。

4. 创建并启动 Excalidraw 容器

镜像准备好以后,执行:

shell 复制代码
sudo docker run -d --name excalidraw -p 5000:80 excalidraw/excalidraw

这里的关键参数很简单:

  • 容器名:excalidraw
  • 宿主机端口:5000
  • 容器端口:80
  • 镜像:excalidraw/excalidraw

也就是说,后面极空间上的 Web 入口围绕:

5000

端口访问。

接着检查容器状态:

shell 复制代码
sudo docker ps

当前页面显示容器已经运行。

5. 先在局域网里打开白板

容器启动以后,通过:

极空间IP:5000

从 Windows 浏览器打开。

页面可以正常访问以后,说明当前最基础的一层已经跑通:

极空间 Docker → Excalidraw → 5000 → 浏览器。

这时候如果只打算在家里或局域网环境里使用,到这里其实已经可以开始画图。

6. 局域网能用了,再考虑外网访问

如果朋友在异地,或者自己出门后还想从外部网络打开这个白板,局域网地址就不够用了。

这里再增加 cpolar。

cpolar 在这套方案里的职责很明确:

只把极空间上 Excalidraw 的 5000 Web 页面提供到公网。

Excalidraw 继续负责白板页面和绘图功能,cpolar 不参与画布逻辑,也不会因为加了公网地址就自动获得多人协作能力。

7. 在极空间安装 cpolar

执行当前安装命令:

shell 复制代码
sudo curl https://get.cpolar.sh | sh

安装完成以后检查服务状态:

shell 复制代码
sudo systemctl status cpolar

服务正常以后,通过主机 IP + 9200 打开 cpolar Web 管理页面。

当前页面写的是:

http://192.168.50.100:9200

同时链接目标为:

http://localhost:9200/

实际访问时,以当前设备真正能打开的地址为准。

登录以后继续配置隧道。

8. 给 Excalidraw 创建随机公网地址

进入【隧道管理 → 创建隧道】。

当前配置为:

  • 隧道名称:exc
  • 协议:http
  • 本地地址:5000
  • 域名类型:随机域名
  • 地区:China VIP

创建成功以后,进入在线隧道列表查看生成的公网地址。

然后从其他电脑或移动设备访问。

页面能够正常打开。

这一层真正验证的是:

Excalidraw 5000 → cpolar 随机公网地址 → 外部浏览器。

9. 固定二级子域名适合长期使用

随机地址适合先确认公网链路。

如果准备长期使用同一个地址,再继续配置固定二级子域名。

进入预留页面。

选择【保留二级子域名】。

当前记录为:

  • 地区:china Vip
  • 二级子域名:exc

这里的名称可以按自己的账号实际可用结果选择。

10. 把隧道切换成固定域名

回到 cpolar Web UI 的【隧道管理 → 隧道列表】。

当前源内容这里写的是找到:

jkj

隧道。

但前面创建隧道时使用的名称是:

exc

两处记录并不一致。这里不替现有记录强行统一,真正操作时应以自己列表里实际指向 Excalidraw 5000 的那条隧道为准。

编辑以后修改为:

  • 域名类型:二级子域名
  • Sub Domain:填写已经保留的二级子域名
  • 地区:China Vip

点击更新。

更新完成以后,在线隧道列表中的公网地址会切换为固定二级子域名形式。

最后从任意设备浏览器访问。

页面能够正常打开。

总结

这次我更愿意把极空间 + Excalidraw 看成一个很轻的自建白板入口,而不是去强调"创意中枢""永久可用"这类大词。

实际跑通的主线是:

极空间 SSH → Docker → excalidraw/excalidraw5000:80 → 局域网浏览器访问 → cpolar → 5000 → 随机公网 → 固定二级子域名 exc

几个边界也需要分清:

  • 当前真正验证的是 Excalidraw Web 页面能够在极空间 Docker 中运行,并通过局域网和公网打开;
  • 源内容虽然提到了多人协作,但这次没有展示多人实时协作流程,因此不把它写成已经实测完成;
  • 源内容强调"数据完全私有",但这次没有继续展示数据实际保存位置和持久化方式,所以不扩大这个结论;
  • cpolar 只负责公网 Web 入口,不参与 Excalidraw 绘图和协作逻辑;
  • 固定域名部分存在 excjkj 的隧道名称差异,真正复现时应以自己实际创建的隧道为准。

如果只是想在自己的 NAS 上放一个随手能开的手绘白板,这套方案的优点就在于足够简单:一个容器,一个 5000 端口,局域网先用起来;确定自己真的会长期用,再去处理固定公网入口。

相关推荐
科技苑1 小时前
Python AI自动剪辑视频简易程序
人工智能·python
TAN-90°-1 小时前
Deep Learning for Computer Vision——Generative Models 1
人工智能·深度学习·神经网络·目标检测·机器学习·计算机视觉
AIGCmagic社区1 小时前
OpenWAM把世界动作模型预训练拆成可替换的受控实验
人工智能·aigc·具身智能
u1301301 小时前
GitHub 热榜项目:日榜(2026-09-18)
人工智能·github
天涯明月19931 小时前
SGLang 设计与实现——RadixAttention 与前后端协同,让 KV 缓存不再用完即弃
人工智能·大模型·推理框架·ai infra
胡家伟++1 小时前
从“过滤”到“选择”:投机解码、拒绝采样与强化学习的方差缩减统一理论
人工智能·机器学习
深兰科技1 小时前
深兰科技受邀参与第二届中国(南宁)—东盟人工智能场景应用对接会,深化AI国际合作
人工智能·qt·r语言·scala·symfony·智能机器人·深兰科技
m0_587383001 小时前
上海24小时自助健身房系统软件开发实战指南:从架构到部署
人工智能·小程序·数据挖掘·系统架构·需求分析
2301_790355971 小时前
深度剖析:AI配音如何实现真正的情感化、拟人化?
人工智能·自然语言处理