提到在线文档(office三件套 Word、Excel、PPT)目前市面上最好的无疑是WPS、微软官方,但是WPS私有化部署不便宜,有没有什么实惠且实用的方案呢?

是有的,那就是今天将要介绍的这款开源的在线文档工具onlyoffice,当然如果你要用于商业则要付费购买商业授权。

首先onlyoffice的官网,如果自己部署体验的话可以先体验开源社区版,这里极力推荐Docker部署

  1. sudo docker run -i -t -d -p 80:80 --restart=always onlyoffice/documentserver

当然 --restart=always是可选的,加上之后,每次启动Docker客户端时会自动启动这个服务,就这里不同。

如果要本地调试onlyoffice的话,最好是挂载卷,这样就可以方便调试了,否则会出现本地调试无法访问文件的囧境。

请注意,如果您尝试挂载尚未创建的文件夹,将创建这些文件夹,但对它们的访问将受到限制。您需要手动更改其访问权限。

  1. sudo docker run -i -t -d -p 80:80 --restart=always \
  2. -v 你的文件路径/logs:/var/log/onlyoffice \
  3. -v 你的文件路径/data:/var/www/onlyoffice/Data \
  4. -v 你的文件路径/lib:/var/lib/onlyoffice \
  5. -v 你的文件路径/db:/var/lib/postgresql onlyoffice/documentserver

完整完档在这里

当看到这一步时,Docker服务已经运行,此时还需要去执行Docker服务内的简单例子。

访问80端口就可以出现这个欢迎页:
image.png

image.png
就会跳转到例子页面,从这里开始你就可以完整体验onlyoffice社区版的全部功能了。

Tips:切换语言
image.png

服务运行起来了,那么如何进行开发呢?

以下均来自onlyoffice 本地二次开发基础教程

  1. 下载SDKJS 并编译 SDKJS https://github.com/ONLYOFFICE/sdkjs
  • 装依赖, 在 sdkjs/build 下执行 npm install 安装依赖
  • 执行 grunt develop, 在 sdkjs 目录下会生成 develop 的目录
  1. 下载web-apps 并编译 web-apss https://github.com/ONLYOFFICE/web-apps
    • 进入 web-apps/build/sprites 安装依赖 npm install 后执行 grunt 目的是为了生成雪碧图
    • 进入 web-apps/build 安装依赖 npm install 后, 修改 gruntFile.js ,将下面三个地方注释
  1. .....
  2. // grunt.loadNpmTasks('grunt-contrib-imagemin');
  3. ....
  4. // imagemin: {
  5. // options: {
  6. // optimizationLevel: 3
  7. // },
  8. // dynamic: {
  9. // files: []
  10. // .concat(packageFile['main']['imagemin']['images-app'])
  11. // .concat(packageFile['main']['imagemin']['images-common'])
  12. // }
  13. // },
  14. ...
  15. grunt.registerTask('deploy-app-main', ['prebuild-icons-sprite', 'main-app-init', 'clean:prebuild',
  16. // 'imagemin',
  17. 'less',

这里注释是因为会报错,具体原因尚没了解清楚

  1. 下载nodejs-example 并修改配置 https://api.onlyoffice.com/editors/demopreview

进入 nodejs-example/config/default.json
修改 siteUrl: 为 127.0.0.1:9000

其中值得注意的是在这个配置文件中有两个字段也需要修改:
image.png

  1. "storageFolder": "../lib/documentserver-example/files",
  2. "storagePath": "../lib/documentserver-example/files",

这两个文件一定要修改为Docker挂载卷中**xxx/lib/documentserver-example/files**地址,否则,无法读取文件,更加无法预览编辑文件了。

  1. 使用一个 proxy.js 代理文件,方便本地联调与文件代理,该内部的proxyUrl版本需要和 docker 下启动的静态本地址一致。 ```javascript const express = require(‘express’); const { createProxyMiddleware } = require(‘http-proxy-middleware’); const internalIp = require(‘internal-ip’); // 在需要的地方require

const app = express(); (async () => { const ip = await internalIp.v4(); // const proxyUrl = http://${ip}/6.1.0-83/ // 根据docker 服务端版本更新 const proxyUrl = http://${ip}/6.1.1-53/ app.use(‘/doc’, createProxyMiddleware({ target: proxyUrl, changeOrigin: true })); // 字体文件 + 字体图片代理 app.use(‘/fonts’, createProxyMiddleware({ target: http://127.0.0.1, changeOrigin: true })); app.use(‘/sdkjs/common/AllFonts.js’, createProxyMiddleware({ target: http://127.0.0.1/, changeOrigin: true })); app.use(‘/sdkjs/common/Images/fonts_thumbnail@2x.png’, createProxyMiddleware({ target: http://127.0.0.1/, changeOrigin: true }));

// 部分文件提前代理 app.use(express.static(‘demo’)); })() app.listen(9000);

  1. 5. 进入docker 修改 nginx 配置,因为会涉及到服务接口跨域问题
  2. docker里找到 /etc/nginx/includes/ds-docservice.conf 将一个 fonts 一个 cache/files 增加跨域头,并重启nginx -s reload
  3. ```nginx
  4. add_header Access-Control-Allow-Origin *;
  5. add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
  6. add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';

image.png

参考链接:

onlyoffice 本地二次开发基础教程
在本地服务器上安装 ONLYOFFICE Docs Community Edition for Docker
onlyoffice开发文档