最近需要集成onlyoffice,大致看了一下,非常简单(不要轻易立flag)。但在实际集成过程中遇到了各种各样的问题。
一、容器部署
docker-compose.yml如下:
version: '3.3'
services:
onlyoffice:
image: onlyoffice/documentserver:8.1
container_name: onlyoffice
volumes:
- ./cpfile/header-logo_s.svg:/var/www/onlyoffice/documentserver/web-apps/apps/common/main/resources/img/header/header-logo_s.svg
- ./onlyoffice/log:/var/log/onlyoffice
- ./onlyoffice/data:/var/www/onlyoffice/Data
- ./onlyoffice/lib:/var/lib/onlyoffice
- ./onlyoffice/db:/var/lib/postgresql
ports:
- 8793:80
environment:
- JWT_ENABLED="false"
restart: always
volumes第一条- ./cpfile/header-logo_s.svg:/var/www/onlyoffice/documentserver/web-apps/apps/common/main/resources/img/header/header-logo_s.svg,是为了修改onlyoffice编辑器左上角的LOGO,自己根据LOGO的大小设计一个svg图标即可,图标尺寸:354*83
然后访问http://192.168.2.2:8793 显示如下图时说明onlyoffice服务端部署成功。
二、容器构建前端
官方给提供了各种语言的DEMO,还是很贴心的,地址:Language-specific examples - ONLYOFFICE Api Documentation
我使用了较为熟悉的nodejs,可以根据官方的说明,下载nodejs源代码进行部署,我用了容器,所以先构建Dockfile:
# 使用官方 Node.js 镜像作为基础镜像
FROM node:latest
# 设置工作目录
WORKDIR /work
# 将项目文件复制到容器中
COPY ./cpfile/app .
# 将npm源设置为淘宝镜像
RUN npm config set registry https://registry.npmmirror.com/
# 安装项目依赖
RUN npm install
# 暴露端口
EXPOSE 3000
# 启动应用
CMD ["node", "bin/www"]
构建docker-compose.yml:
version: '3'
services:
onlyoffice-doc:
container_name: onlyoffice-doc
build:
context: .
restart: always
volumes:
- ./cpfile/app/config/default.json:/work/config/default.json
- /opt/data/:/work/files
networks:
- general
ports:
- "9903:3000"
networks:
general:
external: true
注意volumes的/opt/data/:/work/files,目的是把宿主机的/opt/data/目录映射到容器的/work/files路径,这样创建的文档就会保存在宿主机,避免文档丢失。
然后下载官方给的nodejs源码,放在cpfile/app/目录下。
修改/cpfile/app/config/default.json,将"siteUrl"改为onlyoffice服务端地址: "http://192.168.2.2:8793/"
然后启动容器,通过9903端口进行访问即可,这是官方给的demo,内置了一个demo用户系统,如果想完美集成到自己的系统中,难度还是不小的,最后对官方的node代码一顿魔改,实现了通过token进行用户数据互通。
常见错误一:打开文档时提示下载失败
onlyoffice在创建文档的时候,会复制一个空白文档到指定的文件存储目录下,提示下载失败,大概率是文件夹没有写入权限导致的。
具体可进入容器,然后cd /var/log/onlyoffice/documentserver,查看各文件夹下的out.log日志文件来定位错误。
错误二:The document security token is not correctly formed
新版Onlyoffice的(JWT_ENABLED) 现在设置默认为 true。因此,解决方案是以“JWT_ENABLED=false”启动onlyoffice。所以onlyoffice的docker-compose.yml中我加了environment:- JWT_ENABLED="false"
错误三:提示:这份文件无法保存。请检查连接设置或联系你的管理员。当你点击ok按钮,系统将提示你下载文档。
经过对onlyoffice的开发不断增加对onlyoffice的理解也更多了。这个问题的主要原因是onlyoffice服务端无法调用我们传给onlyoffice服务器的回调地址或是我们传的回调接口返回的值是onlyoffice服务端无法识别的。如文档中要求接口返回{\"error\":0}表示回调成功。结果我们的接口没有返回或返回的值不是{\"error\":0},这时onlyoffice服务端就是认为接口无法保存文档,这时这个提示就出来了。
错误四:下载文档空白
不知道大家有没有发现,当编辑完文档,然后关闭页面时,如果点击下载文档按钮,那么文档的内容可能会显示空白,或者文档的内容没有更新,仍然保持上次编辑时的内容,但如果点击在线编辑,却发现文档内容实际上已经变了。最后发现,当文档关闭后,word文档并没有实时的更新内容,需等待3-5秒,再下载文档时,才会正常。
而且发现,文档在线编辑过程中,word文件不会保存数据,只有在线编辑网页关闭3-4秒后,内容才会被写入word文件。
错误五:OnlyOffice前端界面出现“下载失败”
如果发现日志文件中存在:Error: DNS lookup xxx.xxx.xxx.xx(family:undefined, host:undefined) is not allowed. Because, It is private IP address.那么需要编辑配置文件允许私有ip通过:
编辑docker中/etc/onlyoffice/documentserver/default.json
下的内容
"request-filtering-agent" : {
"allowPrivateIPAddress": true,
"allowMetaIPAddress": true
},
参考:
onlyoffice修改左上角的logo - 微雨洛辰 - 博客园 (cnblogs.com)
使用docker部署onlyoffice插件步骤及踩坑问题(win10/linux)_docker onlyoffice-CSDN博客
OnlyOffice 打开文档时提示下载失败 - 浪淘沙& - 博客园 (cnblogs.com)
[错误]文档安全令牌格式不正确 ·期刊 #516 ·米凯尔-克让/Filestash (github.com)
onlyoffice报 error self signed certificate导致download failed错误处理_onlyoffice download failed-CSDN博客
onlyoffice8.1.0基础环境搭建+部署+demo可直接运行【在线试用】 最简单的入门_onlyoffice部署-CSDN博客 简单使用HTML集成OnlyOffice_onlyoffice_一个需求_InfoQ写作社区
ONLYOFFICE8.0部署集成(vue+java)_vue3集成onlyoffice-CSDN博客
onlyoffice 开发问题整理. 提示:这份文件无法保存。请检查连接设置或联系你的管理员。当你点击ok按钮,系统将提示你下载文档。_这份文件无法保存 onlyoffice-CSDN博客
使用Docker部署Node.js_docker nodejs-CSDN博客
docker onlyoffice 7.2.2-版本logo修改_mob64ca12ef217e的技术博客_51CTO博客