09 - 在线协作
09 - 在线协作
掌握 Nextcloud 与 OnlyOffice / Collabora 的集成配置,实现在线文档实时协作编辑。
9.1 在线协作方案对比
Nextcloud 支持两种主流在线文档协作方案:
| 特性 | OnlyOffice | Collabora Online |
|---|---|---|
| 产品类型 | 独立商业办公套件 | 基于 LibreOffice 的在线版本 |
| 开源协议 | AGPLv3 (社区版) | MPL 2.0 |
| 格式支持 | DOCX, XLSX, PPTX (原生) | ODF, DOCX, XLSX 等 |
| 协作体验 | 极佳(Google Docs 级别) | 良好 |
| 功能丰富度 | 非常丰富 | 丰富 |
| 资源占用 | 较高(推荐 4GB+ RAM) | 较高(推荐 2GB+ RAM) |
| 许可限制 | 社区版限 20 并发 | 无限制(自建) |
| 部署复杂度 | 中等 | 中等 |
| 推荐场景 | 需要最佳协作体验 | 需要 ODF 支持 / 无限制 |
9.2 OnlyOffice 集成
方案一:使用 Nextcloud 内置 OnlyOffice
Nextcloud 22+ 支持内置 OnlyOffice 功能(需社区服务器)。
方案二:自建 OnlyOffice Document Server
Docker 部署
# 创建数据目录
mkdir -p /data/onlyoffice/{data,logs,lib,rabbitmq,redis,postgres}
# 启动 OnlyOffice Document Server
docker run -d \
--name onlyoffice \
-p 8080:80 \
-v /data/onlyoffice/data:/var/www/onlyoffice/Data \
-v /data/onlyoffice/logs:/var/log/onlyoffice \
-v /data/onlyoffice/lib:/var/lib/onlyoffice \
-v /data/onlyoffice/rabbitmq:/var/lib/rabbitmq \
-v /data/onlyoffice/redis:/var/lib/redis \
-v /data/onlyoffice/postgres:/var/lib/postgresql \
-e JWT_ENABLED=true \
-e JWT_SECRET=YourJWTSecretKey \
onlyoffice/documentserver:latest
Docker Compose 部署
# docker-compose.yml
version: '3.8'
services:
onlyoffice:
image: onlyoffice/documentserver:latest
container_name: onlyoffice
restart: unless-stopped
ports:
- "8080:80"
environment:
- JWT_ENABLED=true
- JWT_SECRET=YourJWTSecretKey
volumes:
- ./data:/var/www/onlyoffice/Data
- ./logs:/var/log/onlyoffice
- onlyoffice_lib:/var/lib/onlyoffice
- onlyoffice_rabbitmq:/var/lib/rabbitmq
- onlyoffice_redis:/var/lib/redis
- onlyoffice_postgres:/var/lib/postgresql
volumes:
onlyoffice_lib:
onlyoffice_rabbitmq:
onlyoffice_redis:
onlyoffice_postgres:
docker compose up -d
Nginx 反向代理配置
server {
listen 443 ssl http2;
server_name office.example.com;
ssl_certificate /etc/letsencrypt/live/office.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/office.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
client_max_body_size 100M;
}
}
安装 Nextcloud OnlyOffice 应用
# 安装 OnlyOffice 集成应用
sudo -u www-data php /var/www/nextcloud/occ app:install onlyoffice
配置连接:
# 设置 OnlyOffice 服务器地址
sudo -u www-data php /var/www/nextcloud/occ config:app:set \
onlyoffice DocumentServerUrl --value="https://office.example.com/"
# 设置 JWT 密钥
sudo -u www-data php /var/www/nextcloud/occ config:app:set \
onlyoffice jwt_secret --value="YourJWTSecretKey"
或通过管理界面配置:
设置 → 管理 → OnlyOffice
Document Server URL: https://office.example.com/
Secret Key (JWT): YourJWTSecretKey
高级设置:
├── 默认打开格式: DOCX
├── 编辑器主题: 现代深色
└── 启用聊天: ✅
9.3 Collabora Online 集成
Docker 部署 Collabora
# 使用官方 Docker 镜像
docker run -d \
--name collabora \
-p 9980:9980 \
-e "domain=cloud\\.example\\.com" \
-e "username=admin" \
-e "password=AdminPassword" \
-e "extra_params=--o:ssl.enable=false" \
--cap-add MKNOD \
collabora/code:latest
Docker Compose 部署
# docker-compose.yml
version: '3.8'
services:
collabora:
image: collabora/code:latest
container_name: collabora
restart: unless-stopped
ports:
- "9980:9980"
environment:
- domain=cloud\.example\.com
- username=admin
- password=AdminPassword
- extra_params=--o:ssl.enable=false
cap_add:
- MKNOD
volumes:
- collabora_data:/opt/collaboraoffice/user
volumes:
collabora_data:
Nginx 反向代理
server {
listen 443 ssl http2;
server_name collabora.example.com;
ssl_certificate /etc/letsencrypt/live/collabora.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/collabora.example.com/privkey.pem;
# Allow large uploads
client_max_body_size 200M;
# Collabora Discovery
location /hosting/discovery {
proxy_pass http://127.0.0.1:9980;
proxy_set_header Host $http_host;
}
# Collabora WebSocket
location ~ ^/lool/(.*)/ws$ {
proxy_pass http://127.0.0.1:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_read_proxy 36000s;
}
# Collabora Admin Console
location /lool/adminws {
proxy_pass http://127.0.0.1:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
# Collabora Main
location / {
proxy_pass http://127.0.0.1:9980;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
安装 Collabora 应用
sudo -u www-data php /var/www/nextcloud/occ app:install richdocuments
配置:
# 设置 Collabora 服务器地址
sudo -u www-data php /var/www/nextcloud/occ config:app:set \
richdocuments wopi_url --value="https://collabora.example.com"
# 添加可信域名
sudo -u www-data php /var/www/nextcloud/occ config:system:set \
richdocuments wopi_allowlist --type=array --value="10.0.0.0/8"
9.4 实时协作编辑
协作模式
┌─────────────────────────────────────────────────────────┐
│ 实时协作编辑模式 │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 用户 A │ │ 用户 B │ │ 用户 C │ │
│ │ 光标红 │ │ 光标蓝 │ │ 光标绿 │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
│ └─────────────┼─────────────┘ │
│ │ │
│ ┌──────┴──────┐ │
│ │ 协作服务器 │ │
│ │(OnlyOffice/ │ │
│ │ Collabora) │ │
│ └──────┬──────┘ │
│ │ │
│ ┌──────┴──────┐ │
│ │ Nextcloud │ │
│ │ 存储 │ │
│ └─────────────┘ │
└─────────────────────────────────────────────────────────┘
协作特性
| 特性 | OnlyOffice | Collabora |
|---|---|---|
| 实时光标显示 | ✅ | ✅ |
| 评论功能 | ✅ | ✅ |
| 版本历史 | ✅ | ✅ |
| 跟踪修订 | ✅ | ✅ |
| 聊天 | ✅ | ✅ |
| @提及 | ✅ | ❌ |
| 表单填写 | ✅ | ✅ |
| 宏支持 | ✅ | ✅ |
| 条件格式 | ✅ | ✅ |
| 数据透视表 | ✅ | ⚠️ 有限 |
9.5 文件版本控制
Nextcloud 内置文件版本管理,无需额外配置。
版本管理机制
文件变更过程:
├── v1: report.docx (初始版本)
├── v2: report.docx (第 1 次修改)
├── v3: report.docx (第 2 次修改)
└── ... (最多保留配置的版本数)
版本配置
// config/config.php
// 版本保留间隔(秒)- 使用指数退避
'versions_retention_obligation' => 'auto,60',
// 格式: 'min,max'
// auto = 根据文件大小自动决定
// 数字 = 天数
// 示例:最少保留 7 天,最多保留 60 天
// 'versions_retention_obligation' => '7,60',
// 禁用版本管理(不推荐)
// 'versions_retention_obligation' => 'disabled',
// 版本最大数量
// 'file_storage.save_version_files' => true,
版本操作
# 查看文件版本(通过 API)
curl -s -u admin:password \
"https://cloud.example.com/remote.php/dav/versions/admin/versions/12345" \
-X PROPFIND -H "Depth: 1" | xmllint --format -
# 恢复文件版本
# 通过 Web 界面:文件详情 → 版本 → 点击恢复按钮
版本清理
# 手动触发版本清理
sudo -u www-data php /var/www/nextcloud/occ versions:cleanup
# 清理所有用户的旧版本
sudo -u www-data php /var/www/nextcloud/occ versions:cleanup --all
9.6 文件锁定
锁定机制
锁定类型:
├── 协作锁 (Collaborative Lock) - OnlyOffice/Collabora 编辑时自动锁定
├── 手动锁 (Manual Lock) - 用户手动锁定文件
└── 系统锁 (System Lock) - 系统操作时锁定
手动锁定
# 通过 WebDAV 锁定文件
curl -s -u admin:password \
-X LOCK \
"https://cloud.example.com/remote.php/dav/files/admin/report.docx" \
-H "Timeout: Second-3600" \
-d '<?xml version="1.0" encoding="UTF-8"?>
<D:lockinfo xmlns:D="DAV:">
<D:lockscope><D:exclusive/></D:lockscope>
<D:locktype><D:write/></D:locktype>
<D:owner>admin</D:owner>
</D:lockinfo>'
锁定配置
// config/config.php
// 文件锁定已默认启用,配合 Redis 使用效果最佳
'filelocking.enabled' => true,
'memcache.locking' => '\\OC\\Memcache\\Redis',
9.7 协作场景最佳实践
场景一:团队文档协作
配置步骤:
1. 安装 OnlyOffice 或 Collabora
2. 创建团队群组文件夹
3. 设置共享权限(读写)
4. 团队成员直接在 Web 界面编辑文档
5. 利用版本历史追踪变更
6. 使用评论功能进行文档评审
场景二:合同审批流程
流程:
1. 创建合同模板(OnlyOffice 模板)
2. 指定编辑者填写合同内容
3. 启用跟踪修订功能
4. 审批人查看修订并添加评论
5. 批准后锁定文件(防篡改)
6. 下载 PDF 最终版本
场景三:远程会议
集成方案:
1. Talk 创建视频会议
2. 会议中共享文档链接
3. 参会者同时编辑议程/纪要
4. Deck 创建行动项
5. 日历安排下次会议
9.8 注意事项
- 资源需求: OnlyOffice/Collabora 都需要较大内存,建议至少 4GB RAM
- 网络延迟: 协作体验与网络延迟密切相关,建议部署在低延迟网络
- JWT 安全: OnlyOffice 务必配置 JWT 认证,防止未授权访问
- SSL: 生产环境必须使用 HTTPS,否则浏览器会阻止 WebSocket 连接
- 大文件: 超过 100MB 的文档编辑可能会卡顿,建议拆分
- 版本清理: 定期清理旧版本,避免存储空间浪费
9.9 扩展阅读
- OnlyOffice 文档
- Collabora Online 文档
- Nextcloud OnlyOffice 集成
- Nextcloud Collabora 集成
- WebDAV LOCK 规范 (RFC 4918)