2023年10月5日星期四

Docker 安装 Onlyoffice服务

扩展在线文档预览/编辑

本文将介绍三种支持 WOPI 协议的服务的部署及对接方式。通过实现自己的 WOPI 客户端,扩展 Cloudreve 的预览编辑能力(不仅限于 Office 文档)。

Collabora Online (LibreOffice Online)

使用 Docker 部署 Collabora Online(官方文档):
docker pull collabora/code
docker run -t -d -p 127.0.0.1:9980:9980 \
-e "aliasgroup1=<允许使用此服务的 Cloudreve 地址,包含明确端口>" \
-e "username=<面板管理员用户名>" \
-e "password=<面板管理员密码>" \
--name code --restart always collabora/code
以官方演示站为例:
docker run -t -d -p 127.0.0.1:9980:9980 \
-e "aliasgroup1=https://demo.cloudreve.org:443" \
-e "username=<面板管理员用户名>" \
-e "password=<面板管理员密码>" \
--name code --restart always collabora/code
Container 启动后,配置 Nginx 或其他 Web 服务器反向代理 https://127.0.0.1:9980, 可参考 Proxy settings,确保反代后的服务能够被你的最终用户访问,你可以手动访问 <你的服务主机>/hosting/discovery 来确认是否返回了预期的 XML 响应。
在 后台 - 参数设置 - 图像与预览 - 文件预览 - WOPI 客户端 中开启 使用 WOPI 并在 WOPI Discovery Endpoint 中填入<你的服务主机>/hosting/discovery。保存后可在前台测试文档预览和编辑:

OnlyOffice

OnlyOffice 在 6.4 版本后支持了 WOPI 协议,请参考 官方文档 部署你的 OnlyOffice 实例。推荐使用 Docker-DocumentServer 来快速部署。
参考 官方文档 配置 OnlyOffice 开启 WOPI 功能。如果使用 Docker,可在创建 Contianer 时指定 WOPI_ENABLEDtrue 来开启:
docker run -i -t -d -p 8080:80 -e WOPI_ENABLED=true onlyoffice/documentserver

ONLYOFFICE Docs中,WOPI默认非激活。 启用WOPI,修改配置文件: /etc/onlyoffice/documentserver/local.json,并设置wopi.enable参数为true

  • 从Docker将文件拷贝出 (be01de974ce4为容器ID)
docker cp be01de974ce4:/etc/onlyoffice/documentserver/local.json /root
  • 修改文件,增加如下内容,定义ipfilter访问 过滤规则
  • "ipfilter": { "rules": [ { "address": "ip_address", "allowed": true }, { "address": "*", "allowed": false } ], "useforrequest": true, "errorcode": 403 }
OnlyOffice 不支持过滤 WOPI 请求来源,设置 WOPI 请求允许,
"wopi": { "enable": true }

完整配置如下:
{
  "services": {
    "CoAuthoring": {
      "sql": {
        "type": "postgres",
        "dbHost": "localhost",
        "dbPort": "5432",
        "dbName": "onlyoffice",
        "dbUser": "onlyoffice",
        "dbPass": "onlyoffice"
      },
      "token": {
        "enable": {
          "request": {
            "inbox": true,
            "outbox": true
          },
          "browser": true
        },
        "inbox": {
          "header": "Authorization",
          "inBody": false
        },
        "outbox": {
          "header": "Authorization",
          "inBody": false
        }
      },
      "secret": {
        "inbox": {
          "string": "YCp2eyqe63YmIbrAwZzYNAceyFheeqws"
        },
        "outbox": {
          "string": "YCp2eyqe63YmIbrAwZzYNAceyFheeqws"
        },
        "session": {
          "string": "YCp2eyqe63YmIbrAwZzYNAceyFheeqws"
        }
      }
    }
  },
  "rabbitmq": {
    "url": "amqp://guest:guest@localhost"
  },
  "storage": {
    "fs": {
      "secretString": "oV72FWk1AxbSqnenqe7S"
    }
  },
"wopi": {
    "enable": true
    }
}
  • 将文件拷贝到Docker镜像里
docker cp /root/local.json be01de974ce4:/etc/onlyoffice/documentserver/
  • 重启服务
docker exec -it be01de974ce4 /bin/bash supervisorctl restart all

你可以手动访问 <你的 OnlyOffice 主机>/hosting/discovery 来确认是否返回了预期的 XML 响应。
在 后台 - 参数设置 - 图像与预览 - 文件预览 - WOPI 客户端 中开启 使用 WOPI 并在 WOPI Discovery Endpoint 中填入<你的服务主机>/hosting/discovery。保存后可在前台测试文档预览和编辑:
OnlyOffice 不支持过滤 WOPI 请求来源,如果你有对公使用需求,请通过外部应用防火墙检查预览页面请求中 wopisrc 参数是否为预期的 Cloudreve 站点。


Onlyoffice安装字体


  1. 复制字体到docker
sudo docker cp /root/data/fonts 容器id:/usr/share/fonts/
  1. 进入容器
docker exec -it 容器id /bin/bash
  1. 到bin目录
cd /usr/bin
  1. 执行
./documentserver-generate-allfonts.sh
  1. 退出容器,重启容器
exit docker restart onlyoffice



Office Online Server (On-Prem)

Office Online Server 是微软推出的可私有部署的 Office 在线文档服务。请参考 官方文档 在你的 Windows Server 上部署。
你可以手动访问 <你的 OnlyOffice 主机>/hosting/discovery 来确认是否返回了预期的 XML 响应。
在 后台 - 参数设置 - 图像与预览 - 文件预览 - WOPI 客户端 中开启 使用 WOPI 并在 WOPI Discovery Endpoint 中填入<你的服务主机>/hosting/discovery。保存后可在前台测试文档预览和编辑:
Office Online Server 不支持过滤 WOPI 请求来源,如果你有对公使用需求,请通过外部应用防火墙检查预览页面请求中 wopisrc 参数是否为预期的 Cloudreve 站点。

WOPI 协议

Web Application Open Platform Interface (WOPI) 协议是一种用于集成 Web 文档编辑器的协议,你可以在 微软的文档 中阅读详细的协议定义。Cloudreve 可以对接实现了 WOPI 协议的文档处理服务,用于扩展已有的文档预览和编辑能力。