Nextcloud + OnlyOffice实现在线编辑 2024-08-02 生活,记录 暂无评论 217 次阅读 ## Nextcloud + OnlyOffice实现在线编辑 目的为了实现能够通过浏览器打开 excel、word 等办公文件,无需在客户端下载使用软件打开,方便任何平台都能够编辑办公文件。 网上推荐使用 Onlyoffice,OnlyOffice 是一个开源的办公套件,它提供了一系列的办公应用程序,包括文档编辑器、电子表格编辑器、演示文稿编辑器以及表单编辑器。这些应用程序旨在与Microsoft Office的文件格式兼容,包括.docx、.xlsx和.pptx等。OnlyOffice 与 NextCloud 的集成度也很好,直接可以在应用商城就能下载配置。 ### 前提条件 实现任何时候任何地点都能编辑 excel,那么就需要 Nextcloud 有外网地址,OnlyOffice 的服务也需要支持外网地址。 如果你的 NextCloud 是 https 协议,那么 OnlyOffice 也需要。 OnlyOffice 的加载资源会比较大,有条件的可以在阿里云上申请一下 OSS。 另外,也是最重要的一点,NextCloud 要在应用商城里边下载插件,需要用到科学上网。 如果以上条件均能满足,那么,恭喜你可以拥有属于自己的协同办公应用。 ### OnlyOffice 服务搭建 OnlyOffice 服务搭建很简单,我这里使用的是 Docker 容器化,映射端口到外网即可。 ```yml version: '2' services: onlyoffice: image: onlyoffice/documentserver container_name: onlyoffice ports: - "28080:80" restart: always ``` 我使用的是旧版的 portainer,所以只支持 version:2。 细心的朋友可以在启动项目时候看到日志: ```log JWT is enabled by default. A random secret is generated automatically. Run the command "docker exec xxxx sudo documentserver-jwt-status.sh" to get information about JWT ``` 在宿主机执行命令获取 JWT 秘钥,之后的 NextCloud 会用到。 ### NextCloud 安装 OnlyOffice 之前也提到了,需要科学上网,那么如果开了代理端口的朋友们可以找到 NextCloud 里边 `config.php` 文件,追加如下命令: ```shell 'proxy' => '192.168.0.130:1081' ``` 我这里使用的 http 端口代理。重启 NextCloud 服务,生效配置。 使用管理员登录 NextCloud(必须要是管理员),点击应用,如果出现空白,手动删除nextcloud目录下 apps.json 文件后,再次 ctrl + F5 刷新浏览器页面,具体路径如下: ```bash ./data/appdata_*/appstore/apps.json ``` 其中appdata_*,` * `为随机字符串,文件夹可能有多个,每个都找找,具体查看你的服务器上的路径。 OnlyOffice 插件在 Files 里边,可以 Ctrl + F + F 查找,最后下载并应用。 ### 配置 OnlyOffice 如果插件安装完成后,点击右上角头像,管理设置,在左边菜单栏中找到 ONLYOFFICE。配置两个地方:`ONLYOFFICE Docs地址`和 `秘钥(留空为关闭)`,第一个是 OnlyOffice 的外网地址,另一个是之前获取的 JWT 秘钥。 这里有个其他的问题,我并没有 443 端口的权限,所以我选择了其他端口,例如:8843 端口,那么在填写 OnlyOffice 的时候会提示报错,有关于 SSL 443 端口的错误。我这里中间加了一层 Nginx 做 cert 证书,代理转发请求到本地的 localhost:28080 服务。那么这里转发的时候也需要带上 8843 端口,所以我的 Nginx 是这样的: ```nginx server { listen 8443 ssl http2; server_name ~^onlyoffice.*$; charset utf-8; ssl_certificate_key /root/.acme.sh/*.xx.top_ecc/*.xx.top.key; ssl_certificate /root/.acme.sh/*.xx.top_ecc/fullchain.cer; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'HIGH:!aNULL:!MD5'; ssl_prefer_server_ciphers on; client_max_body_size 40G; client_body_timeout 600; client_header_timeout 600; proxy_read_timeout 600; proxy_connect_timeout 600; #### onlyoffice二次开发,优化fonts请求速度的问题 location ~* /8.1.1-26/fonts(.*) { return https://xxx.oss-cn-beijing.aliyuncs.com/onlyoffice/onlyoffice/fonts$1?$args; } location ~* /8.1.1-26/sdkjs/(.*) { return https://xxx.oss-cn-beijing.aliyuncs.com/onlyoffice/onlyoffice/sdkjs/$1?$args; } location / { proxy_pass http://localhost:28080; proxy_set_header Host $host:$server_port; 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 Host $host:$server_port; 需要带上请求端口 $server_port。 ### 配置 OSS 如上一步 Nginx 配置,已经看出,大的静态文件夹 fonts 和 sdkjs 都放在阿里云的 OSS 进行托管。把文件上传到 OSS 就没什么好说的,这里值得注意的是,需要处理跨域问题,在 OSS 的数据安全->跨域配置中创建规则,来源就填 OnlyOffice 的外网地址。 打赏: 微信, 支付宝 标签: nginx, docker, nextcloud, oss 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。