整理一篇学习笔记,把看到的一些要点和自己的理解都记下来。
不注册也能多人一起写?用 Rustpad 在 NAS 上搭一个轻量协作文本编辑器
前言
多人临时协作写东西时,我最怕工具本身比内容还重:先注册账号、建团队、配权限,最终只是想让两三个人一起改一段文字。Rustpad 吸引我的地方正好相反,它把流程压得很轻——打开一个文档、复制分享链接,别人进入后就能一起编辑;再加上 Markdown、代码高亮和随机文档码,拿来做会议记录、临时代码片段、课堂笔记都很顺手。对我来说,这类工具真正有价值的不是功能堆得多,而是“点开就写、发链接就协作”。如果只是临时讨论,我也不想先为了协作本身建立一整套账户体系。尤其是两三个人临时碰头时,真正影响效率的往往不是功能不够,而是进入工具之前的准备步骤太多。
这次我把汉化版 Rustpad 部署到极空间:先通过 SSH 进入 NAS,确认 Docker 环境,在 /docker/rustpad 下准备 Compose 文件,用 swr.cn-north-4.myhuaweicloud.com/firfe/rustpad:2025.08.28 镜像,把 3030 映射到宿主机,并限制 1 核 CPU、512MB 内存和日志大小。局域网确认页面、文档码、用户名和 Share Link 都能用以后,再安装 cpolar,把 3030 页面先通过随机地址提供到公网,最终切换成固定二级子域名 rustpad。同时会把一个容易忽略的问题讲清楚:轻量协作不等于长期归档,现有部署没有挂载数据卷,文档持久化要单独确认。
1. Rustpad 到底适合做什么?
Rustpad 是一款轻量级在线协作文本编辑工具。
它的几个核心特点很直接:
- 多人实时协作;
- 无需注册;
- 支持 Markdown;
- 支持代码高亮;
- 可以自托管;
- 支持可选端到端加密。
- 临时会议记录;
- 团队头脑风暴;
- 编程结对时共享代码片段;
- 教师和学生共享课堂笔记;
- 临时清单、协议和待办。
组件技术后端Rust + Actix Web前端HTML / CSS / JavaScript部署单二进制文件或 Docker协议WebSocket + CRDT
对我来说,它真正的优势不是功能多,而是:
不用建团队、不用创建账号,拿到链接就能着手协作。
2. 文档会不会一直保存?
这个问题要先说清楚。
Rustpad 的说明里提到:
默认将文档临时保存在内存中,重启后会丢失;持久化到本地文件需要社区修改版或插件。
而下面这套 Docker Compose 和 docker run 配置:
都没有挂载数据卷。
于是我不会把这套部署直接当成长久文档归档系统。
它更适合:
临时协作、快速共享、短周期编辑。
如果准备长期保存重要内容,需要另外确认这个汉化镜像是否实现持久化,以及数据最终落在哪里。
3. SSH 进入极空间
先在极空间开启 SSH 服务。
接着从 Windows PowerShell 或 Mac Terminal 登录:
ssh root@IP
这里的 IP 换成自己极空间的实际地址。
4. 确认 Docker 环境
执行:
docker -v
systemctl status -v
docker -v 用来确认 Docker 命令是否可用。
另一条:
systemctl status -v
如果返回结果不是预期的 Docker 服务状态,先确认极空间实际用的 systemd 服务名,不要只凭这一条命令判断 Docker 是否正常。
5. 创建 Rustpad 部署目录
执行:
sudo mkdir -p /docker/rustpad
cd /docker/rustpad
目录为:
/docker/rustpad
后面的 Compose 文件就放在这里。
6. 用 Docker Compose 启动 Rustpad
创建 docker-compose.yml,写入:
#version: '3.9'
name: rustpad
services:
rustpad:
container_name: rustpad
image: swr.cn-north-4.myhuaweicloud.com/firfe/rustpad:2025.08.28
network_mode: bridge
restart: always
cpus: 1
mem_limit: 512m
logging:
options:
max-size: 1m
max-file: '3'
ports:
- 3030:3030
这里几个参数相对关键:
- 容器名:
rustpad - 镜像:
swr.cn-north-4.myhuaweicloud.com/firfe/rustpad:2025.08.28 - 网络:
bridge - 重启策略:
always - CPU:
1 - 内存:
512m - 日志单文件最大:
1m - 日志最多保留:
3 - 端口:
3030:3030
docker-compose up -d
7. 也可以直接用 docker run
如果不想用 Compose,也可以执行:
docker run -d \
--name rustpad \
--network bridge \
--restart always \
--cpus 1 --memory 512m \
--log-opt max-size=1m \
--log-opt max-file=3 \
-p 3030:3030 \
swr.cn-north-4.myhuaweicloud.com/firfe/rustpad:2025.08.28
两种方式二选一即可。
如果已经用 Compose 启动了 Rustpad,就不要再用 docker run 启动第二套,否则可能遇到容器名或端口冲突。
8. 先确认局域网页面
浏览器访问:
http://极空间IP:3030
页面能打开,先证明:
极空间 Docker → Rustpad → 3030 → 浏览器
这一层已经正常。
9. Rustpad 如何区分不同文档?
页面支持多种语言格式。
Rustpad 通过:
6 位随机码
区分不同文档。
不同随机码对应不同文档内容。
这种设计很适合临时协作,但如果文档越来越多,我会额外记录:
哪个随机码对应哪份内容。
否则时间一长,自己也容易忘记。
10. 多人进入后怎么区分彼此?
Rustpad 允许修改用户名。
多人同时编辑时,先改成能看懂的显示名称,协作时会更清楚。
11. 怎么把同一份文档分享出去?
左侧可以看到:
Share Link
这就是当前文档的共享链接。
把它发给另一位协作者,对方打开后就能加入同一个文档。
整个协作过程很短:
打开文档 → 复制 Share Link → 发给别人 → 一起编辑。
这也是我愿意留下 Rustpad 的原因。
12. 可选 E2EE 不等于默认已经加密
Rustpad 的功能说明里提到:
可以通过 URL 中的密钥实现可选端到端加密。
这里的关键词是:
可选。
于是我不会看到“支持 E2EE”就默认每一个普通 Share Link 都已经自动开启端到端加密。
如果要处理敏感内容,我会额外确认:
- 当前链接是否包含对应密钥;
- 当前会话是否真的启用了加密;
- 汉化镜像是否保持这套加密行为。
13. 远程协作时,端口要先核对
本地部署和浏览器访问都用:
3030
Compose 和 docker run 也都是:
3030:3030
不过远程协作场景里还有一处地址写成:
http://你的IP:3000
这和实际部署端口不一致。
于是后面配置公网入口时,我会以实际 Docker 映射为准:
继续使用 3030。
14. 安装 cpolar
如果协作者不在同一个局域网,就需要让 Rustpad 页面从外部可访问。
cpolar 在这里负责的是:
把 Rustpad 的 3030 Web 页面提供到公网。
它不负责 CRDT 同步,也不负责文档加密。
安装:
sudo curl https://get.cpolar.sh | sh
安装做好后检查状态:
sudo systemctl status cpolar
服务正常以后,通过主机 IP + 9200 进入 cpolar Web UI。
页面里的入口写成:
http://ip:9200
对应超链接目标为:
http://localhost:9200/
15. 先创建随机公网地址
进入:
隧道管理 → 创建隧道
参数:
- 隧道名称:
rustpad - 协议:
http - 本地地址:
3030 - 域名类型:随机域名
- 地区:
China Top
创建以后进入在线隧道列表。
复制生成的公网地址,从外部设备测试。
Rustpad 页面能正常打开。
这一层验证的是:
外部浏览器 → cpolar → 极空间 3030 → Rustpad。
16. 远程协作真正要分享的还是文档链接
公网地址解决的是:
外部设备可以打开 Rustpad。
具体哪一份文档,仍然由文档码和 Share Link 区分。
更完整的链路是:
公网 Rustpad → 指定文档 → Share Link → 多人同时编辑。
如果只把 Rustpad 首页地址发给别人,对方未必直接进入正在协作的那一份文档。
17. 长期使用再换固定二级子域名
随机地址适合先测试。
如果以后经常使用 Rustpad,再切换固定二级子域名会更方便保存入口。
进入预留页面。
选择:
保留二级子域名
参数:
- 地区:
china Top - 二级子域名:
rustpad
二级子域名具有唯一性,以自己账号真正预留成功的名称为准。
18. 把固定域名绑定回 Rustpad 隧道
进入:
隧道管理 → 隧道列表
找到 Rustpad 隧道并编辑。
修改:
- 域名类型:二级子域名;
Sub Domain:填写预留成功的二级子域名;- 地区:
China Top。
更新以后查看在线隧道列表。
最终使用固定公网地址再次访问。
Rustpad 页面可以正常打开。
19. 这套 Rustpad 更适合哪类需求?
我会把它留给这些场景:
- 临时开会一起记;
- 快速共享一段代码;
- 课堂多人记笔记;
- 临时写清单;
- 不想为短期协作注册新账号。
它真正擅长的是:
把多人实时协作做得足够轻。
总结
整条链路可以压缩成:
极空间 → SSH → Docker → /docker/rustpad → 汉化镜像 2025.08.28 → 3030:3030 → Rustpad → 6 位文档码 → 用户名 → Share Link → cpolar → 3030 随机公网 → 固定二级子域名 rustpad。
对我来说,Rustpad 最有吸引力的不是“功能比在线文档更多”,而是打开、分享、一起写这三步足够直接。只要提前想清楚文档持久化和可选 E2EE 的边界,它就很适合作为一套轻量、随手可用的临时协作工具。
这篇笔记就先到这里,后面用到新的思路或者发现有问题再补充。
评论 (0)
暂无评论