如何在Ubuntu上将OnlyOffice与NextCloud集成

您可能知道,Nextcloud是一个自托管的云存储解决方案,而OnlyOffice是一个自托管的在线办公室文档服务器。 本教程将向您展示 如何将OnlyOffice与Nextcloud集成,因此您可以直接从NextCloud Web界面编辑Office文档(DOCX,XLSX,PPTX等)。

Nextcloud OnlyOffice集成应用程序的功能

  • 在线提供的功能齐全的文本编辑器,具有桌面编辑器的所有功能。
  • 100%的视图,转换,打印和分页保真度。
  • 它允许您添加链接,表格,图表,插入图像,自动形状,公式,文本对象并对其进行操作,创建项目符号或编号列表。
  • 与您的队友进行实时协作编辑:立即显示更改或仅保存后显示更改。 使用评论和内置聊天功能来查看和跟踪更改。
  • 支持DOCX,XLSX,PPTX,TXT文件的编辑和保存。 您还可以将文件保存为其他格式,如ODT,ODS,ODP,DOC,XLS,PPT,PPS,EPUB,RTF,HTML,HTM。
  • 与Office Open XML格式完全兼容:.docx,.xlsx,.pptx
  • 自动保存文件,因此您不会丢失工作。
  • 支持拉丁,CJK(中文,日文,韩文)字符。

先决条件

OnlyOffice文档服务器至少需要2个核心CPU和2GB RAM。 为了使其能够与Nextcloud顺利运行,我建议使用具有4核CPU和4GB RAM的服务器。 您可以以很少的成本从Contabo购买功能强大的VPS。 如果用户很多,则应考虑升级服务器规格。

Contabo仅在德国设有数据中心。 如果您需要在美国托管的VPS,我建议使用Turnkey Internet,它提供4核CPU,8GB RAM VPS,每月收费9.99美元。

要完成本指南,您需要有一台工作正常的Nextcloud服务器。 如果您尚未这样做,请阅读以下文章以首先设置Nextcloud服务器。

  • 在具有Nginx的Ubuntu 18.04(LEMP Stack)上安装NextCloud

然后阅读以下说明以集成OnlyOffice和Nextcloud。 可以将OnlyOffice文档服务器和Nextcloud服务器安装在两个不同的主机上。

步骤1:在Ubuntu上安装ONLYOFFICE Document Server

OnlyOffice文档服务器取决于PostgreSQL,Node.js,Redis服务器,RabbitMQ服务器和Nginx。 以下步骤已在 Ubuntu 18.04服务器 但也应适用于Debian系列中的Linux发行版。

从Ubuntu存储库安装PostgreSQL

sudo apt install postgresql

然后创建 onlyoffice 数据库。

sudo -i -u postgres psql -c "CREATE DATABASE onlyoffice;"

创建 onlyoffice 用户。

sudo -i -u postgres psql -c "CREATE USER onlyoffice WITH password 'onlyoffice';"

授予权限。

sudo -i -u postgres psql -c "GRANT ALL privileges ON DATABASE onlyoffice TO onlyoffice;"

注意:用户名和密码都必须为 onlyoffice

从官方存储库安装NodeJS

OnlyOffice文档服务器要求nodejs版本为8.12.0+,但Ubuntu存储库中的版本已过时,因此我们需要从上游存储库安装Node.js的最新LTS版本(12.13.1)。

添加Node.js存储库。

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -

安装Node.js。

sudo apt install nodejs -y

检查Node.js版本。

node -v

样本输出:

v12.13.1

安装Redis服务器和Rabbitmq

sudo apt install redis-server rabbitmq-server

检查其状态。

systemctl status redis-server

systemctl status rabbitmq-server

你应该看到他们是 活动(运行)。 如果 rabbitmq-server 无法启动,主要是由于计算机内存不足或无效的主机名。 Redis服务器监听 127.0.0.1:6379。 RabbitMQ监听 0.0.0.0:256720.0.0.0:4369

安装OnlyOffice文档服务器

使用以下命令添加OnlyOffice存储库。

echo "deb http://download.onlyoffice.com/repo/debian squeeze main" | sudo tee /etc/apt/sources.list.d/onlyoffice.list

导入OnlyOffice公钥。

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys CB2DE8E5

更新本地程序包索引并安装OnlyOffice文档服务器。 请注意 onlyoffice-documentserver 软件包将安装 nginx-extras 作为依赖项,因此,如果Apache Web服务器正在运行,则需要先将其停止。

sudo apt update

sudo apt install onlyoffice-documentserver

在安装过程中,系统将要求您输入onlyoffice的PostgreSQL密码。 输入“ onlyoffice”(不带双引号)。

您还需要接受Microsoft许可条款,才能从Microsoft安装TrueType核心字体。

在Ubuntu 16.04上安装onlyoffice文档服务器

Nginx服务器块将安装为 /etc/nginx/conf.d/ds.conf。 (实际上是指向 /etc/onlyoffice/documentserver/nginx/ds.conf。)OnlyOffice文档服务器是一个nodejs Web应用程序,Nginx充当反向代理。 /var/www/onlyoffice/documentserver/ 是Web根目录。

安装完成后,在Web浏览器中输入服务器的公共IP地址,您应该看到“文档服务器正在运行”

Onlyoffice文件伺服器

要检查文档服务器的版本号,可以使用以下命令。

apt search onlyoffice-documentserver

样本输出。

onlyoffice-documentserver/squeeze,now 5.4.1-39 amd64 [installed]
  online viewers and editors for text, spreadsheet and presentation files.

步骤2:为文档服务器启用HTTPS

要将NextCloud连接到OnlyOffice文档服务器,后者必须以HTTPS模式运行(Nextcloud服务器和用户浏览器都需要与文档服务器建立联系)。 以下步骤显示了如何获取和安装“让我们加密TLS”证书。

首先,我们需要编辑OnlyOffice Nginx服务器阻止文件。

sudo nano /etc/nginx/conf.d/ds.conf

我们添加如下所示的server_name指令。 不要忘了为DNS设置记录 onlyoffice.your-domain.com

include /etc/nginx/includes/http-common.conf;
server {
  listen 0.0.0.0:80;
  listen [::]:80 default_server;
  server_tokens off;
  server_name onlyoffice.your-domain.com;

  include /etc/nginx/includes/ds-*.conf;
}

保存并关闭文件。 重新加载Nginx以使更改生效。

sudo systemctl reload nginx

然后安装certbot(让我们加密)客户端和Nginx插件。

sudo apt install certbot python3-certbot-nginx

接下来,运行以下命令以使用Nginx插件获取免费的TLS证书。

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d onlyoffice.your-domain.com

哪里:

  • --nginx:使用nginx插件。
  • --agree-tos:同意服务条款。
  • --redirect:通过301重定向强制HTTPS。
  • --hsts:将Strict-Transport-Security标头添加到每个HTTP响应。 强制浏览器始终对域使用TLS。 防御SSL / TLS剥离。
  • --staple-ocsp:启用OCSP装订。 有效的OCSP响应被装订到服务器在TLS期间提供的证书。

在几秒钟内,您将看到类似以下的消息,这表示已成功获得TLS证书。

onlyoffice文件伺服器https

访问 https://onlyoffice.your-domain.com 在Web浏览器中,以验证OnlyOffice文档服务器是否在HTTPS模式下正确运行。

onlyoffice nextcloud

步骤3:安装Nextcloud OnlyOffice集成应用

以管理员身份登录Nextcloud Web界面,然后转到Nextcloud Apps页面,单击 Office & Text 标签在左窗格中。 您将找到OnlyOffice应用程序。 下载并启用它。

nextcloud的onlyoffice连接器

之后,转到Nextcloud设置页面,选择 ONLYOFFICE 标签,然后在“文档编辑服务地址”字段中输入OnlyOffice的域名。

nextcloud的onlyoffice连接器应用程序

保存以上设置后,您应该能够通过单击加号(+)来在Nextcloud中创建文档,表单和演示文稿文件。 将打开一个单独的选项卡进行编辑。

nextcloud onlyoffice

您还将在Office文档的上下文菜单中看到一个名为“在OnlyOffice中打开”的新项目。

在同一主机上安装OnlyOffice Document Server和Nextcloud

OnlyOffice Document服务器使用Nginx作为Web服务器。

如果您已有使用Nginx运行的Nextcloud服务器,则在同一台计算机上安装OnlyOffice时,Nextcloud服务器不会受到损坏。 它将删除 nginx-core 并安装 nginx-extras 软件包,因此会有一些停机时间,但您的配置将保持不变。

如果您有运行Apache Web服务器的现有Nextcloud服务器,并且要在同一台计算机上安装OnlyOffice,则有两种选择:

  1. 停止/删除Apache,将Nginx用作Nextcloud和OnlyOffice的Web服务器。 您可以在本教程中使用Nextcloud Nginx配置。
  2. 将Nginx配置为Apache的反向代理。

将Nginx配置为Apache的反向代理

如果选择第二种路由,则应在安装OnlyOffice文档服务器之前先更改Apache的端口号。

编辑 ports.conf 文件。

sudo nano /etc/apache2/ports.conf

找到这行:

Listen 80

将其更改为其他端口号,例如8180。请注意,此处不要使用8080,因为OnlyOffice文档服务器需要端口8080才能启动其docservice。

Listen 8180

您还应该更改SSL端口号,因为以后Nginx将执行SSL终止。 找到这行:

Listen 443

将端口号更改为4433。

Listen 4433

保存并关闭文件。 接下来,编辑Nextcloud的虚拟主机文件。

sudo nano /etc/apache2/sites-enabled/nextcloud.conf

第一行应如下所示:

<VirtualHost *:80>

将端口号更改为8180。

<VirtualHost *:8180>

我们还应该通过在以下各行之前添加注释字符来禁用将HTTP重定向到HTTPS的功能。 (您的Nextcloud服务器正在使用HTTPS连接,对吗?)

#RewriteEngine on
#RewriteCond %{SERVER_NAME} =nextcloud.your-domain.com
#RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

并更改SSL侦听端口。

<VirtualHost *:443>

将上面的端口更改为4433。保存并关闭文件。 重新加载Apache配置。

sudo systemctl reload apache2

现在Apache监听端口8180和4433。然后,我们可以按照上述说明安装OnlyOffice文档服务器,该服务器将在此过程中安装Nginx。

安装OnlyOffice文档服务器和Nginx之后,创建一个Nginx服务器阻止文件以代理对Apache的请求。

sudo nano /etc/nginx/conf.d/nextcloud-proxy.conf

将以下行添加到文件中。 用您自己的域名替换。 的路径 ssl_certificatessl_certificate_key 用于“让我们加密颁发的证书”。 如果使用由另一个CA颁发的证书,则应输入自己的路径。

server {
        listen 80;
        server_name nextcloud.your-domain.com;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl http2;
        server_name nextcloud.your-domain.com;

        ssl_certificate /etc/letsencrypt/live/nextcloud.your-domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/nextcloud.your-domain.com/privkey.pem;

        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:10m;
        ssl_session_tickets off;
        ssl_protocols TLSv1.1 TLSv1.2;

        add_header Strict-Transport-Security max-age=15768000;

        ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
        ssl_prefer_server_ciphers on;

        location / {
                proxy_pass http://127.0.0.1:8180;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

location / {...} 部分将所有请求重定向到侦听端口8180的Apache Web服务器。保存并关闭文件。 然后测试Nginx配置。

sudo nginx -t

如果语法正确,请重新加载Nginx。

sudo systemctl reload nginx

现在,您应该能够照常访问Nextcloud服务器,而无需在URL中添加端口号。 如果使用以下cURL命令获取HTTP标头,则应该看到前端服务器是Nginx。

curl -I https://nextcloud.your-domain.com

样本输出:

HTTP/1.1 302 Found
Server: nginx/1.11.9
Date: Tue, 14 Mar 2017 08:55:30 GMT
Content-Type: text/html; charset=UTF-8

减少DNS和HTTPS开销

如果Nextcloud和OnlyOffice安装在同一主机上,则Nextcloud和OnlyOffice可以在本地相互通信,而不必查询公共DNS名称和建立HTTPS连接。

首先,您需要创建Nginx服务器块,以在本地主机上侦听Nextcloud和OnlyOffice。 对于OnlyOffice,您可以编辑 /etc/nginx/conf.d/ds.conf 文件

sudo nano /etc/nginx/conf.d/ds.conf

并添加以下服务器块。 请注意,此服务器块监听 127.0.0.1:80 和用途 onlyoffice-document-server 作为server_name。

#HTTP host for internal services
server {
  listen 127.0.0.1:80;
  listen [::1]:80;
  server_name onlyoffice-document-server;
  server_tokens off;

  include /etc/nginx/includes/ds-*.conf;
}

保存并关闭文件。 然后,您可以编辑Nextcloud Nginx配置文件。

sudo nano /etc/nginx/conf.d/nextcloud.conf

并添加以下服务器块。 它也听 127.0.0.1:80 和用途 nextcloud 作为server_name。

server {
    listen 127.0.0.1:80;
    server_name nextcloud;

    # Add headers to serve security related headers
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;
    add_header Referrer-Policy no-referrer;

    #I found this header is needed on Ubuntu, but not on Arch Linux. 
    add_header X-Frame-Options "SAMEORIGIN";

    # Path to the root of your installation
    root /usr/share/nginx/nextcloud/;

    access_log /var/log/nginx/nextcloud.access;
    error_log /var/log/nginx/nextcloud.error;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
    # last;

    location = /.well-known/carddav {
        return 301 $scheme://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
       return 301 $scheme://$host/remote.php/dav;
    }

    location ~ /.well-known/acme-challenge {
      allow all;
    }

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Disable gzip to avoid the removal of the ETag header
    gzip off;

    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed off;

    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;

    location / {
       rewrite ^ /index.php$uri;
    }

    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
       deny all;
    }
    location ~ ^/(?:.|autotest|occ|issue|indie|db_|console) {
       deny all;
     }

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34]).php(?:$|/) {
       include fastcgi_params;
       fastcgi_split_path_info ^(.+.php)(/.*)$;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PATH_INFO $fastcgi_path_info;
       #Avoid sending the security headers twice
       fastcgi_param modHeadersAvailable true;
       fastcgi_param front_controller_active true;
       fastcgi_pass unix:/run/php/php7.2-fpm.sock;
       fastcgi_intercept_errors on;
       fastcgi_request_buffering off;
    }

    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
       try_files $uri/ =404;
       index index.php;
    }

    # Adding the cache control header for js and css files
    # Make sure it is BELOW the PHP block
    location ~* .(?:css|js)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=7200";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        add_header Referrer-Policy no-referrer;
        # Optional: Don't log access to assets
        access_log off;
   }

   location ~* .(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log off;
   }
}

保存并关闭文件。 测试Nginx配置,然后重新加载Nginx以使更改生效。

sudo nginx -t

sudo systemctl reload nginx

接下来,我们需要在 /etc/hosts 如下所示的文件,因此服务器可以找到以下地址 onlyoffice-document-servernextcloud

127.0.0.1 localhost onlyoffice-document-server nextcloud

保存并关闭文件。

我们还需要编辑Nextcloud config.php 文件。

sudo nano /usr/share/nginx/nextcloud/config/config.php

nextcloud 在受信任的域列表中,如下所示。

  'trusted_domains' =>
  array (
    0 => 'nextcloud.linuxbabe.com',
    1 => 'nextcloud',
  ),

保存并关闭文件。

现在回到Nextcloud网络界面设置页面,点击 advanced server settings,输入OnlyOffice文档服务器和Nextcloud的内部地址。

  • http:// onlyoffice-document-server /
  • http:// nextcloud /

  nextcloud内部请求

点击 按钮,您就完成了。

如何升级OnlyOffice Document Server

当出现新版本的OnlyOffice文档服务器时,您只需使用apt软件包管理器即可升级到新版本。

sudo apt update;sudo apt upgrade

请注意,新版本将覆盖您在 /etc/nginx/conf.d/ds.conf 文件。 我建议使用以下命令备份此文件,以便您可以轻松还原自定义配置。

cat /etc/nginx/conf.d/ds.conf | sudo tee /etc/nginx/conf.d/ds.conf.backup

包起来

我希望本教程可以帮助您将OnlyOffice与Nextcloud集成。 与往常一样,如果您发现此帖子有用,请订阅我们的免费新闻通讯。 您也可以在Google +,Twitter或喜欢我们的Facebook页面上关注我们。

Sidebar