前言
我一直挺喜欢 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 的
5000Web 页面提供到公网。
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/excalidraw → 5000:80 → 局域网浏览器访问 → cpolar → 5000 → 随机公网 → 固定二级子域名 exc。
几个边界也需要分清:
- 当前真正验证的是 Excalidraw Web 页面能够在极空间 Docker 中运行,并通过局域网和公网打开;
- 源内容虽然提到了多人协作,但这次没有展示多人实时协作流程,因此不把它写成已经实测完成;
- 源内容强调"数据完全私有",但这次没有继续展示数据实际保存位置和持久化方式,所以不扩大这个结论;
- cpolar 只负责公网 Web 入口,不参与 Excalidraw 绘图和协作逻辑;
- 固定域名部分存在
exc与jkj的隧道名称差异,真正复现时应以自己实际创建的隧道为准。
如果只是想在自己的 NAS 上放一个随手能开的手绘白板,这套方案的优点就在于足够简单:一个容器,一个 5000 端口,局域网先用起来;确定自己真的会长期用,再去处理固定公网入口。