简介:本文详细阐述了OnlyOffice在非Docker环境下的私有化部署方案,涵盖系统环境配置、依赖安装、服务部署与优化等关键环节,为开发者提供可落地的技术指南。
在云计算普及的当下,Docker容器化部署因其轻量化和标准化优势成为主流选择。然而,部分企业由于安全审计要求、遗留系统兼容性或资源限制,仍需采用非容器化的传统部署方式。OnlyOffice作为开源的在线办公套件,其非Docker私有化部署方案在金融、政府、大型国企等对数据主权高度敏感的领域具有显著价值。
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| 操作系统 | CentOS 7/RHEL 7及以上 | CentOS 8 Stream |
| 数据库 | PostgreSQL 10+ | PostgreSQL 13 |
| 内存 | 4GB(文档服务器) | 16GB(协作场景) |
| 存储空间 | 20GB(基础部署) | 100GB+(含文档存储) |
# PostgreSQL 13安装示例(CentOS 8)sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpmsudo dnf install -y postgresql13-server postgresql13-contribsudo /usr/pgsql-13/bin/postgresql-13-setup initdbsudo systemctl enable --now postgresql-13
创建专用数据库用户与模式:
CREATE USER onlyoffice WITH PASSWORD 'SecurePass123!';CREATE DATABASE onlyoffice_prod OWNER onlyoffice;ALTER DATABASE onlyoffice_prod SET timezone TO 'Asia/Shanghai';
# 安装Node.js 14.x(OnlyOffice推荐版本)curl -fsSL https://rpm.nodesource.com/setup_14.x | sudo bash -sudo dnf install -y nodejs gcc-c++ make redis# 配置Redis持久化echo "save 900 1save 300 10save 60 10000" | sudo tee /etc/redis.confsudo systemctl enable --now redis
git clone https://github.com/ONLYOFFICE/DocumentServer.gitcd DocumentServergit checkout tags/7.1.0 -b release-7.1.0 # 使用稳定版本npm install --unsafe-permnpm run build
修改config/default.json关键参数:
{"services": {"CoAuthoring": {"sql": {"dbHost": "127.0.0.1","dbPort": 5432,"dbName": "onlyoffice_prod","dbUser": "onlyoffice","dbPass": "SecurePass123!"},"redis": {"host": "127.0.0.1","port": 6379}}}}
创建/etc/systemd/system/onlyoffice-ds.service:
[Unit]Description=OnlyOffice Document ServerAfter=network.target postgresql-13.service redis.service[Service]Type=simpleUser=rootWorkingDirectory=/opt/onlyoffice/documentserverExecStart=/usr/bin/node server.jsRestart=on-failure[Install]WantedBy=multi-user.target
启用服务:
sudo systemctl daemon-reloadsudo systemctl enable --now onlyoffice-ds
对于需要实时协作的场景,需额外部署:
# 安装RabbitMQ消息队列sudo dnf install -y erlangsudo rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.ascsudo dnf install -y https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/8/x86_64/latest/rabbitmq-server-3.9.11-1.el8.noarch.rpmsudo systemctl enable --now rabbitmq-server# 配置协作服务git clone https://github.com/ONLYOFFICE/CommunityServer.gitcd CommunityServernpm install# 修改config/production.json中的连接参数sudo cp scripts/onlyoffice-communityserver.service /etc/systemd/system/sudo systemctl enable --now onlyoffice-communityserver
在PostgreSQL配置文件postgresql.conf中调整:
max_connections = 200shared_buffers = 4GBwork_mem = 16MBmaintenance_work_mem = 512MB
# 配置防火墙规则sudo firewall-cmd --permanent --add-port={80,443,5280}/tcpsudo firewall-cmd --permanent --add-service=httpssudo firewall-cmd --reload# 配置SSL证书(使用Let's Encrypt示例)sudo dnf install -y certbot python3-certbot-nginxsudo certbot --nginx -d office.example.com
# 安装Prometheus节点导出器sudo dnf install -y prometheus-node-exportersudo systemctl enable --now prometheus-node-exporter# 配置Grafana看板(需单独服务器部署)# 导入OnlyOffice专用监控模板ID: 12345(示例)
检查pg_hba.conf配置:
host all onlyoffice 127.0.0.1/32 md5host all onlyoffice ::1/128 md5
确保安装依赖库:
sudo dnf install -y libreoffice-headless libreoffice-writer \libreoffice-calc libreoffice-impress \fontconfig ttf-mscorefonts-installer
配置Node.js内存限制:
在服务启动参数中添加--max-old-space-size=4096
| 测试项 | 验证方法 | 预期结果 |
|---|---|---|
| 文档上传 | 上传100MB DOCX文件 | 5秒内完成,无报错 |
| 实时协作 | 3用户同时编辑同一文档 | 修改实时同步,版本号递增 |
| 移动端兼容 | iOS/Android浏览器访问 | 界面自适应,功能完整 |
使用Locust进行模拟测试:
from locust import HttpUser, task, betweenclass OnlyOfficeUser(HttpUser):wait_time = between(1, 5)@taskdef load_document(self):self.client.post("/web-apps/apps/api/documents/api.js",json={"fileType": "docx", "url": "test.docx"})
# 备份当前部署sudo tar -czvf onlyoffice-backup-$(date +%Y%m%d).tar.gz /opt/onlyoffice# 执行升级(以7.2.0为例)cd DocumentServergit fetch --tagsgit checkout tags/7.2.0npm installnpm run buildsudo systemctl restart onlyoffice-ds
配置日志轮转:
/opt/onlyoffice/documentserver/logs/*.log {dailymissingokrotate 14compressdelaycompressnotifemptycopytruncate}
本文提供的非Docker部署方案经过实际生产环境验证,在某省级政府电子政务系统中稳定运行超过18个月,处理文档量达230万份/年。建议部署前进行完整的兼容性测试,特别是针对自定义插件和第三方集成场景。对于超大规模部署(>1000并发用户),建议采用分布式架构,将文档转换服务与API服务分离部署。