2018/03/01

Dropbox/Google Doc 替代方案:Nextcloud + ONLYOFFICE


為了達成無限制的 Dropbox 空間以及有些敏感的 Office 會希望放在自架的服務器上,準備台QNAP NAS 或任何有跑 Docker 的電腦,都可輕鬆用 Nextcloud + ONLYOFFICE架起有相同功能的服務。
 

功能

本文將完成以下這些功能。
  1. 使用 Nextcloud 取代 Dropbox 功能 
  2. 在 Nextcloud 內使用ONLYOFFICE直接開啟 Office 文件 
  3. 使用ONLYOFFICE支援多人同時編輯及Review 文件 
  4. 所有連線都用 HTTPS 維持安全性 
Nextcloud 有 Web 介面,使用起來似乎比 Dropbox 更強大



Nextcloud 也有各個平台可用的同步軟體,我有用 Mac, Linux and Android 上的同步軟體,用起來相當平順。



Nextcloud 裡可直接建立 Office 文件。



Nextcloud 裡可直接編輯投影片,可以打中文,但若原本投影片裡有字型是不支援的,會變方塊字。



當然 Nextcloud 裡也可直接編輯預覽 markdown 文件



ONLYOFFICE服務用起來跟 Google Doc 用起來差不多



多人編輯會用的 Comment 也有



分享文件的介面




環境

  1. QNAP NAS TVS-471 FW 4.3.4,配合 Container Station v1.8 
  2. 網路是用第四台 cable,有設定 port forwarding 到 NAS 80 and 443 port 
  3. Domain 是用 Google domain 管理,需將以下幾個 domain 都對應同一個對外 IP (A Record) 
    • nextcloud.your-domain.com 
    • onlyoffice.your-domain.com 
    • document.your-domain.com 
從 Container Station 上來看是 3 個 Apps,9 個容器。


安裝整合

設定 NAS 原本的port 80 and 443。我把它們分別調整到 444 and 81,並確定外網能直接存取到 NAS 的這兩個 ports。






開啟 Container Station → Create → Create Application 建立 3 個 Apps
記得將 your-domain.com 取代成你的真實網域。




等待建立完成,便可直接開啟 https://nextcloud.your-domain.comhttps://onlyoffice.your-domain.com 測試。接著再設定 Nextcloud 及 ONLYOFFICE 連線,請參考下圖:



所有安裝整合流程就這幾步,應該很容易吧!家裡的 NAS 終於比較有用了。

其他問題


ONLYOFFICE中文方塊字


中文顯示成方塊的原因是使用的字型沒有中文字型,或是用了中文字型但是該字型不在 ONLYOFFICE 容器裡。解決方法有二個方面
  1. 安裝中文字型 
  2. 將 template for new document 的預設 style 改成用中文字型 
先安裝中文字型,透過以下指令找到字型目錄


[~] # docker inspect onlyoffice_document_fonts
[
   {
       "CreatedAt": "2018-02-27T22:27:42+08:00",
       "Driver": "local",
       "Labels": {
           "com.docker.compose.project": "onlyoffice",
           "com.docker.compose.volume": "document_fonts"
       },
       "Mountpoint": "/share/CACHEDEV2_DATA/Container/container-station-data/lib/docker/volumes/onlyoffice_document_fonts/_data",
       "Name": "onlyoffice_document_fonts",
       "Options": {},
       "Scope": "local"
   }
]

再把字型放到紅字位置後,重開 document-server 容器即可,此時再瀏覽文件網有可能瀏覽器快取會造成字型沒被更新,記得去清瀏覽器快取。

而 template 部分,要分 Nextcloud,以及 ONLYOFFICE ,ONLYOFFICE 我在 Build ONLYOFFICE image 時放進去了,可參考 https://github.com/fcwu/docker-letsencrypt-nextcloud-onlyoffice/tree/master/onlyoffice/communityserver/root/var/www/onlyoffice/WebStudio/Products/Files/DocStore/newdocuments,已不需調整,Nextcloud 部分,則要進入 Nextcloud 容器後將 template 放到該容器的 /var/www/html/custom_apps/onlyoffice/assets/en/ 資料匣內。

備份


備份方式用一般容器備份方法即可,把 Docker Volume 都做異地備援。

NAS 執行問題


ONLYOFFICE 的 Document Server 裡的 RabbitMQ 無法順利在 QNAP NAS 運行,解決方法寫在 https://github.com/fcwu/docker-letsencrypt-nextcloud-onlyoffice/blob/master/onlyoffice/documentserver/Dockerfile

Let’s encrypt 運作方式


Let’s encrypt 取得 HTTPS domain 資訊是用 Docker 容器的 3 個環境變數
  • VIRTUAL_HOST=onlyoffice.your-domain.com
  • LETSERYPT_HOST=onlyoffice.your-domain.com
  • LETSERYPT_EMAIL=foo@bar.com
Let’s encrypt 容器會去監視容器生命週期,若發現有這些參數的容器被建立會向 Let’s encrypt 取得新的憑證,放入 certs volume 內,並修改 /etc/nginx/conf.d/default 內加入 virtual server 設定,再要求 nginx-proxy reload。原理上其實並不難,但因為原本這個服務的設計是針對容器,不是 docker-compose 服務,因此我特地加了一個 proxy network (https://github.com/fcwu/docker-letsencrypt-nextcloud-onlyoffice/blob/master/letsencrypt/docker-compose.yml#L37),而且要 export 出來的服務也將其 container 加入此 network,以確保 nginx-proxy 可連到 virtual server。