聊聊不注册也能多人一起写?用 Rustpad 在 NAS 上搭一个轻量协作文本编辑器

整理一篇学习笔记,把看到的一些要点和自己的理解都记下来。

不注册也能多人一起写?用 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)

暂无评论