先说说我自己的经历。前几年在家办公流行起来之后,我最头疼的一件事就是文档版本管理:今天这台电脑改了表格,明天跑另一台机器继续写报告,好不容易用U盘拷过去了,发现对方电脑装的是WPS,我用的Office 365,排版直接崩了。后来我在NAS上通过Docker部署了一套网页版办公三件套,浏览器打开就能在线修改Word、Excel和PPT,这个问题才算彻底解决。
很多人一听到“网页版在线修改”,第一反应是去用Office 365或者WPS的云文档。但对有NAS的人来说,更合适的思路是把数据留存在自己家里:用Docker部署OnlyOffice Document Server,搭建一套完全私有的在线Office,文档全程不出局域网,还能支持多人同时编辑。这套方案免费、可离线、不依赖公有云,最适合小团队、家庭共享和爱折腾的技术玩家。下面我把完整的部署过程、关键参数和踩过的坑一次讲清楚。
1. 整体设计与选型逻辑
1.1 需求盘点:我要的“在线修改”到底是什么
在动手部署之前,我建议先想清楚一个问题:你要的“在线修改”,是偶尔应急看一眼、改几个字,还是真的把它当主力Office用?这两种需求对应的方案完全不同。
如果只是临时预览一下Word表格、偶尔改个PPT页码,NAS自带的文件预览功能或者轻量的在线查看器就够用了,没必要上重套件。但如果你的场景和我类似——经常要在多台电脑之间继续编辑同一份文档,希望改动即时保存,甚至需要和同事一起改一份项目排期表,那就需要一个真正能“编辑”而不是“预览”的网页版Office。
我最终的需求清单有三个核心点:一是文档格式必须兼容主流Office,不能让同事发来一份.docx到我这变成乱码;二是编辑结果要能被保存,最好能直接保存回NAS的存储空间;三是数据不出内网,不经过任何第三方云服务器。顺着这三条需求去筛方案,目标一下子就清晰了。
1.2 候选方案横评:OnlyOffice、Collabora、付费云套件
目前能在NAS上自部署的开源在线办公套件,主流就是OnlyOffice Document Server和Collabora Online(基于LibreOffice内核)。另外还有直接用Office 365、WPS云文档这类商业云方案,以及群晖自带的Synology Office、飞牛自带的在线预览等NAS厂商方案。
| 方案 | 私有化部署 | 免费/开源 | 文件格式兼容性 | 多人在线协同 | 资源占用 | 适用场景 |
|---|---|---|---|---|---|---|
| OnlyOffice Doc Server | 支持 | 社区版免费 | 很好,高保真兼容docx/xlsx/pptx | 支持 | 偏高,约2-4GB内存 | 小团队/家庭主力在线Office |
| Collabora Online | 支持 | 开源免费 | 一般,复杂版式可能错位 | 支持 | 较高,内存敏感 | 和Nextcloud深度绑定用户 |
| Office 365网页版 | 不支持 | 需订阅 | 最好 | 支持 | 无本地资源消耗 | 团队协同首选,但数据在云端 |
| WPS云文档 | 不支持 | 免费但有限制 | 较好 | 支持 | 无 | 个人轻量使用 |
| 群晖Synology Office | 仅限群晖 | 免费 | 一般,仅限自家套件 | 支持 | 需群晖机型支持 | 群晖用户且对格式要求不高 |
实测下来,OnlyOffice最大的优势是文件格式兼容性。特别是pptx和docx的复杂排版,打开后几乎不会变形,这一点比Collabora稳定太多。Collabora的嵌入能力虽然强,但模板演示文稿里稍微有点动画、艺术字就容易崩,给同事演示时非常尴尬。
1.3 Docker是NAS部署这类服务的最优解
为什么用Docker而不是直接在NAS上安装套件包?原因有三个。
一是环境隔离。OnlyOffice依赖特定的运行时库和PostgreSQL数据库,如果直接在宿主机上装,很容易污染NAS的系统环境,卸载时还会残留一堆依赖。Docker容器把应用和依赖打包在一起,删容器就等于卸载干净,对NAS这种“稳定压倒一切”的设备来说极为重要。
二是迁移方便。NAS升级、换机、从群晖迁移到飞牛,只要把docker-compose.yml和数据卷目录一起搬过去,docker compose up -d一条命令就能在新机器上恢复全套服务。如果你后续有刷机、换NAS的计划,这一点会让你省掉大量重复配置的时间。
三是可以精细控制资源。NAS上往往同时跑着下载工具、影音服务、监控存储等一堆任务,OnlyOffice这种吃内存的应用如果失控,会拖垮整台设备。用Docker可以设置CPU和内存上限,把它关进“笼子”里运行。
另外多说一句,这种“本地部署私有化服务”的逻辑,和最近大家热衷在NAS上跑Ollama、部署大语言模型是完全相通的,核心诉求都是数据留在自己手里,用浏览器访问服务即可。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 部署前的准备与关键配置点
2.1 硬件底线:内存决定体验
部署之前先掂量一下你手里NAS的配置。OnlyOffice Document Server官方建议内存不少于2GB,低于这个数字容器会启动失败,或者启动后进程不稳定、经常自动退出。如果你的NAS总内存只有2GB,而且还要同时跑下载、照片索引、监控等服务,我强烈不建议再部署这个套件,否则整机都会跟着卡。
实际体验上,4GB内存是“流畅编辑”的及格线。低于4GB时,打开大文件(比如几十MB的Excel)或者多人同时编辑,容器会产生明显卡顿,CPU会被拖到100%持续很久。如果你用的是玩客云刷机改的NAS这类小主机,只有1GB内存,那就趁早放弃这个方案,换回本地Office处理文件就好。
2.2 Docker工作目录与路径设计
第二个需要提前规划的是数据目录。OnlyOffice在运行时会写入四类数据:日志、配置与证书、文档缓存、数据库文件。官方推荐的挂载结构是这样:
| 容器内路径 | 宿主机建议目录 | 用途 |
|---|---|---|
/var/log/onlyoffice |
/volume1/docker/onlyoffice/logs |
日志文件,排错时看这里 |
/var/www/onlyoffice/Data |
/volume1/docker/onlyoffice/data |
证书、缓存、配置 |
/var/lib/onlyoffice |
/volume1/docker/onlyoffice/lib |
文件转换中间数据 |
/var/lib/postgresql |
/volume1/docker/onlyoffice/db |
PostgreSQL数据库文件 |
/usr/share/fonts/truetype/custom |
/volume1/docker/onlyoffice/fonts |
自定义字体目录,中文显示必用 |
群晖的Docker默认路径在/volume1/docker下,飞牛NAS则是/vol1/docker或者你的存储池路径。无论哪种,建议把所有数据集中到一个目录(比如onlyoffice)下面,后续备份时只需要打包这一个大文件夹即可。
2.3 端口、JWT安全设置:两个必须提前理解的参数
端口映射上,容器内部默认监听80端口,宿主机侧建议映射到不常用的高位端口,我用的是8090:80。为什么不直接映射80?因为NAS上80端口经常会和Web管理界面、其他服务冲突。而且端口映射后,你实际通过http://你的NAS_IP:8090访问,占用空间很小,也不会干扰其他容器。
JWT_SECRET是OnlyOffice 7.2版本之后强制启用的安全机制。简单说,它是OnlyOffice和外部文件管理器之间的“共享密码”,用来验证回调请求不是伪造的。这个参数很多人部署时会忽略,结果集成Nextcloud或者别的网盘时,文档一直保存失败,查半天才发现是JWT密钥对不上。
部署时务必显式设置这个环境变量,比如JWT_SECRET=my-strong-secret-key,不要用默认生成的随机值。因为默认值在容器重建后可能会变化,一旦变了,之前集成的文件管理器就无法保存文档了,排查起来非常痛苦。
3. 完整实操:在NAS上部署OnlyOffice
3.1 图形化部署:群晖/飞牛Docker管理器点选方式
如果你的NAS带图形化Docker管理界面,整个部署过程其实就是“点鼠标”。以群晖为例,打开Docker套件,进入“注册表”,搜索onlyoffice/documentserver,选择官方镜像(关注拉取量,官方标识为OnlyOffice官方发布),点击下载。镜像比较大,建议在夜间执行。
镜像下载完成后,进入“映像”页面双击创建容器。需要配置的项目我会逐个说清楚:
- 名称:填
onlyoffice,方便识别。 - 端口设置:本地端口填
8090,容器端口填80,协议选TCP。 - 高级设置里的“启用自动重新启动”,这里务必勾上,否则NAS重启后容器不会自动拉起。
- 环境变量:新增一个变量,键
JWT_SECRET,值填一串你自己的复杂密码。 - 存储空间:按上文表格依次添加5个文件夹映射,注意容器路径不能写错。
- 资源限制:如果NAS内存紧张,可以在“限制内存”里填
4096(单位MB),CPU限制填2到4个核心。
飞牛NAS的Docker管理器也是类似的逻辑,只是界面布局略有差异,照着对应字段填就行。刷了飞牛的海康改机、玩客云改机用户,只要内存达标,同样适用这套操作。
3.2 命令行部署:docker run和docker compose两种写法
命令行部署的通用性更好,无论群晖、飞牛、威联通还是其他Linux系统,只要装了Docker都能跑。先看docker run版本:
bash复制# 先创建数据目录,把路径改为你自己的实际存储路径
mkdir -p /volume1/docker/onlyoffice/{logs,data,lib,db,fonts}
docker run -i -t -d \
--name onlyoffice \
--restart unless-stopped \
-p 8090:80 \
-e JWT_SECRET=my-strong-secret-key \
-v /volume1/docker/onlyoffice/logs:/var/log/onlyoffice \
-v /volume1/docker/onlyoffice/data:/var/www/onlyoffice/Data \
-v /volume1/docker/onlyoffice/lib:/var/lib/onlyoffice \
-v /volume1/docker/onlyoffice/db:/var/lib/postgresql \
-v /volume1/docker/onlyoffice/fonts:/usr/share/fonts/truetype/custom \
onlyoffice/documentserver
如果你习惯用docker-compose管理容器(我强烈推荐这种方式),同一份配置也可以组织成下面的文件。我把这套配置保存为/volume1/docker/onlyoffice/docker-compose.yml:
yaml复制version: "3.8"
services:
onlyoffice:
image: onlyoffice/documentserver:latest
container_name: onlyoffice
restart: unless-stopped
ports:
- "8090:80"
environment:
- JWT_SECRET=my-strong-secret-key
volumes:
- /volume1/docker/onlyoffice/logs:/var/log/onlyoffice
- /volume1/docker/onlyoffice/data:/var/www/onlyoffice/Data
- /volume1/docker/onlyoffice/lib:/var/lib/onlyoffice
- /volume1/docker/onlyoffice/db:/var/lib/postgresql
- /volume1/docker/onlyoffice/fonts:/usr/share/fonts/truetype/custom
mem_limit: 4g
cpus: 4
然后执行:
bash复制cd /volume1/docker/onlyoffice
docker compose up -d
启动过程会拉取镜像并创建容器,第一次启动需要一分钟左右初始化数据库,此时访问页面可能会显示“正在加载”或者404,耐心等待一到两分钟再刷新。
3.3 首次访问:验证Word、Excel、PPT在线编辑
启动完成后,浏览器访问http://你的NAS_IP:8090,正常会跳转到欢迎页/welcome/。这个页面就是OnlyOffice自带的“演示文档管理器”,里面可以直接新建Word文档、上传本地Excel、新建PPT,相当于一个简易的在线Office试用环境。
我建议在正式使用前,至少做三组验证测试:
第一,新建一个Word文档,输入中文、调整字体和行距,保存关闭后再次打开,确认排版没有错乱。这一步能确认字体渲染是否正常,如果中文显示出来全是方块,说明容器内缺少中文字体,需要按第5节的避坑方案处理。
第二,上传一个大一点的本地Excel文件,比如几万行那种,拖动滚动条看流畅度。OnlyOffice在低配NAS上处理大表格会比较吃力,这一步能提前暴露性能问题。
第三,打开同一个文档的两个编辑页面(新开一个浏览器无痕窗口即可),在两个窗口同时修改内容并保存,确认实时协同功能正常、最后的保存不会互相覆盖。OnlyOffice的多人协同体验是经过验证的,多人同时改一个表格时,不同单元格的修改会自动合并,这一点比想象中可靠。
4. 让办公三件套真正好用:文件管理与访问优化
4.1 从“临时编辑”到“正式使用”:三个集成思路
用OnlyOffice欢迎页直接上传文件编辑,只能算“体验模式”,因为那个演示页面不支持系统化的文件目录管理,文件长期堆积后很难找。想让它变成真正能日常用的在线Office,主流路线有三个。
第一条路线是部署Nextcloud,然后安装OnlyOffice官方连接器。Nextcloud负责文件存储、目录结构、用户权限,OnlyOffice负责打开文档时的在线编辑。用户在Nextcloud里点一个.docx,浏览器会调用OnlyOffice编辑器,保存时文件直接写回Nextcloud的数据目录。这个方案的优点是文件管理能力强、权限体系完整,缺点是相当于又多部署了一套网盘系统,占用内存和技术复杂度都会上升。
第二条路线是用OnlyOffice Workspace(原名TeamLab)。这个镜像在文档服务器的基础上自带了文件管理、协作空间、项目管理功能,相当于一套All-in-One的协同办公平台。但要注意,免费的社区版限制同时在线用户数,一般限制在10人以内,超出需要商业授权。家庭用户或三五人的小团队用起来绰绰有余,但内存要求更高,建议8GB起。
第三条路线最省事:如果家庭用户只是偶尔编辑文档,不追求完整的目录管理,直接用欢迎页当成“临时工作台”用。每份做完的文件通过下载保存到NAS的共享文件夹归档。我家里就是这么用的:写个季度总结、改个孩子的课程表,直接在欢迎页操作,做完了下载到Documents目录,完全不需要再维护一套网盘系统。
4.2 内网访问和外网访问的正确姿势
内网访问最简单,同一局域网内的设备直接访问http://NAS_IP:8090就行,手机、平板、电脑用浏览器都能打开。手机端的体验虽然是响应式布局,但工具栏会比较拥挤,适合应急查看和轻度修改,不适合长时间重度编辑。
外网访问则需要谨慎。我给出的建议是分优先级:首选使用SD-WAN组网工具,这类工具能把NAS和你的手机、笔记本组成一个虚拟局域网,无论身在何处,访问体验就和在家一样,数据全程加密,又不需要在路由器上暴露端口。其次才是路由器DDNS加端口转发,但这里我要强调一个实际经验:把OnlyOffice的8090端口直接暴露到公网有安全风险,因为办公文档往往是比较敏感的资产。如果一定要用端口转发,前提是你在前面加一层正经的反向代理,并且启用HTTPS证书。
我自己的处理方式是用组网工具,效果很稳。出差住酒店时打开电脑,访问逻辑就是自动在局域网里找到一个叫onlyoffice的主机,编辑文档和在家时没有任何区别。
4.3 周边玩法:和WebDAV、rclone的联动思路
如果你平时习惯用WebDAV把NAS挂载成电脑的本地磁盘,或者喜欢用rclone把NAS的目录映射到云盘,那这套OnlyOffice完全可以和这些工作流叠加。思路是:把OnlyOffice生成的文档最终归档到WebDAV共享出来的目录,这样电脑本地磁盘里也能看到、还能直接用本地Office再度编辑。等于在浏览器在线协作和本地文件管理之间搭了一座桥。
比如可以在NAS上开一个共享文件夹office_backup,通过WebDAV共享给局域网客户端,然后在OnlyOffice欢迎页编辑完文档后下载到该文件夹。这样文件既能在浏览器里在线协作,又能在资源管理器里当本地文件操作,两边兼顾。不过要注意不要同时用OnlyOffice和本地Office打开同一个文件,不然保存时容易产生冲突版本。
5. 使用中的常见问题与避坑心得
5.1 部署期高频问题速查表
| 症状 | 可能原因 | 解决方案 |
|---|---|---|
| 容器启动后立刻退出,日志显示数据库初始化失败 | 内存不足 | 降到2GB仍然失败,建议关闭NAS上其他容器释放内存 |
| 宿主机端口被占用,容器启动报端口冲突 | 8090被其他服务占用 | docker ps查看占用情况,换成8091:80等高端口 |
访问IP:8090页面空白或无法连接 |
容器还在初始化 | 首次启动需等待1-2分钟,执行docker logs onlyoffice查看进度 |
| 页面能打开,但编辑文档一直转圈 | 服务器内存或CPU资源不足 | 登录NAS查看资源占用,必要时提升mem_limit上限 |
| 输入中文全是方块 | 容器缺少中文字体 | 按5.2节方案安装字体 |
5.2 中文字体显示方块的问题
这个是所有中文用户一定会遇到的问题,而且往往是在创建第一个Word文档时才发现。OnlyOffice官方镜像默认带的字体以DejaVu、Liberation为主,缺少常见中文字体,打开含中文的文档会渲染成方框。
解决办法是提前准备好中文字体文件,我建议下载思源黑体或者霞鹜文楷、也可以放一份常用的中文字体ttf文件。操作上,把字体文件拷贝到宿主机映射的fonts目录,然后进入容器刷新字体缓存:
bash复制docker exec -it onlyoffice /bin/bash
apt-get update && apt-get install -y fontconfig
fc-cache -f
exit
由于部署时已经做了-v /volume1/docker/onlyoffice/fonts:/usr/share/fonts/truetype/custom的映射,以后往hosts目录丢字体文件,再执行一次fc-cache -f并重启容器即可。这个坑在部署阶段直接处理掉,能省掉后面大量麻烦。
5.3 文档保存失败、二次打开变只读的排查经验
文档保存失败是使用期最让人抓狂的问题,我遇到过的原因主要有三个。
第一种是JWT密钥不一致。如果你额外部署了Nextcloud并做了集成,保存时OnlyOffice会把文档回传给文件管理器,如果两边配置的JWT_SECRET对不上,就会提示保存失败。排查方法是在两边配置里检查同一个密钥字段,确保完全一致。
第二种是容器无法访问文件管理器的回调地址。OnlyOffice保存文档时会向文件管理器发起回调请求,如果文件管理器和OnlyOffice不在同一个网络,或者防火墙拦住了回调端口,文档也会保存失败。这种情况在Docker用bridge网络和host网络混用时特别常见。
第三种最普通但最容易忽略:磁盘满了。NAS看起来还有空间,但分配给OnlyOffice数据卷的目录所在存储池已经写满,导致数据库无法写入。遇到保存失败,先检查docker df和磁盘空间,能省不少排查时间。
二次打开文件变只读,多半是上次编辑没有正常退出,文件旁边残留了扩展名为.lock的锁文件。找到文件所在目录删除.lock文件,再打开就恢复正常了。我在使用过程中遇到过好几次强行刷新页面导致锁未释放的情况,建议养成编辑结束先关闭标签页的习惯,能明显减少这类故障。
5.4 运维建议:备份、更新和资源控制
OnlyOffice日常运行其实非常稳定,一旦部署好,一年半载基本不用管。但有两个运维动作值得做。
第一是数据卷定期备份。logs目录不用管,data、lib、db这三个目录必须备份。最简单的方法是在NAS的定时任务里,每天凌晨把整个onlyoffice目录打包到一个专门的备份目录。我一般保留最近7天的备份,这样即使数据库损坏、或者自己手滑改了配置导致容器起不来,也能通过恢复目录快速重建。
第二是镜像更新。OnlyOffice官方更新节奏不算快,通常大版本会带来性能和兼容性优化。更新流程建议是:拉取新镜像、停止当前容器、删除容器、重新docker compose up -d。注意删除容器时不要加-v参数,否则数据卷会被一起冲掉,那就悔之晚矣。
最后再分享一个我在实际使用中踩过几次坑之后总结的小技巧:不要给OnlyOffice所在的存储卷和系统盘放在同一个硬盘分区里。NAS一般有多个盘位,最好把OnlyOffice的数据卷放在和系统盘不一样的存储池。当单块硬盘出现故障时,系统还能正常启动,恢复起来会从容很多。
这套网页版办公三件套我在家里跑了将近一年,中途经历过NAS升级、容器迁移、手机在外网临时改文件,整体稳定性相当不错。如果你也想把文档协作这件事彻底收归到自己手里,按上面这套方案来部署,应该不会走太多弯路。
