nextcloud集成OnlyOffice

onlyoffice提供了nextloud的插件,集成后便可在网盘中直接打开和编辑office文件。

onlyoffice配置

docker运行

直接通过docker运行

sudo docker run -i -t -d -p 13800:80 -p 13443:443 --restart=always \
     --name onlyoffice \
     -v /home/wt/programs/onlyoffice/logs:/var/log/onlyoffice  \
     -v /home/wt/programs/onlyoffice/data:/var/www/onlyoffice/Data  \
     -v /home/wt/programs/onlyoffice/lib:/var/lib/onlyoffice \
     -v /home/wt/programs/onlyoffice/db:/var/lib/postgresql  onlyoffice/documentserver

配置密码

为了安全考虑,可以为onlyoffice配置密码验证,将容器内的/etc/onlyoffice/documentserver/local.json文件拷贝出来:

sudo docker cp onlyoffice:/etc/onlyoffice/documentserver/local.json ./local.json

然后更改配置如下:

image-20220413115906367

然后将更改完的文件复制回去:

sudo docker cp local.json onlyoffice:/etc/onlyoffice/documentserver/

重启生效:

sudo docker restart onlyoffice

添加域名解析

onlyoffice添加一个域名解析,解析到onlyoffice的服务器。

配置nginx代理

配置onlyoffice的反向代理,使onlyoffice可通过域名访问,配置如下:

upstream docservice {
  server <ServerDomain>; # 域名 如office.example.com
}

map $http_host $this_host {
    "" $host;
    default $http_host;
}

map $http_x_forwarded_proto $the_scheme {
     default $http_x_forwarded_proto;
     "" $scheme;
}

map $http_x_forwarded_host $the_host {
    default $http_x_forwarded_host;
    "" $this_host;
}

map $http_upgrade $proxy_connection {
  default upgrade;
  "" close;
}

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Forwarded-Host $the_host;
proxy_set_header X-Forwarded-Proto $the_scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

## Normal HTTP host
server {
  listen 0.0.0.0:80;
  listen [::]:80;
  server_name <ServerDomain>; # 域名 如office.example.com
  server_tokens off;

  ## Redirects all traffic to the HTTPS host
  return 301 https://$server_name:443$request_uri;
}

server {
  listen 0.0.0.0:443 ssl;
  listen [::]:443 ssl;
  server_name <ServerDomain>; # 域名 如office.example.com
  server_tokens off;
  root /usr/share/nginx/html;

  ssl on;
  ssl_certificate /etc/nginx/ssl/<ssl.pem>; # 证书路径
  ssl_certificate_key /etc/nginx/ssl/<ssl.pem>; # 证书私钥路径
  ssl_verify_client off;

  ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";

  ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
  ssl_session_cache  builtin:1000  shared:SSL:10m;

  ssl_prefer_server_ciphers   on;

  add_header X-Content-Type-Options nosniff;

  location / {
    proxy_pass http://172.17.0.1:13800; # 代理
    proxy_http_version 1.1;
  }
}
注意将三处域名配置替换为自己的实际域名,以及配置正确的证书路径。

启用ipv6配置

如果nextcloud网盘域名走的是ipv6地址,则还需要开启dockeripv6支持,因为默认docker是不开启v6的,容器内的onlyoffice通过ipv6下载网盘中内容时会出错。只有docker是以daemon方式启动的才可配置。

我的nextcloud网盘是部署在内网电脑上的,为了公网访问,域名解析的是电脑ipv6的地址(ipv6是公网的),因此通过域名公网访问时必须走ipv6,也就必须要配置dockeripv6支持,如果网盘服务器是走ipv4的,就可以不用配置。

编辑(没有则创建)/etc/docker/daemon.json

{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8:1::/64"
}

其中fixed-cidr-v6是子网段划分,随便分就好。

然后重启docker

sudo systemctl restart docker
仅用systemctl reload docker不会影响已创建的容器,因此需要restart

添加并配置onlyoffice插件

在插件市场找到onlyoffice插件并安装,安装完成后,进入【设置】,在侧边栏管理中可看到ONLYOFFICE,点击进入配置,在 服务器设置 里填写服务器地址,也即域名:

image-20220413120141900

点击保存即可。

在网盘中点击office文件,即可直接打开:

image-20220413120327157