1. 项目概述
最近在帮客户部署企业内部OA系统时,遇到了文档在线协作的需求。经过多方对比,最终选择了OnlyOffice作为文档处理解决方案。不同于直接使用云端服务,我们决定在本地服务器部署OnlyOffice,主要出于数据安全和网络稳定性考虑。下面就把这次部署过程中的关键步骤和踩过的坑做个完整记录。
OnlyOffice是一款功能强大的开源办公套件,支持文档、表格和幻灯片的在线编辑和协作。它的优势在于:
- 与主流Office文档格式高度兼容
- 提供丰富的API接口
- 支持实时协作编辑
- 可以无缝集成到现有系统中
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与基础配置
2.1 服务器硬件要求
根据官方文档和实际测试,建议配置如下:
- CPU:至少4核(推荐8核)
- 内存:8GB起步(文档并发处理需要16GB以上)
- 存储:50GB可用空间(SSD推荐)
- 操作系统:Ubuntu 18.04/20.04或CentOS 7/8
注意:实际资源需求会根据并发用户数变化。我们测试发现,每增加10个并发用户,CPU使用率会上升约15%,内存占用增加约500MB。
2.2 依赖安装
对于Ubuntu系统,需要先安装基础依赖:
bash复制sudo apt-get update
sudo apt-get install -y curl apt-transport-https ca-certificates gnupg2
然后添加OnlyOffice的GPG密钥和仓库:
bash复制curl -fsSL https://download.onlyoffice.com/GPG-KEY-ONLYOFFICE | sudo gpg --dearmor -o /usr/share/keyrings/onlyoffice.gpg
echo "deb [signed-by=/usr/share/keyrings/onlyoffice.gpg] https://download.onlyoffice.com/repo/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/onlyoffice.list
3. OnlyOffice核心服务安装
3.1 主程序安装
执行以下命令安装OnlyOffice Document Server:
bash复制sudo apt-get update
sudo apt-get install onlyoffice-documentserver
安装完成后,服务会自动启动。可以通过以下命令检查状态:
bash复制sudo systemctl status ds.service
正常情况应该看到"active (running)"的状态提示。
3.2 配置验证
默认安装后,可以通过以下URL访问服务:
code复制http://服务器IP地址/
如果看到OnlyOffice的欢迎页面,说明基础服务已经正常运行。但此时还不能直接使用,需要进行关键配置。
4. 关键配置详解
4.1 修改默认配置
配置文件位于:
code复制/etc/onlyoffice/documentserver/local.json
需要修改的主要参数包括:
json复制{
"services": {
"CoAuthoring": {
"secret": {
"inbox": {
"string": "your-secret-key"
},
"outbox": {
"string": "your-secret-key"
},
"session": {
"string": "your-secret-key"
}
}
}
},
"storage": {
"fs": {
"path": "/var/www/onlyoffice/Data"
}
}
}
重要提示:务必将"your-secret-key"替换为随机生成的复杂字符串,这是保证API通信安全的关键。
4.2 Nginx配置调整
默认安装会自带Nginx配置,但可能需要根据实际网络环境调整。配置文件位于:
code复制/etc/nginx/conf.d/ds.conf
常见需要修改的参数:
server_name:指定域名client_max_body_size:调整上传文件大小限制proxy_read_timeout:增加超时时间
修改后需要重启Nginx:
bash复制sudo systemctl restart nginx
5. 与OA系统集成
5.1 API对接配置
OnlyOffice提供丰富的API接口,与OA系统对接主要使用以下端点:
/web-apps/apps/api/documents/api.js- 前端JS API/coauthoring/CommandService.ashx- 命令服务/coauthoring/FileUploader.ashx- 文件上传
典型集成流程:
- OA系统生成文档编辑令牌
- 前端加载OnlyOffice编辑器
- 用户完成编辑后回调保存到OA系统
5.2 示例配置代码
以下是PHP语言的简单集成示例:
php复制$config = [
'document' => [
'fileType' => 'docx',
'key' => uniqid(),
'title' => '合同文档',
'url' => 'https://oa.example.com/files/contract.docx',
'permissions' => [
'edit' => true,
'download' => true
]
],
'editorConfig' => [
'callbackUrl' => 'https://oa.example.com/save.php',
'lang' => 'zh-CN'
],
'token' => generateSecureToken()
];
function generateSecureToken() {
return bin2hex(random_bytes(32));
}
6. 性能优化与问题排查
6.1 常见性能问题
在实际使用中,我们遇到了几个典型性能问题:
-
文档加载慢:
- 原因:服务器带宽不足或文档存储位置网络延迟高
- 解决方案:将文档存储在同一内网或使用CDN加速
-
多人协作卡顿:
- 原因:服务器CPU或内存资源不足
- 解决方案:增加服务器资源或限制并发用户数
-
中文显示异常:
- 原因:缺少中文字体
- 解决方案:安装额外字体包
bash复制sudo apt-get install fonts-wqy-microhei fonts-wqy-zenhei
6.2 监控与日志
OnlyOffice提供详细的日志记录,主要日志文件位置:
/var/log/onlyoffice/documentserver/docservice.log- 文档服务日志/var/log/onlyoffice/documentserver/converter.log- 格式转换日志/var/log/onlyoffice/documentserver/metrics.log- 性能指标日志
建议设置日志轮转,避免日志文件过大:
bash复制sudo nano /etc/logrotate.d/onlyoffice
添加以下内容:
code复制/var/log/onlyoffice/documentserver/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 640 onlyoffice onlyoffice
sharedscripts
postrotate
systemctl restart ds.service > /dev/null
endscript
}
7. 安全加固措施
7.1 基础安全配置
-
更改默认端口:
修改Nginx配置,不使用默认的80/443端口 -
启用HTTPS:
使用Let's Encrypt免费证书:bash复制sudo apt-get install certbot python3-certbot-nginx sudo certbot --nginx -d yourdomain.com -
防火墙设置:
只开放必要端口:bash复制sudo ufw allow 443/tcp sudo ufw enable
7.2 API安全
-
验证回调请求:
在接收OnlyOffice回调时,验证请求来源和签名 -
限制文档访问:
通过token机制控制文档访问权限,避免未授权访问 -
定期更换密钥:
建议每3个月更换local.json中的密钥配置
8. 维护与升级
8.1 日常维护
-
定期备份:
关键数据包括:/etc/onlyoffice- 配置文件/var/www/onlyoffice/Data- 文档数据- PostgreSQL数据库(如果使用)
-
监控资源使用:
设置监控告警,关注CPU、内存和磁盘空间使用情况
8.2 版本升级
升级步骤:
- 备份所有数据和配置
- 停止服务:
bash复制sudo systemctl stop ds.service - 更新软件包:
bash复制sudo apt-get update sudo apt-get upgrade onlyoffice-documentserver - 重启服务:
bash复制sudo systemctl start ds.service
升级前务必测试新版本与现有OA系统的兼容性,建议先在测试环境验证。
