Docker系列 搭建個(gè)人云盤服務(wù)nextcloud

轉(zhuǎn)自我的個(gè)人博客https://blognas.hwb0307.com脑奠。歡迎關(guān)注众眨!

前言

雖然我們前面介紹了圖床之類的Docker應(yīng)用,但其實(shí)云盤服務(wù)才是更加貼近大眾生活的Docker應(yīng)用谍珊。

Nextcloud是一個(gè)類似于百度網(wǎng)盤恬叹、阿里云盤的服務(wù)退个,可以通過docker容器的方式搭建在自己的個(gè)人服務(wù)器或NAS上,有安卓和IOS客戶端南蓬。我不知道有沒有人在VPS上布署nextcloud纺非。一般都是NAS用戶吧!有中文界面赘方。我個(gè)人一般是用于進(jìn)行手機(jī)照片的云同步烧颖,同時(shí)還儲(chǔ)存一些小文件,并且偶爾可以分享文件給朋友窄陡,此時(shí)朋友下載文件的速度不像免費(fèi)百度云那樣受到限制炕淮。

Nextcloud除了基本的文件云同步和云儲(chǔ)存的功能外,其實(shí)還有很多進(jìn)階功能跳夭,以后有機(jī)會(huì)再開系列博文來(lái)描述它的使用吧涂圆。

本篇博文主要講述如何通過docker來(lái)安裝Nextcloud,并且借助NPM進(jìn)行ssl證書的申請(qǐng)和自動(dòng)續(xù)期优妙。安裝docker應(yīng)用往往不是難事乘综,難就難在如何方便地獲得https,而這個(gè)和個(gè)人信息安全密切相關(guān)的主題在多數(shù)教程中均少有提及套硼。

Nextcloud的特別之處還在于:Nextcloud僅僅提供特色功能卡辰。它的性能提升往往依賴其它應(yīng)用,比如MYSQL和Redis;它的拓展性往往依賴強(qiáng)大的插件九妈。如果你用默認(rèn)的方法安裝docker nextcloud反砌,那么它的性能會(huì)受到較大的限制。

如果你可以熟練使用原生Nginx萌朱,可參考這位大佬的方案:使用docker-compose搭建nextcloud+Nginx+MySQL+Redis宴树。我請(qǐng)了杜比的ZoniNG大佬測(cè)試,這個(gè)博客的方案是有效的晶疼,只是數(shù)據(jù)庫(kù)權(quán)限的設(shè)置方法要變通一下酒贬。由于我對(duì)于原生Nginx的配置并不熟悉,所以并沒有采用他的方案翠霍。對(duì)于新手而言锭吨,他的設(shè)置過于復(fù)雜。本回的安裝方法是一種對(duì)Nextcloud性能有較大提升并且較為簡(jiǎn)便的方法寒匙。原理上零如,唯一不同的是我們采用Nextcloud原生app,即使用Apache進(jìn)行80端口映射锄弱,而不是像大佬那樣采用Nginx+Nextcloud:fpm的方法考蕾。

最后提醒一下:這個(gè)方法配置的Nextcloud對(duì)內(nèi)存的占用還是比較大的。如果你覺得安裝完卡頓的話会宪,可以到htop看看是不是Nextcloud的問題肖卧。這里我大致展示一下(不知道是不是和Nextcloud有關(guān)):

不知長(zhǎng)期使用會(huì)怎么樣,現(xiàn)階段感覺對(duì)其它應(yīng)用沒有明顯的不良影響狈谊。

其它關(guān)于nextcloud的其它信息喜命,可以訪問:

另外,**如果有使用非443端口的NAS的童鞋在安裝Nextcloud中有任何問題的河劝,歡迎評(píng)論區(qū)留言壁榕。**我什么坑都踩過!

測(cè)試環(huán)境

我是在VPS里演示Nextcloud安裝的:

uname -a # Linux VM-12-8-ubuntu 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux docker --version # Docker version 20.10.5, build 55c4c88 docker-compose --version # docker-compose version 1.28.6, build 5db8d86f

準(zhǔn)備工作

# 工作目錄請(qǐng)按需修改 work=~/docker/nextcloud && mkdir -p $work && cd $work # 防火墻 sudo ufw allow 7602/tcp comment 'nextcloud' && sudo ufw reload sudo ufw allow 6379/tcp comment 'nextcloud' && sudo ufw reload # 提前拉取鏡像 docker pull nextcloud:latest docker pull mariadb:latest docker pull redis

配置yml文件

添加一個(gè)docker-compose文件:

vim $work/docker-compose.yml

添加以下內(nèi)容:

--- version: '3.2' networks: default: name: nextcloud services: app: image: nextcloud:latest restart: unless-stopped volumes: - ./app:/var/www/html environment: - MYSQL_PASSWORD=nextcloud_password # 按需修改 - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_HOST=db ports: - 7602:80 # 按需修改 networks: - default cache: image: redis restart: unless-stopped expose: - "6379" # 可用此默認(rèn)赎瞎。因?yàn)檫@是暴露而不是映射 volumes: - ./cache:/data command: redis-server --requirepass 'redis_password' # 按需修改 networks: - default db: image: mariadb:latest restart: unless-stopped # 下面的command與官網(wǎng)略有不同牌里。它將有助于避免MYSQL數(shù)據(jù)庫(kù)的4047報(bào)錯(cuò)。 command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressed volumes: - ./db:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=nextcloud_password_root # 按需修改 - MYSQL_PASSWORD=nextcloud_password # 按需修改 - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud networks: - default

上線服務(wù)

cd $work && docker-compose up -d

配置NPM

ddns-go或者域名托管商后臺(tái)解析好域名nextcloud.exampledomain.com务甥。

添加一個(gè)Proxy Host牡辽,反代地址是http://172.17.0.1:7602〕伲可用泛域名的SSL證書态辛。

Advanced中添加以下記錄以增強(qiáng)兼容性。詳見官網(wǎng)配置關(guān)于反代的說(shuō)明挺尿。

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

完整配置圖如下所示:

NPM有443端口時(shí)的Nextcloud配置

觀察Nextcloud的客戶端日志奏黑,當(dāng)出現(xiàn):

Initializing finished
New nextcloud instance

即可直接登陸網(wǎng)站:https://nextcloud.exampledomain.com進(jìn)行設(shè)置炊邦。

我隨便設(shè)置一個(gè)帳戶。這個(gè)可以自定義熟史!

admin
GoK*@s$&3%oXiQTewxoE*v*5@Q*a!D7WGLQDbwFt!NTiaQ!P6DUf5v

如圖所示:

有些人不安裝推薦應(yīng)用馁害。我這里就直接安裝試試看。國(guó)內(nèi)環(huán)境安裝速度也還行蹂匹。你也可以不點(diǎn)碘菜,反正你需要的話以后可以自己裝嘛!最后限寞,耐心地等待初始化的完成吧忍啸。

很快就成功了。有443端口就是簡(jiǎn)單昆烁!

最后吊骤,為了讓redis生效,我們需要配置$work/app/config/config.php:

sudo vim $work/app/config/config.php

添加以下內(nèi)容:

//'memcache.local' => '\\OC\\Memcache\\APCu' // 用本地式緩存使用APCu // 注釋這行 'memcache.local' => '\\OC\\Memcache\\Redis', 'memcache.distributed' => '\\OC\\Memcache\\Redis', // 分布式緩存使用Redis 'memcache.locking' => '\\OC\\Memcache\\Redis', // 啟用Redis緩存的文件鎖 'redis' => array( 'host' => 'cache', // 這里和mariadb的邏輯相同静尼,填寫容器links時(shí)映射的主機(jī)名 'port' => 6379, 'password' => 'redis_password' // 這是之前在配置docker-compose時(shí)配置的redis密碼 ), 'filelocking.enabled' => 'true',

然后重啟docker-nextcloud服務(wù):

cd $work && docker-compose down && docker-compose up -d

NPM無(wú)443端口時(shí)的額外配置

當(dāng)初我在NAS安裝Nextcloud的時(shí)候,沒有443端口传泊,安裝Nextcloud非常地費(fèi)勁鼠渺!有時(shí)跳轉(zhuǎn)的時(shí)候,地址欄的<NPM-443端口>可能會(huì)消失掉眷细。

經(jīng)過一翻折騰拦盹,我發(fā)現(xiàn)用非443端口使用Nextcloud還要進(jìn)行一些額外的配置。相關(guān)的教程非常的少溪椎,真的惡心普舆!市面上很多Up主也是直接在自己的NAS里安裝Nextcloud,但他們往往是在局域網(wǎng)中使用Nextcloud校读,不會(huì)配https沼侣。然而作為一個(gè)云盤,沒有https能忍嗎歉秫?

又或者他們只在VPS中演示怎么安裝蛾洛。如上所述,如果你有443端口雁芙,這些問題根本不可能出現(xiàn)轧膘。

下面我們對(duì)于無(wú)443端口的NAS給另外一些配置上的建議。

首先兔甘,上線服務(wù)后不要登陸網(wǎng)站并注冊(cè)用戶谎碍。我們修改$work/app/config/config.php文件的內(nèi)容:

sudo vim $work/app/config/config.php

在文件中添加以下內(nèi)容:

如果內(nèi)容已經(jīng)有默認(rèn)值,則添加或更改記錄即可洞焙。比如trusted_domains蟆淀。自己看著辦拯啦!

每一行最后的,號(hào)一定不可以省略!

//'memcache.local' => '\\OC\\Memcache\\APCu' // 用本地式緩存使用APCu // 注釋這行 'memcache.local' => '\\OC\\Memcache\\Redis', 'memcache.distributed' => '\\OC\\Memcache\\Redis', // 分布式緩存使用Redis 'memcache.locking' => '\\OC\\Memcache\\Redis', // 啟用Redis緩存的文件鎖 'redis' => array( 'host' => 'cache', // 這里和mariadb的邏輯相同扳碍,填寫容器links時(shí)映射的主機(jī)名 'port' => 6379, 'password' => 'redis_password' // 這是之前在配置docker-compose時(shí)配置的redis密碼 ), 'filelocking.enabled' => 'true', 'trusted_domains' => array ( 0 => '<nextcloud.exampledomain.com>', // 這一般是可以識(shí)別提岔,不用改 ), 'overwritehost' => '<nextcloud.exampledomain.com>:<NPM-443端口>', // 按需修改 'overwriteprotocol' => 'https', 'overwrite.cli.url' => 'http://<nextcloud.exampledomain.com>:<NPM-443端口>', # 這里有個(gè)逗號(hào)不要忘記

為什么要特別地設(shè)置config.php文件的相關(guān)參數(shù)呢?如果訪問地址帶端口號(hào)且屬于反向代理笋敞,nextcloud往往無(wú)法正確地識(shí)別碱蒙,此時(shí)nextcloud內(nèi)部將阻止此地址對(duì)nextcloud進(jìn)行訪問。因此夯巷,我們需要提前對(duì)overwritehost變量進(jìn)行特別聲明赛惩。overwriteprotocoloverwrite.cli.url是為了強(qiáng)制https訪問,這里也順便加上以防NPM的設(shè)置不生效(還沒試過刪除會(huì)不會(huì)影響登陸)趁餐。

如圖所示(如果沒有設(shè)置管理員帳戶喷兼,有些參數(shù)和值是沒有;但我們要設(shè)置的幾個(gè)參數(shù)的樣式是類似的):

重啟服務(wù)后雷,讓config.php的改動(dòng)生效:

cd $work && docker-compose down && docker-compose up -d

觀察nextcloud客戶端的日志(也可以用Portainer看):

docker logs -f nextcloud_app_1 # 有時(shí)候是nextcloud-app-1

當(dāng)log出現(xiàn)Command line: 'apache2 -D FOREGROUND'的字樣時(shí)季惯,說(shuō)明nextcloud已經(jīng)重啟成功。

此時(shí)可以訪問https://<nextcloud.exampledomain.com>:<NPM-443端口>創(chuàng)建管理員帳戶臀突。后面的操作和VPS一樣勉抓。設(shè)置完管理帳戶后,可以自動(dòng)登陸或者訪問https://<nextcloud.exampledomain.com>:<NPM-443端口>登陸后臺(tái)使用nextcloud候学。

如果你不小心注冊(cè)了帳戶再來(lái)修改config.php藕筋,在日志中很可能會(huì)有這種報(bào)錯(cuò):

[access_compat:error] [pid 32] [client <你的電腦ip>] AH01797: client denied by server configuration: /var/www/html/data/htaccesstest.txt

這全是由于地址原因?qū)е碌膆taccess不過關(guān)。**所以端口號(hào)的問題真的很煩梳码!**這個(gè)時(shí)候你可以重新注冊(cè)一個(gè)帳戶隐圾。這個(gè)時(shí)候的系統(tǒng)就會(huì)有2個(gè)用戶。它們的權(quán)限區(qū)別我以后再了解一下掰茶。

后臺(tái)任務(wù)

Nextcloud的官話暇藏,自己感受一下:為了優(yōu)化性能,正確配置后臺(tái)任務(wù)非常重要符匾。對(duì)于較大的實(shí)例叨咖,推薦配置為 ‘Cron’。詳情請(qǐng)參考相關(guān)文檔啊胶。

根據(jù)使用docker-compose搭建nextcloud+Nginx+MySQL+Redis大佬文章的建議:由于nextcloud內(nèi)部的文件和配置會(huì)在用戶操作過程中產(chǎn)生變化甸各,所以需要啟用一個(gè)定時(shí)任務(wù)去定期整理和歸檔這些數(shù)據(jù)到數(shù)據(jù)庫(kù)或者應(yīng)用到配置中。問了ZoniNG大佬焰坪,這個(gè)也是必要的趣倾,說(shuō)是屬于php的優(yōu)化。

如果你不配置某饰,可能在設(shè)置——管理——基本設(shè)置會(huì)有這種警告:

首先儒恋,使用docker ps -a查看nextcloud的容器ID善绎。如果你按本教程,一般是nextcloud_app_1或者是nextcloud-app-1诫尽。

打開crontab的配置進(jìn)行編輯:

sudo vim /etc/crontab

加入如下內(nèi)容:

# run nextcloud cron task every 5 min */5 * * * * root docker exec -u 33 nextcloud_app_1 php -f /var/www/html/cron.php 2>&1 /dev/null

這里我留個(gè)小問題:root可否換成test_user(就是你自己用的非root用戶)禀酱?歡迎大家在評(píng)論區(qū)留下自己的答案!

Beta: Redis測(cè)試

個(gè)人推測(cè)牧嫉,不知道沒有redis的時(shí)候是否會(huì)這樣

這里有一個(gè)簡(jiǎn)單的方法可以測(cè)試Redis有沒有生效剂跟。你在上傳很多圖片后,可以在此頁(yè)面快速往下滑動(dòng):

與此同時(shí)酣藻,可調(diào)用htop觀察:

可看到數(shù)據(jù)被大量地調(diào)用曹洽。同時(shí)可以發(fā)現(xiàn)頁(yè)面的刷新還是蠻快的。

小結(jié)

對(duì)于VPS用戶來(lái)說(shuō)辽剧,Nextcloud的安裝非常容易送淆,基本上沒有什么難度。對(duì)于NAS用戶來(lái)說(shuō)就比較折騰怕轿;但是偷崩,如果成功安裝,Nextcloud就非常有用了撞羽!

另外环凿,我覺得非443端口使用的時(shí)候Nextcloud慢吞吞的。不知道是不是自己的NAS配置太差(蝸牛星際)放吩。我在VPS上用還是非常流暢的。希望有NAS用戶安裝Nextcloud時(shí)給多些反饋羽杰!

更多進(jìn)階使用渡紫,可以看看使用docker-compose搭建nextcloud+Nginx+MySQL+Redis。我覺得這個(gè)才是完全體(羨慕)考赛。

關(guān)于對(duì)Nextcloud的深度使用可以看我后續(xù)的更新惕澎。敬請(qǐng)期待嘍!

附:Nextcloud團(tuán)隊(duì)的合體照

參考資料

本文使用 文章同步助手 同步

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末唧喉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子忍抽,更是在濱河造成了極大的恐慌八孝,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸠项,死亡現(xiàn)場(chǎng)離奇詭異干跛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)祟绊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門楼入,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)哥捕,“玉大人,你說(shuō)我怎么就攤上這事嘉熊∫W” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵阐肤,是天一觀的道長(zhǎng)凫佛。 經(jīng)常有香客問我,道長(zhǎng)泽腮,這世上最難降的妖魔是什么御蒲? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮诊赊,結(jié)果婚禮上厚满,老公的妹妹穿的比我還像新娘。我一直安慰自己碧磅,他們只是感情好碘箍,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鲸郊,像睡著了一般丰榴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上秆撮,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天四濒,我揣著相機(jī)與錄音,去河邊找鬼职辨。 笑死盗蟆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的舒裤。 我是一名探鬼主播喳资,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼腾供!你這毒婦竟也來(lái)了仆邓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤伴鳖,失蹤者是張志新(化名)和其女友劉穎节值,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黎侈,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡察署,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了峻汉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贴汪。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡脐往,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扳埂,到底是詐尸還是另有隱情业簿,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布阳懂,位于F島的核電站梅尤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏岩调。R本人自食惡果不足惜巷燥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望号枕。 院中可真熱鬧缰揪,春花似錦、人聲如沸葱淳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赞厕。三九已至艳狐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間皿桑,已是汗流浹背毫目。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诲侮,地道東北人蒜茴。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像浆西,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子顽腾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容