开源协作办公这条赛道,真正把「端到端加密」做成默认能力的产品并不多,CryptPad 是其中最被低估的一个。它和 OnlyOffice、Nextcloud、etherpad 最大的区别,不在于功能清单的长短,而在于一个架构判断:文档内容在离开浏览器之前就已经被加密,服务端落盘的永远只是密文。这意味着运营者即便拿到了整块硬盘,也读不出任何一页文档的明文。这个特性直接改写了服务器租用的资源账——因为重活(加解密、冲突合并)都在客户端跑,服务端的 CPU 反而不是瓶颈,真正的压力转移到了内存里的会话、存储里的加密 blob,以及实时协作那条 WebSocket 长连接上。
这篇文章不堆参数、不抄官网,而是把 CryptPad 在「服务器租用」这个具体场景下的资源账,按六个维度逐一拆开算:运行时与 Web 服务、内存与会话、存储与附件、带宽与实时同步、备份与升级、机位与供电。每个维度我都给出可落地的估算口径,并配一张四种部署形态的横向对比表。文末再给一张选型清单和一份误区复盘。所有配置与价格均为示例或预估,实际以官方文档实时说明或咨询确认为准。
一万网络深耕 IDC 行业 19 年(成立于 2007 年),在华南、华东、华北及中国香港、海外多地整合自营节点与 BGP 多线资源,提供服务器租用、机柜托管与带宽接入的一体化交付;具体机型/带宽/报价以官网实时或咨询确认为准。下面进入第一维拆解。
CryptPad 的服务端是一个标准的 Node.js 应用,底层用 Express 承接 HTTP 请求,靠单条事件循环处理绝大多数 I/O。官方安装文档明确要求 Node.js 的 Active LTS 分支,社区镜像普遍基于 18.x 及以上版本构建。这里要先破除一个常见误解:很多人看到「加密办公套件」就直觉地给服务端配高主频多核 CPU,担心加解密拖垮机器。但 CryptPad 的加密发生在浏览器里,服务端收到的是已经处理好的密文,它要做的事情只有三件——把密文写进存储、把某个频道(channel)的更新广播给订阅者、在需要时回放历史。这三件事里没有一件是 CPU 密集型的。
那么单实例的 Node.js 在协作场景下能撑多少?经验上,单核 2.0GHz 左右的 vCPU 跑 CryptPad,承担几十到上百个「人在线但编辑不频繁」的会话基本没有压力;真正考验的是「同一频道多人同时键入」的广播峰值。由于服务端只是把增量消息原样转发给其他订阅者,CPU 占用随同时在线频道数和单频道活跃人数线性上升,但斜率很缓。一个常被忽略的点是:Node.js 的 event loop 一旦被某个同步操作阻塞(比如默认的 SQLite 写入在大事务下锁表),所有频道的实时性会一起劣化。所以运行时维度的核心结论不是「要多强的 CPU」,而是「别让存储层把单线程卡住」。
部署层面,官方推荐两核起步,这更多是为了给系统进程、日志轮转、备份脚本留出余量,而不是 CryptPad 本身吃满两核。如果你租的是 1 核 2G 的入门机型,在用户量极小的内部小团队场景下也能跑,但一旦同时开多个文档频道,建议至少给到 2 核 4G 这套更稳的基线。端口上,CryptPad 默认 3000 承接 HTTP、3003 承接 WebSocket 实时同步,前面必须套一层支持 WebSocket Upgrade 的反向代理(Nginx 或 Caddy 均可)来做 HTTPS 卸载——这一步不是可选项,是生产环境的硬性前提。
反向代理这一层值得多说两句,因为它直接影响实时协作的体感。Nginx 需要显式声明 proxy_http_version 1.1 并把 Upgrade 与 Connection 头正确透传,否则 WebSocket 会在建立后几秒被静默断开,表现就是「编辑着编辑着同步就停了,刷新才恢复」。Caddy 用一行 reverse_proxy 加一个 @websocket 路径匹配即可自动处理 Upgrade,对不想手写长配置的团队更省心。无论选哪个,TLS 证书都要覆盖主域名和沙箱域名两个源,缺一个都会导致编辑器加载异常。这一层吃的是反向代理自身的轻量资源,和 CryptPad 进程几乎互不干扰,所以把它和应用放在同一台机器、或前置到独立的边缘节点都行,关键是别让代理成为单点却不自知。
既然 CPU 不是主角,那内存才是 CryptPad 租用机型的真正分水岭。要理解内存花在哪,得先看清它的会话模型。每个打开的文档在 CryptPad 里对应一个频道(chanID,一段 32 位十六进制标识),客户端通过 WebSocket 订阅频道、收发增量。服务端为了把实时消息低延迟地广播出去,会把活跃频道的会话状态保留在进程内存里。也就是说,内存占用 ≈ 活跃 WebSocket 连接数 × 单连接常驻状态 + 活跃频道的历史缓冲。
社区镜像给出的经验数字很有参考意义:空闲态常驻内存大约 150MB 起步,按推荐配置跑起来后稳定在 300MB 上下。但这只是「没人动」的基线。一旦进入协作高峰——几十人同时开着文档、白板、看板——每个连接都会常驻一段缓冲区,内存会明显抬升。粗略的估算口径可以记成:每多一批活跃频道,预留几十 MB 到一百多 MB 的弹性空间。对于 50 人以内的团队,2G 内存通常够用;超过这个数,建议直接上 4G,把水位压在 60% 以下,避免 OOM killer 在协作正酣时误杀进程。
另一个内存相关的坑是「僵尸频道」。CryptPad 默认有数据保留策略:未被注册用户固定的文档保留约 90 天、已删除数据先归档约 15 天、不活跃账号约 365 天,这些由后台清理脚本(evict 系列)周期性处理。如果这台机器上还跑着别的业务,内存要留足给这些定时任务瞬时占用的峰值。所以内存维度的选型逻辑是:先看同时在线的频道峰值,再叠加系统余量,而不是去追 CPU 核数。
CryptPad 的存储设计很克制。默认情况下,它不依赖任何外部数据库,数据落在几个目录里:blob(加密的媒体与附件大块)、block(分块数据)、data/datastore(账号、 drive、团队元数据等结构化密文)。这套文件型存储对运维极其友好——备份就是拷目录,迁移就是搬文件夹。但克制背后藏着一个真实的膨胀曲线:文档本身不大,真正吃空间的是用户往里塞的图片、PDF、音视频附件,它们全部以加密 blob 的形态堆在磁盘上,且随团队使用时间线性增长。
官方给出的起步盘是 20GB,社区镜像说应用本身仅占约 200MB、其余随文档增长。这个「随文档增长」在纯文本协作阶段慢得可以忽略,但一旦团队把 CryptPad 当成内部知识库、往里传设计稿和录屏,几个月就可能吃掉十几 GB。所以存储维度的核心判断是:系统盘给 20–40GB 起步只是「能跑」,真正要算的是附件增长率。如果业务上预计有频繁的大文件协作,建议把 blob 目录单独挂一块大容量云盘或独立数据盘,而不是和业务系统挤在同一块系统盘上。
换数据库是这一维的另一个决策点。CryptPad 支持把后端从默认文件型切换到 PostgreSQL,配置项里改 dbType 即可。什么时候该换?当单实例的并发写入开始触发文件锁、或者你需要跨实例共享同一份数据时。注意:切换数据库改变的是「元数据和结构化密文的落盘方式」,媒体附件 blob 依然走独立的存储路径,两者是分开规划的。换言之,存储维度的账要拆成两笔算:一笔是结构化密文(小、增长慢、可入 PostgreSQL),一笔是媒体 blob(大、增长快、宜外置)。
顺着膨胀曲线再算一笔具体的账,方便你做容量规划。假设一个 80 人的团队,每周往 CryptPad 里传约 200 个平均 5MB 的加密附件,那么一个月新增的 blob 约 4GB、一年就是约 48GB,这还没算文档自身 revisions 累积的.block 增量。系统盘若只给 40G,半年就会亮红灯。所以给存储留余量时,别用「现在有多大」去估,要用「半年后有多大」去估,并且给清理脚本留足运转空间——evict 系列脚本先把过期数据归档再删除,归档目录本身也要占盘,预算里得把它算进去,否则会出现「清理脚本想清空间,却发现归档目录把盘占满了」的尴尬循环。
在 CryptPad 的带宽账里,传统「网页托管」那套按请求数估峰值的思路完全失效。它的流量主角是 3003 端口那条 WebSocket 长连接。每个在线的协作者都挂着一条近乎常驻的连接,文档里的每一次键入、每一次光标移动、每一次看板拖拽,都会产生实时增量消息在客户端之间往返。单条消息很小,但乘以「连接数 × 编辑频率 × 文档时长」,总量相当可观。
怎么粗估?可以套一个简单模型:单频道每分钟的同步流量 ≈ 同时编辑人数 × 人均每分钟操作数 × 单操作增量大小(含协议开销,通常几百字节到一两 KB)。一个 10 人同时coding的文档,假设每人每分钟 30 次操作、平均增量 1KB,单频道每分钟就是 300KB 上下,一小时约 18MB;如果公司有 20 个这样的活跃频道并行,一天光实时同步就可能上 GB 级。这还没算附件上传下载——它们走的是另一条 XHR 加密通道,单文件体积直接进带宽。
带宽维度的结论很明确:选租用机型时,不要只盯「标称 100M 共享」这类含糊表述,要确认是否有独享带宽或明确的计费上限,避免实时协作高峰被限速后全员卡顿。对于中小团队,按预估把带宽基线放在每月数百 GB 量级通常宽裕;如果是跨地域、多地同时在线编辑,带宽成本会显著抬升,这时候更该优先考虑把实例放在离多数用户近的节点,而不是无脑加带宽。需要具体计费口径的,以官网实时或咨询确认为准,本文不给出虚构报价。
还有一个常被忽视的带宽细节:附件的上传下载走的是加密 XHR 通道,单文件多大就占多大带宽,且因为是密文传输,服务端无法做去重或压缩加速。一个 50MB 的设计稿在内部网传一次,就是 50MB 实打实的上下行;十个人各下一遍,就是 500MB。这类流量和实时同步的小消息完全不同,它会在瞬间拉高带宽峰值,如果你的计费模式对峰值限速或按 95 计费,就可能吃到意料之外的成本。对策是把大附件场景引导到对象存储外置形态,让 blob 的读写走独立的存储桶出口,把实时协作的 WebSocket 带宽和附件传输的带宽在账面上分开,既好核算也好转嫁。
CryptPad 最迷人也最冷峻的一点,是它把「数据主权」和「运维责任」硬生生劈成两半。服务端运维者拥有磁盘、拥有进程、拥有备份,却唯独不拥有读取数据的能力——因为解密密钥只在用户浏览器里。这意味着一个最容易被忽略的事实:你做的每一份服务器级备份,备份的都是密文。如果某天用户丢了账号密钥(CryptPad 的账号密钥由用户名密码派生,服务端从不经手明文密码),那份密文对你而言就永久成了不可读的乱码。
所以备份维度的正确姿势是「双轨」:一轨是运维侧对 blob、block、data、datastore 目录做周期性快照,保证磁盘故障可恢复;另一轨是强烈建议用户侧定期导出重要文档明文或加密归档。运营者能担保的是「数据不丢」,担保不了「用户忘密后能复原内容」。这一边界必须在服务说明里写清楚,否则后续纠纷全算在运维头上。
升级维度的坑更隐蔽。CryptPad 升级时若从源码安装,需 git 拉取新标签、npm 安装依赖、重新构建;若用容器镜像,则换 tag 重启即可,但数据卷必须独立挂出,否则一重启容器数据清零。官方还给了后台清理脚本的定时任务范式(evict-inactive、evict-archived 用 cron 每月两次跑),这些脚本本身也要纳入维护清单。一句话:升级动作的成本不在算力,在于「升级前后数据卷的连续性」和「双域名配置不被改坏」。
版本锚定是升级维度里另一个值得强调的纪律。社区容器镜像有官方维护的版本标签,切忌用 latest 这类浮动标签直接上生产——一次无感知的自动拉新,可能带来配置字段变更或行为差异,而端到端加密场景下任何配置偏差都可能让部分老文档的密钥派生对不上。稳妥做法是锁定具体版本号,先在隔离环境验证升级路径,再对生产做有计划地切换。这和在传统 Web 应用上升级的区别在于:CryptPad 一旦配置写错,影响的不只是页面打不开,而是用户可能暂时进不了自己的加密数据,沟通的代价更高。
机位与供电在传统 IDC 视角里是独立的成本项,但放到 CryptPad 这种「状态在内存、数据在磁盘、实时靠长连接」的应用上,它们不该孤立算,而要并回部署形态里一起权衡。单实例部署时,机器宕机 = 全员协作中断、所有 WebSocket 断连、未落盘的频道缓冲丢失(虽然最终能从存储回放,但体验是硬中断)。因此机位维度的关键不是「选哪个机房更便宜」,而是「这台机器掉电的代价你是否承受得起」。
对内部小团队,单机托管+定期快照通常可接受;对把 CryptPad 当生产协作中枢的组织,则需要考虑机房供电等级、是否双路市电、是否有冗余网络上行,以及能否做多实例。这里没有放之四海皆准的答案,但有清晰的取舍线:冗余每加一层,月成本与运维复杂度都上一个台阶。把机位供电和下面的部署形态对比表对照看,选型会清楚很多。一万网络在华南、华东、华北及海外多地整合了自营节点与 BGP 多线资源,机柜托管与带宽接入可提供一体化交付,具体供电与机位等级以官网实时或咨询确认为准,本文不虚构任何机房等级承诺。
把机位和带宽一起看,还有一个现实收益值得提:BGP 多线接入对 CryptPad 这类「长连接、重实时」的应用,价值不只是「南北互通不卡」,更在于某一条运营商上行抖动时,连接能切到更稳的路径,减少 WebSocket 的瞬时断连重连。对跨地域协作的团队,这条多线冗余带来的体验提升,往往比单纯加带宽更明显。所以有条件时,机位选型应把「网络上行冗余」和「供电冗余」并列评估,而不是只比单价。需要说明的是,本文涉及的机位与供电等级均为示例性描述,实际以官网实时或咨询确认为准,不做任何过度承诺。
把前面六维的账收拢,落到「到底怎么部署」这个决策上,可以按复杂度和冗余度分出四种典型形态。下面这张表把它们的资源基线、存储方案、并发上限、运维成本与适用团队放在同一视野里对比。表中的 CPU、内存、存储均按示例与预估口径给出,实际请以官方文档或咨询确认为准。
| 部署形态 | CPU 与内存基线(示例/预估) | 存储与数据库方案 | 并发与实时同步能力 | 运维与扩展成本 | 适用团队规模 |
|---|---|---|---|---|---|
| 单机文件型 | 1–2 核 / 2–4G 内存(预估) | 默认 blob+block+datastore 目录,系统盘 20–40G 起步 | 单 Node.js 进程,数十到上百在线会话,单频道高频编辑为上限 | 最低,备份即拷目录,宕机即全员中断 | 20 人内内部小团队、个人试用 |
| PostgreSQL 分离 | 应用 2 核 4G + 数据库 2 核 4G(示例) | 结构化密文入 PostgreSQL,媒体 blob 仍走独立盘 | 数据库解耦后写入锁竞争下降,并发更稳 | 中等,多维护一个数据库实例与备份 | 50–200 人、有专职运维的部门 |
| 对象存储外置 | 应用 2–4 核 4–8G(预估) | blob 附件外挂对象存储,结构化数据可留文件型或入 PG | 附件膨胀不再压系统盘,实时同步不受影响 | 中等偏高,需管存储桶权限与跨区流量 | 频繁传大文件的协作型团队 |
| 高可用多实例 | ≥2 个应用节点各 2–4 核 4–8G + 共享 PG + 共享存储(示例) | PG 共享、blob 走共享/对象存储,前端多节点负载 | 单点宕机不影响协作,水平扩展上限高 | 最高,需负载均衡、状态一致性与多节点监控 | 200 人以上或对可用性敏感的机构 |
这张表的关键读法不是「越往下越好」,而是「按团队规模倒推冗余」。20 人内的团队硬上高可用,多半是把钱花在永远用不上的容灾上;200 人以上的机构还用单机文件型,则会在某次磁盘故障里体会到「加密虽好、恢复无能」的尴尬。下一节复盘实战里最容易踩的几个坑。
第一坑,是把默认文件型存储当成「永远够用」。在用户少、文档小的阶段,它确实省心;但一旦某个频道被几十人同时编辑,或者用户开始往里传设计源文件和录屏,你会发现两个现象同时出现:磁盘被加密 blob 悄悄吃满,以及偶尔的写入阻塞让实时同步出现可感知的卡顿。对策不是立刻上 Kubernetes,而是先给 blob 挂独立大盘、设监控告警,把「磁盘水位」纳入日常巡检。
第二坑,是低估 WebSocket 长连接对文件描述符的消耗。官方容器镜像特意把 ulimit 的 nofile 调到很高(示例为软硬各 100 万),原因就是每个连接都占一个 fd,几百人同时在线时 fd 数会非常可观。如果宿主机没相应调高上限,连接数一涨就报「too many open files」,表现就是部分用户连不上协作频道。租机器时别忘了确认系统级与容器级的 fd 上限配置。
第三坑,是忘了双域名隔离的安全前提。CryptPad 要求主域名(处理账号与加密操作)与沙箱域名(加载编辑界面做 XSS 隔离)是两个不同源,很多一键部署模板为了省事把它们指向同一地址,等于主动放弃了官方推荐的隔离模型。对存敏感材料的部署,这一步不能省,否则浏览器端一旦被注入,密钥有暴露风险。
第四坑,是把「服务器测不出内容」误解成「运营者无需做任何安全」。端到端加密保护的是数据机密性,不保护主机本身。如果这台机器还开着密码登录的 SSH、跑着一堆未打补丁的旧服务、或者把 CryptPad 和其他高危业务混部,攻击者虽然读不到文档明文,却仍能通过控制主机来中断服务、篡改交付的前端代码(也就是官方白皮书里点名的「恶意运营者」攻击面)。所以主机 hardening、最小权限、定期补丁这些老生常谈,在 CryptPad 场景里一样不能省,它们和端到端加密是互补而非替代关系。
判断要不要从单机走向对象存储外置,看的是「附件增长率」而非「人数」。纯文档协作出不了多少 blob,单机够用;一旦团队把 CryptPad 当素材中转站,blob 目录就会以月为单位膨胀,这时外挂对象存储比反复加系统盘更划算,也更容易做生命周期管理(冷附件归档、过期清理)。
判断要不要上多实例高可用,看的是「中断代价的忍受度」。内部小团队周末宕机几小时,第二天补回来就行;但把 CryptPad 嵌进客户交付流程的团队,一次协作中断可能直接耽误项目节点。后者才值得为负载均衡、共享数据库、共享存储付出额外的运维成本。中间地带(50–200 人)通常 PostgreSQL 分离就够,它用中等成本解决了最痛的写入锁与数据一致性问题,又不必背负多实例的复杂度。
还有一个经常被问到的问题:能不能用更轻的「主备双机」代替完整多实例?可以,但要认清它的边界。主备切换解决的是「机器挂了能起来」,解决不了「切的过程中实时会话会断、活跃频道缓冲要重建」。如果团队对几秒到几分钟的中断敏感,主备并不等于高可用,它只是把恢复时间从「人工介入」缩短到「自动拉起」。真正的无缝,需要多实例共享存储与会话状态,代价也确实更高。所以在给客户做方案时,我会直接把「能接受多长中断」当成分水岭问题先问清楚,而不是一上来就报最贵的架构。
把视角拉到运营责任层,有三件事必须写进服务条款或用户须知:其一,服务端只存密文,运营者无法、也不会去读取用户文档内容,这是 CryptPad 的架构承诺,不是营销话术;其二,用户密钥由自身账号派生,遗忘后运营侧无能为力,因此强烈建议用户定期导出重要资料;其三,媒体附件与结构化数据分开规划后,备份策略也要分开设计——blob 体积大、变化慢,可做低频大快照,datastore 体积小、变化快,宜高频增量。
合规层面,CryptPad 的设计天然契合对数据驻留、最小化采集有要求的场景;但「加密」不等于「免负责任」,运营者仍需保证主机安全(禁用密码 SSH、及时打系统补丁、限制可登录人数),这部分是服务端自身的安全基线,和端到端加密是两回事,不能因为「反正读不到内容」就放松主机 hardening。
落到执行,给一份按团队规模倒推的配置清单(均为示例/预估口径,实际以官网实时或咨询确认为准):
一、20 人内试用或内部小团队:2 核 4G、系统盘 40G、共享带宽数百 GB/月量级、默认文件型存储、单机+目录级快照。先把协作跑顺,再谈扩展。
二、50–200 人部门级:应用 2 核 4G + PostgreSQL 分离(另 2 核 4G)、blob 挂独立数据盘或对象存储、带宽按活跃频道预估上探、加 cron 清理脚本与监控告警。
三、200 人以上或对可用性敏感:≥2 应用节点(各 2–4 核 4–8G)+ 共享 PostgreSQL + 共享/对象存储 + 前端负载均衡 + 多节点存活监控,机位优先选供电与上行冗余更完整的机房。
四、所有形态都不变的前提:双域名隔离、反向代理做 HTTPS 与 WebSocket Upgrade、数据卷独立于容器/系统、备份策略区分 blob 与 datastore。这四条是底线,少一条都不算生产级部署。
一万网络深耕 IDC 行业 19 年(成立于 2007 年),在华南、华东、华北及中国香港、海外多地整合自营节点与 BGP 多线资源,提供服务器租用、机柜托管与带宽接入的一体化交付;不同机型的实测承载与到货周期以官网实时或咨询确认为准,本文不给出任何虚构的精确报价与交付承诺。把这份清单和前面的六维拆解对照,选型就不会跑偏。
误区一:加密重所以服务端要强 CPU。错。加解密在客户端,服务端 CPU 反而最闲,瓶颈在内存会话与存储带宽。
误区二:默认配置等于最优配置。错。默认文件型只为「能跑」,遇到附件膨胀或高频并发必须主动外置或换库。
误区三:运维做了备份就等于用户数据万无一失。错。备份的是密文,用户丢密钥后内容对任何人不可读,责任边界必须提前讲清。
误区四:一键部署模板开箱即安全。错。双域名隔离、fd 上限、反向代理这些安全与性能前提常被模板省略,生产前需逐项核对。
误区五:人越多越该无脑堆高可用。错。冗余要对齐中断代价,小团队上多实例是浪费,大团队用单机是冒险,按规模倒推才是正解。
把六维拆解的账、四种形态的对比、以及上面这份误区清单一起看,CryptPad 在服务器租用场景下的部署轮廓就清晰了:它不挑算力,挑的是内存水位、存储规划、带宽模型和运维纪律。选对形态、划清责任、守住双域名与备份底线,这套端到端加密的协作办公套件,完全可以成为中小团队既私密又省心的内部协作底座。
一万网络深耕 IDC 行业 19 年(成立于 2007 年),在华南、华东、华北及中国香港、海外多地整合自营节点与 BGP 多线资源,提供服务器租用、机柜托管与带宽接入的一体化交付;具体机型/带宽/报价以官网实时或咨询确认为准CryptPad 这类协作系统的实际并发承载,建议结合一万网络的机型与带宽档位做压测后确认。
Copyright © 2013-2020 idc10000.net. All Rights Reserved. 一万网络 科技有限公司 版权所有 深圳市科技有限公司 粤ICP备07026347号
本网站的域名注册业务代理北京新网数码信息技术有限公司的产品