
Nextcloud能夠通過(guò)OnlyOffice對(duì)儲(chǔ)存的Office文檔進(jìn)行在線創(chuàng)建、編輯。本文簡(jiǎn)要記錄這個(gè)部署、配置的過(guò)程以作備忘。本文重點(diǎn)講述解決域名+IPv6的情況下解決相應(yīng)的配置問(wèn)題。
前言
最近在公共電腦上需要對(duì)Nextcloud上的Office文檔作一些處理、更新。于是先從Nextcloud把文檔下載下來(lái),用本地的office編輯好以后再把文件上傳回去。一番操作后讓我這個(gè)中度強(qiáng)迫癥不免感到繁瑣。以前在研究Nextcloud的時(shí)候就發(fā)現(xiàn)通過(guò)插件以及一個(gè)叫作OnlyOffice的網(wǎng)絡(luò)套件可以實(shí)現(xiàn)在線編輯Office文檔。經(jīng)過(guò)一番折騰終于把服務(wù)搭建起來(lái)。
OnlyOffice簡(jiǎn)介
OnlyOffice有一款產(chǎn)品叫Document Server,是一款提供在線編輯office文檔的服務(wù)套件。通過(guò)這個(gè)套件以及對(duì)應(yīng)的Nextcloud插件,可以實(shí)現(xiàn)在Nextcloud上進(jìn)行在線編輯Office文檔的功能。該套件有相應(yīng)的Docker鏡像,所以部署方面是比較簡(jiǎn)單的。
設(shè)備、系統(tǒng)簡(jiǎn)介
家里通過(guò)一臺(tái)工控機(jī)(i7-7500U)作路由,主系統(tǒng)PVE,除了路由系統(tǒng)外,通過(guò)LXC裝了Docker。
容器方面與本文相關(guān)的主要是Nextcloud(包括它的數(shù)據(jù)庫(kù)容器MariaDB)。因?yàn)楸疚牟皇墙榻BNextcloud的部署,所以這方面的部署過(guò)程不作講解。
通過(guò)IPv6+動(dòng)態(tài)域名+反向代理的方式Nextcloud實(shí)現(xiàn)了外網(wǎng)訪問(wèn)。訪問(wèn)協(xié)議方面為HTTPS。由于這些前置配置,在配置OnlyOffice的時(shí)候會(huì)造成一些問(wèn)題,這點(diǎn)需要特別注意。
部署及安裝插件
- 創(chuàng)建OnlyOffice容器,容器的部署很簡(jiǎn)單直接,除了初始化的時(shí)間有點(diǎn)長(zhǎng)以外沒(méi)有什么特別之處。
docker run -d --name onlyoffice \
-p 8080:80 \
-v /app/onlyoffice/logs:/var/log/onlyoffice \
-v /app/onlyoffice/data:/var/www/onlyoffice/Data \
-v /app/onlyoffice/lib:/var/lib/onlyoffice \
-v /app/onlyoffice/db:/var/lib/postgresql \
--restart=always \
onlyoffice/documentserver:7.0.1
- 在Nextcloud中安裝OnlyOffice插件。
用管理賬號(hào)登錄Nextcloud -> 點(diǎn)擊右上角用戶圖標(biāo) -> 點(diǎn)擊Apps -> 左面菜單點(diǎn)擊Office & text。這樣就能在主頁(yè)面找到和安裝OnlyOffice了。
配置插件
進(jìn)入配置頁(yè)面
用管理賬號(hào)登錄Nextcloud -> 點(diǎn)擊右上角用戶圖標(biāo) -> 點(diǎn)擊Settings -> 左面菜單的Administration底下找到并點(diǎn)擊ONLYOFFICE.這樣主頁(yè)面就會(huì)跳轉(zhuǎn)到OnlyOffice的配置頁(yè)面中。
在配置頁(yè)面下最關(guān)鍵的是配置OnlyOffice的服務(wù)地址。這里有若干方面需要注意,下面逐一介紹。
http協(xié)議訪問(wèn)
如果Nextcloud是通過(guò)http協(xié)議(非https)進(jìn)行訪問(wèn),那么用http://ip:port的格式對(duì)OnlyOffice的服務(wù)地址進(jìn)行配置通常就可以了。譬如,假設(shè)我們docker宿主機(jī)的IP是192.168.0.10,那么按照前面創(chuàng)建的容器設(shè)置,配置則應(yīng)該是:http://192.168.0.10:8080。
通常來(lái)說(shuō),如果Nextcloud只在內(nèi)網(wǎng)使用(通過(guò)內(nèi)網(wǎng)ip訪問(wèn)),又或者通過(guò)http協(xié)議和域名實(shí)現(xiàn)外網(wǎng)訪問(wèn)都屬于這種情況。
https協(xié)議訪問(wèn)
如果Nextcloud是通過(guò)https協(xié)議進(jìn)行訪問(wèn)的話,插件也會(huì)要求通過(guò)https協(xié)議訪問(wèn)OnlyOffice的服務(wù)。如果使用http開(kāi)頭的地址作為配置,插件會(huì)彈出下面提示。
Error when trying to connect (Mixed Active Content is not allowed. HTTPS address for ONLYOFFICE Docs is required.)
也就是說(shuō),我們需要為OnlyOffice配置https。
通常,之所以使用https協(xié)議是為了讓訪問(wèn)更加安全,https協(xié)議通常是配合外網(wǎng)訪問(wèn)使用的,內(nèi)網(wǎng)訪問(wèn)很少會(huì)用到。配置https訪問(wèn)需要用到證書,盡管自建證書也能夠?qū)崿F(xiàn),但通常情況下這樣做的意義不大。更常見(jiàn)的情況是從域名供應(yīng)商獲取相應(yīng)的域名證書。
為了解決OnlyOffice的https訪問(wèn)問(wèn)題,我們有兩種方式。理論上一種是前面提到的自建證書,在這種情況下,可以通過(guò)https://ip:port的格式訪問(wèn)到OnlyOffice的服務(wù)。盡管網(wǎng)上看到過(guò)一些這方面的介紹,但因?yàn)檫@種配置方式很少用到,也就沒(méi)有采納這種方案。
另外一種形式是干脆為OnlyOffice服務(wù)注冊(cè)一個(gè)域名(譬如,二級(jí)域名)并為其配置https訪問(wèn)。如果Nextcloud本身就使用https協(xié)議訪問(wèn),那么必然了解這套配置流程,這里就不贅述了。在這種情況下OnlyOffice的服務(wù)地址將用https://hostname的格式進(jìn)行配置。這也是我實(shí)際選擇的方案。
IPv6的問(wèn)題
在我部署好OnlyOffice并完成的https訪問(wèn)配置后,再在OnlyOffice的插件中填入服務(wù)地址,系統(tǒng)跳出下面提示
Error when trying to connect (cURL error 7: (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://(我的域名)/healthcheck)
查了一下cURL error 7,大概是無(wú)法訪問(wèn)的意思。然而在瀏覽器輸入https://(我的域名)/healthcheck卻能夠正常返回true。
進(jìn)入nextcloud的后臺(tái)ping了一下為OnlyOffice注冊(cè)的域名發(fā)現(xiàn)的確無(wú)法訪問(wèn)。經(jīng)過(guò)一番思考,合理猜測(cè)是因?yàn)镮Pv6造成的。
前文介紹到,設(shè)備是通過(guò)動(dòng)態(tài)域名+IPv6的方式實(shí)現(xiàn)Nextcloud的外網(wǎng)訪問(wèn)。訪問(wèn)過(guò)程需要經(jīng)歷一系列的環(huán)節(jié),而只要其中一環(huán)不支持IPv6,那么訪問(wèn)就無(wú)法成功。盡管不能確定具體是哪個(gè)環(huán)節(jié)造成的,但大概率發(fā)生在nextcloud對(duì)IPv6的支持或者docker的橋接上。
解決這個(gè)問(wèn)題只要正確解釋域名對(duì)應(yīng)的IP即可,可以通過(guò)兩種辦法實(shí)現(xiàn)。一個(gè)是在nextcloud的host文件中添加OnlyOffice的域名解釋。假設(shè)我們的域名是office.myhost.com,根據(jù)前文的配置,在nextcloud的host文件中添加下面域名解釋:
192.168.0.10 office.myhost.com
我采取的另一個(gè)方案是,如果路由有相應(yīng)功能的話,直接在路由解釋(劫持)對(duì)應(yīng)的域名即可。該方案能夠把局域網(wǎng)內(nèi)的自定義的域名解釋集中管理,相對(duì)更方便。
在添加了OnlyOffice的域名解釋后,沒(méi)有再出現(xiàn)前面的錯(cuò)誤,但系統(tǒng)又提示了新的錯(cuò)誤:
Error when trying to connect (Error occurred in the document service: Error while downloading the document file to be converted.) (version 7.0.1.37)
同樣是因?yàn)閺腛nlyOffice無(wú)法訪問(wèn)Nextcloud導(dǎo)致的,原因也同樣出在域名解釋的問(wèn)題上。類似的在OnlyOffice的host文件中添加相應(yīng)解釋后就能解決,譬如:
192.168.0.10 nextcloud.myhost.com
再一點(diǎn)點(diǎn)域名解釋的問(wèn)題
按理來(lái)說(shuō),當(dāng)我們?cè)谟蛎虒?duì)OnlyOffice的域名進(jìn)行配置的時(shí)候(或者通過(guò)動(dòng)態(tài)域名工具創(chuàng)建、配置對(duì)應(yīng)的域名)并不需要填寫真實(shí)的公網(wǎng)IP(無(wú)論是靜態(tài)還是動(dòng)態(tài))。無(wú)論是自建證書還是通過(guò)域名商獲得證書,為的都【只是】為了解決通過(guò)https協(xié)議訪問(wèn)OnlyOffice服務(wù),之所以從域名商申請(qǐng)證書是因?yàn)榇蠖鄶?shù)人對(duì)這套流程更為熟悉,僅此而已,而并非真的要從外網(wǎng)訪問(wèn)OnlyOffice。事實(shí)上,我們并不希望自己搭建的OnlyOffice被外部訪問(wèn)。
此外,依托域名商的域名解釋相當(dāng)于在訪問(wèn)的時(shí)候先跑到DNS上查詢到自己的公網(wǎng)IP,然后再回到自己的服務(wù)器上進(jìn)行訪問(wèn)。這一方面多此一舉,降低訪問(wèn)速度,二一方面使得本來(lái)Nextcloud與OnlyOffice之間純粹的內(nèi)網(wǎng)訪問(wèn)過(guò)程變成不得不依賴外網(wǎng)進(jìn)行。
總結(jié)
OnlyOffice的部署和配置相對(duì)簡(jiǎn)單,但主要問(wèn)題在于Nextcloud插件中OnlyOffice的地址配置問(wèn)題上。如果Nextcloud純粹是為了內(nèi)網(wǎng)訪問(wèn)而設(shè),這個(gè)問(wèn)題還是非常簡(jiǎn)單直接的,只要按照http://ip:port的格式填寫地址即可。但如果是通過(guò)域名和https協(xié)議訪問(wèn)的話,配置方面可能會(huì)出現(xiàn)各種問(wèn)題??偟膩?lái)說(shuō),這些問(wèn)題集中在域名解釋方面。在服務(wù)器運(yùn)維的問(wèn)題上,各人的情況不盡相同,本文并沒(méi)有記錄詳細(xì)的部署、配置步驟,更多的是記錄配置過(guò)程中出現(xiàn)的問(wèn)題以及解決過(guò)程。此外也列舉了遇到的一些報(bào)錯(cuò)信息,方便有類似問(wèn)題的朋友找到自己的解決思路。