Docker安裝Nextcloud,非AIO方式,并配置HTTPS
Nextcloud應(yīng)該是大家首選的私有網(wǎng)盤了吧,官方教程里面雖然提供了Docker的部署方式,但是屬于all in one的自動部署方式,必須要有80和433端口的域名才能進(jìn)行部署,還不支持“純本地內(nèi)網(wǎng)”或者“名+其他端口號”域的方式進(jìn)行部署,對我們來說非常不方便。
所以這篇文章講的是通過非AIO的方式,在Docker里面部署Nextcloud服務(wù)。

前期預(yù)備:
公網(wǎng)IP、域名、數(shù)字證書
Docker、Docker-compose、portainer、SSH等服務(wù)的安裝
那么正文開始:
1、Docker部署,我們使用Docker-compose配置文件的方式來部署最方便,這樣可以詳細(xì)設(shè)置一些部署的參數(shù)。
compose文件如下:
這里有幾個注意事項(xiàng):
(1)compose文件由三個組件組成,分別是主程序、緩存、數(shù)據(jù)庫。緩存和數(shù)據(jù)庫都是選用官方推薦的,自己有需要也可以改成別的,比如progressqsl之類的。
(2)三個組件都需要配置好各自的安裝路徑,建議的路徑格式是一個主文件夾里面放三個子文件夾,分別對應(yīng)三個組件,組件文件夾之間相互獨(dú)立,如果相互包含后續(xù)會存在數(shù)據(jù)庫路徑權(quán)限不足無法打開的問題。
(3)數(shù)據(jù)庫和緩存的密碼按需設(shè)置,可以設(shè)置的很復(fù)雜,但是部署之前就要設(shè)置好,部署后再想修改密碼,我試過數(shù)據(jù)庫會報錯無法啟動。
(4)主程序里面80端口的外部映射端口按照自己的需求進(jìn)行修改即可。
(5)三個服務(wù)的時區(qū)需要設(shè)置成上海,否則安裝好Nextcloud后日志里面會頻繁有警告提示:“Request does not pass strict cookie check”
? ?
2、compose文件寫好就點(diǎn)擊部署,這一步拉取三個服務(wù)的鏡像是需要時間的,拉取完之后,Docker里面對應(yīng)的容器雖然會顯示running,但是Nextcloud服務(wù)其實(shí)還在初始化的過程中。
這里面主要就是Nextcloud主程序初始化很慢,有很多東西要安裝。

docker里面主程序的log可以看到程序正在初始化,初始化完成后如下圖所示。

初始化過程中也可以去看Nextcloud主程序的安裝路徑,可以看到路徑下的文件數(shù)量是在一直不斷的增長的。
3、等主程序初始化完了之后,就可以通過“ip+端口號”的方式訪問Nextcloud的網(wǎng)頁了。

這個時候需要創(chuàng)建一個管理員賬戶,然后點(diǎn)擊安裝。這個安裝的也需要一點(diǎn)時間。

安裝好后會彈出推薦的應(yīng)用頁面,如果你那邊網(wǎng)絡(luò)不好,就會跟這里一樣加載不出來。你可以選擇等一會然后點(diǎn)擊跳過?;蛘呤謩又匦略跒g覽器的新窗口輸入“ip+端口號”,就能進(jìn)入網(wǎng)盤頁面了。到這一步服務(wù)的安裝就算完成了,剩下的就是各種配置了。
4、進(jìn)入網(wǎng)盤頁面后,點(diǎn)擊右上角頭像-管理設(shè)置-概覽,可以看到系統(tǒng)自檢后提示的各種錯誤信息。

這里我們首先配置網(wǎng)盤的緩存。
找到剛才部署Docker服務(wù)時,Nextcloud主程序的安裝目錄,在目錄下 config/config.php 找到主程序的配置文件并打開。(你們可以用各種方式和軟件進(jìn)行打開)
在配置文件中增加如下參數(shù),注意標(biāo)點(diǎn)符號,否則主程序運(yùn)行報錯。

配置文件里面,local緩存保持原來的apcu,官方并不推薦local緩存用redis。
然后在配置文件里面隨便找個地方加一行這個參數(shù),解決系統(tǒng)關(guān)于電話區(qū)域的警告。
修改完配置文件后記得點(diǎn)擊保存,配置文件會自動生效,一般不用重啟主程序。
5、然后就是修改后臺任務(wù)的配置了。我們進(jìn)到 管理設(shè)置-基本設(shè)置-后臺任務(wù) 這里??吹较到y(tǒng)默認(rèn)是使用AJAX的方式。而官方推薦是使用cron。這個需要主機(jī)每隔5分鐘自動執(zhí)行一次腳本。
這里我們首選先把選項(xiàng)改為cron,然后進(jìn)行cron參數(shù)的配置。
因?yàn)槲覀冞@個是docker部署,官方文檔里面沒有對這種使用場景進(jìn)行特別說明,所以官方文檔里面關(guān)于cron腳本的設(shè)置方法不適用。
這里大概的配置思路就是,因?yàn)镹extcloud服務(wù)是docker部署,所以腳本的運(yùn)行是要在宿主機(jī)上運(yùn)行容器里的腳本,而不是在容器中運(yùn)行腳本。
所以這里首先使用 docker ps 先找到Nextcloud主程序的docker名稱,我們這種安裝方式的名稱一般為“nextcloud-app-1”
然后我們首先在宿主機(jī)的ssh里面執(zhí)行下面的命令,看看是否能執(zhí)行成功,以確保docker名稱設(shè)置正確。? ? ?
如果執(zhí)行成功,回到Nextcloud的后臺任務(wù)的設(shè)置界面,會提示cron最近執(zhí)行過。

如果出現(xiàn)上圖說明命令正確。接下來我們只需要讓這條命令自動執(zhí)行即可。
?我們在宿主機(jī)中,先執(zhí)行:
如果提示權(quán)限不夠,就在前面加sudo
然后在彈出的窗口中增加下面這一條參數(shù):
?這一條參數(shù)的后半部分跟前面測試的命令是一模一樣的,直接復(fù)制過來就行。然后保存即可。到這里后臺服務(wù)也設(shè)置完了。
原文參考:

??????
6、這個時候在回到概覽的自檢界面,會發(fā)現(xiàn)還提示一個“文件完整性檢查”的錯誤。
我們點(diǎn)擊“無效文件列表”,看一下里面是什么錯誤。

一般情況下是有一個文件不具備訪問權(quán)限,我們只要給他賦予權(quán)限即可。
我們進(jìn)到主程序的安裝目錄下,可以找到這個nextcloud-init-sync.lock文件。

我們進(jìn)到這個目錄下,開啟命令行,然后在這個目錄下執(zhí)行?
讓這個文件有訪問權(quán)限即可消除這個警告。
到此,我們內(nèi)網(wǎng)訪問的各種錯誤就都解決完了,只有內(nèi)網(wǎng)需求的到這就算完成了。
下面就是反向代理的設(shè)置問題了。
7、開始配置反向代理,以nginx為例。?
這里我以nginxWebUI為例,這是一個有可視化界面的nginx,對于新手來說更加友好,配置更加方便,推薦使用。純nginx用戶直接看我后面的配置文件就行了。
首先我們新增一條反向代理?xiàng)l目,配置好域名和端口號的監(jiān)聽,然后開啟ssl,選擇好密鑰文件和其他參數(shù)。

然后點(diǎn)擊“設(shè)置額外參數(shù)”,增加下圖的參數(shù)。

值這里沒有分號,自動添加的
這個參數(shù)是解決反代之后提示的HSTS警告問題。

配置完基本參數(shù)之后,在代理目標(biāo)這里要添加三個條目,一個是動態(tài)http,另外兩個是自定義location。
動態(tài)http就是主程序的http地址。
兩個自定義location的路徑分別是/.well-known/carddav 和? /.well-known/caldav
兩個自定義location的額外參數(shù)里面。都需要設(shè)置額外參數(shù)。
這個參數(shù)是解決主程序自檢時候提示的 well-konwn 問題的。
配置文件的最終效果就是這樣的,如果不是nginxWebUI,純nginx代碼就按最后這個效果就行了。

9、設(shè)置反代后,我們直接瀏覽器直接輸入“域名+端口號”訪問Nextcloud服務(wù),會提示不信任域名,所以我們要在配置文件中添加信任。

打開主程序config文件,增加如下參數(shù)。

truested_domain這一條是本來就有的,第0行就是主程序的http地址,我們把我們自己的域名加在后面就行,保存文件后再使用“域名+端口號”的方式訪問,這時候就不會提示不信任域名了。
9、雖然不會提示不信任域名,但是馬上會出現(xiàn)新的問題。就是直接在瀏覽器中輸入“域名+端口號”進(jìn)行訪問會出錯。

??????????????????????????????????
仔細(xì)一看,會發(fā)現(xiàn)端口號被自動去掉了,導(dǎo)致域名指向錯誤。
這個時候我們手動輸入帶后綴的網(wǎng)址,就可以正常進(jìn)入登錄頁面了。
https://域名:端口號/login/

點(diǎn)登錄之后,網(wǎng)頁會一直轉(zhuǎn)圈不響應(yīng)。
這個時候再輸入網(wǎng)址:https://域名:端口號/apps/dashboard/
最終可以進(jìn)入nextcloud的web頁面。
? ? ??
10、這時候再去看系統(tǒng)設(shè)置的概覽頁面,主要就是提示代理頭部的錯誤,這個問題也跟上面“域名+端口號”訪問會自動去掉端口號的故障是同一個。
這個時候我們需要修改配置文件,重寫域名映射,并添加代理信任。
(1)重寫域名映射:
修改前:

?????????????
修改后:

這里面,overwrite.cli.url參數(shù)是原來就有的,需要改寫。然后再增加?overwritehost 和?overwriteprotocol 兩個參數(shù)。 其中overwrite.cli.url是需要添加https前綴的,而overwritehost不需要。
(2)添加代理信任:

這里面,172.30.33.0/24 網(wǎng)段是nginx的內(nèi)網(wǎng)網(wǎng)段,所以要添加信任。? ? ?
? ? ? ? ? ? ?
最終效果:

??????
?通過上面的配置方式,應(yīng)該是解決了Nextcloud主程序中所有的錯誤和警告問題了。
后面配置onlyoffice和郵件服務(wù)的方法在后續(xù)的文章里面再講了。
?
參考:
https://blog.csdn.net/qq_16688317/article/details/124769730
https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/caching_configuration.html
https://cloudkid.fr/nextcloud-cron-setup/
https://docs.nextcloud.com/server/25/admin_manual/configuration_server/reverse_proxy_configuration.html#service-discovery
https://docs.nextcloud.com/server/latest/admin_manual/installation/nginx.html?highlight=strict%20transport%20security