如何在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