使用寶塔搭建nextcloud的過程(搭建、優化、問題)


寶塔部署教程


參考網址:

使用NextCloud來搭建我們的私有網盤、並結合Redis優化性能(寶塔) https://www.moerats.com/archives/175/

寶塔面板下nextcloud完美優化配置 https://bugxia.com/197.html

寶塔面板部署NextCloud逐一解決后台安全及設置警告 https://bugxia.com/114.html

寶塔面板安裝 NextCloud 后台配置優化 https://520iloveyou.vip/index.php/archives/528/

說明:現在越來越多雲盤都相繼宣布關閉,差不多都去用百度雲盤了,而我們手上有些比如小姐姐電影之類傳上去就會被和諧,於是我們有必要自己搭建個私有雲來存這些資源了,也安全,這里推薦NextCloud,一款繼ownCloud之后,又一個很不錯的私有雲。

簡介

Nextcloud是一套用於創建和使用文件托管服務的客戶端-服務器軟件。它在功能上類似於Dropbox,雖然Nextcloud是免費的和開源的,允許任何人在私人服務器上安裝和操作它。與Dropbox等專有服務相反,開放架構允許以應用程序的形式向服務器添加附加功能。

雖然Nextcloud作為ownCloud的衍生版本,在其基礎上做了許多改進,但有一些差異。ownCloud提供了一個開源社區版本,但它們還提供了一個專有的企業版,具有附加功能和支持訂閱。相比之下,Nextcloud是完全開源的。

截圖

請輸入圖片描述

請輸入圖片描述

更新

【2019年6月28日】
更新教程,替換為寶塔安裝,並新增Redis緩存優化方案以提高NextCloud運行速度。

安裝

如果不喜歡折騰的,可參考1分鍾就能安裝完成的方法:Snap安裝教程Docker安裝教程

環境要求:PHP 7 +MysqlNginxRedis(非必需)。

先配置本地host

vim /etc/hosts
192.168.99.230		lhy.com

1、安裝寶塔(/www)

#CentOS系統
wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
#Ubuntu系統
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
#Debian系統
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh
http://lhy.com:8888/
bt
5 6 10 11 12 13

image-20200104134152645

將面板賬戶改為
sterling
sterling

2、安裝應用擴展

image-20200104151705808

安裝以上軟件,必裝nginx,mysql,php

mysql

寶塔面板登陸密碼與mysql數據root密碼忘記了如何更改?

  • 強制修改MySQL管理(root)密碼,比如改成123456(請根據自己的需求修改)
cd /www/server/panel && python tools.pyc root 123456
  • 修改面板密碼,比如改成123456(請根據自己的需求修改)
cd /www/server/panel && python tools.pyc panel 123456
  • 添加遠程訪問
use mysql;
update user set host = '%' where user = 'root';
# 查看狀態
select host, user from user;
可以看到root有個% 通配符表示OK了。
flush privileges;

3、安裝php擴展

image-20200104150350713

用作網站緩存使用

允許遠程連接

  1. redis

image-20200103161101355

修改redis的bind的127.0.0.1為0.0.0.0允許本地連接

並重載配置

4、放行端口並開啟監控

image-20200104144430052

image-20200104144506594

5、新建站點,上傳nextcloud代碼

Nextcloud程序下載地址→傳送門,目前為17.0.2版本,使用命令:

  • 建站

image-20200104144604788

上傳代碼到網站空間

#進入站點根目錄,自行修改路徑
cd /www/wwwroot/lhy.com
#下載最新版程序,記得隨時將鏈接換成最新版的下載地址,或者上傳下載好的
wget https://download.nextcloud.com/server/releases/nextcloud-17.0.2.zip
#解壓並移動到根目錄
unzip nextcloud-*.zip && rm -rf nextcloud-*.zip index.html
mv nextcloud/* . && rm -rf nextcloud
chown -R www:www ./

6、配置專屬數據庫

image-20200103161913108

image-20200103161941317

賬號:	nextcloud
密碼: nextcloud
數據庫: nextcloud

7、初始化nextcloud

訪問lhy.com

image-20200104145539551

安裝完成登錄

image-20200104145824134

8、優化網站


一、緩存

最后該網盤挺不錯的,特別是更新到15.0版本之后,不過加載速度在國內還是慢點,官方推薦的是用APCu緩存,相比較Redis更快,不過博主一般只在小內存上跑,所以就直接使用了Redis緩存。如果你的內存很大,可以看下APCu使用文檔→傳送門,配置也不難。

Nextcloud由於各種原因,默認安裝后,任何頁面加載時間都過於緩慢。之前的文章有介紹到使用PHP的APCu模塊以提升緩存性能,這里再介紹使用Memcached提高Nextcloud的性能。

Nextcloud支持多個不同類型的緩存后端,所以可以同時啟用本地緩存(APCu)和分布式緩存(Memcached、Redis),官方推薦的組合是APCu+Redis

分布式緩存選擇Memcached、Redis其中一種啟用即可,無需兩者都啟用

寶塔面板很方便的可以安裝php的Memcached和Redis模塊(注意是memcached,非memcache),這里我以APCu+Memcached為例

img

安裝完畢后,打開/www/wwwroot/你的nextcloud目錄/config/config.php,在其倒數第二行添加以下代碼

第1行為指定本地緩存為APCu,第2、3行為指定分布式緩存為Memcached

vim /www/wwwroot/lhy.com/config/config.php

'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Memcached',
'memcached_servers' => array(
    array('localhost', 11211),
),

如圖,注意分號,保存即可

img

Redis則需要稍微修改一下配置

'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'redis' => array(
     'host' => 'localhost',
     'port' => 6379,
),

image-20200104151105109

此時緩存已經配置成功

刷新nextcloud界面,發現數據已經緩存到redis中了

image-20200104151040195

二、Nginx配置

這一步最為蛋疼,官方給出的Nginx配置示例,有些是可以參考的,有些挪到寶塔上來則會有各種奇奇怪怪的問題,所以需要針對寶塔修改nextcloud下Nginx的配置。

經過幾天的折騰,這部分終於也解決的差不多了。分享一下我的Nginx配置,為方便理解和閱讀,我已在配置文件中加入一些注釋,可以根據情況修改一下即可。

cd /www/server/panel/vhost/nginx

原配置

server
{
    listen 80;
    server_name lhy.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/lhy.com;
    
    #SSL-START SSL相關配置,請勿刪除或修改下一行帶注釋的404規則
    #error_page 404/404.html;
    #SSL-END
    
    #ERROR-PAGE-START  錯誤頁配置,可以注釋、刪除或修改
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END
    
    #PHP-INFO-START  PHP引用配置,可以注釋或修改
    include enable-php-73.conf;
    #PHP-INFO-END
    
    #REWRITE-START URL重寫規則引用,修改后將導致面板設置的偽靜態規則失效
    include /www/server/panel/vhost/rewrite/lhy.com.conf;
    #REWRITE-END
    
    #禁止訪問的文件或目錄
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }
    
    #一鍵申請SSL證書驗證目錄相關設置
    location ~ \.well-known{
        allow all;
    }
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log off;
        access_log /dev/null;
    }
    
    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log off;
        access_log /dev/null; 
    }
    access_log  /www/wwwlogs/lhy.com.log;
    error_log  /www/wwwlogs/lhy.com.error.log;
}

優化配置

server
{
	#基礎配置,這些可以照搬寶塔的配置
    listen 80;
    #listen 443 ssl http2;
    server_name lhy.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/lhy.com;
    
    #ssl_certificate    /etc/letsencrypt/live/file.bugxia.com/fullchain.pem;
    #ssl_certificate_key    /etc/letsencrypt/live/file.bugxia.com/privkey.pem;
    #ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    #ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    #ssl_prefer_server_ciphers on;
    #ssl_session_cache shared:SSL:10m;
    #ssl_session_timeout 10m;
    
    error_page 497 https://$host$request_uri;
    #nextcloud包含了403和404的錯誤頁面
    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;
    
    #HSTS、緩存設置
    add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
    large_client_header_buffers 4 16k;
    client_max_body_size 10G; 
    fastcgi_buffers 64 4K;
    gzip off;
    
    #Let's Encrypt 證書續期驗證目錄
    #location /.well-known/acme-challenge { }
    
	#nextcloud一些關鍵目錄的權限設置
    location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
        deny all;
    }
    
    #靜態資源重定向1
    location ~* \/core\/(?:js\/oc\.js|preview\.png).*$ {
        rewrite ^ /index.php last;
    }
    
    #webdav重定向
    location / {
        rewrite ^ /index.php$request_uri;
    }
    
    #靜態資源重定向3
    location ~* \.(?:png|html|ttf|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        access_log off;
    }
    
    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri/ =404;
        index index.php;
    }
    
    #對靜態資源添加header
    location ~ \.(?:css|js|woff|svg|gif)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=15778463";
        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;
        access_log off;
    }
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
    {
        expires      30d;
        access_log off; 
    }
     
    #PHP-INFO-START  PHP引用配置,可以注釋或修改
    include enable-php-73.conf;
    #PHP-INFO-END
    
    #REWRITE-START URL重寫規則引用,修改后將導致面板設置的偽靜態規則失效
    include /www/server/panel/vhost/rewrite/lhy.com.conf;
    #REWRITE-END
    
    #寶塔默認是include調用PHP相關配置,這里稍稍修改了一下,注意php版本
    #加入了front_controller_active這項參數以刪除頁面URL中的index.php
    # location ~ [^/]\.php(/|$)
    # {
    #     try_files $uri =404;
    #     fastcgi_pass  unix:/tmp/php-cgi-73.sock;
    #     fastcgi_index index.php;
    #     include fastcgi.conf;
    #     include pathinfo.conf;
    #     fastcgi_param front_controller_active true;
    # }
    
    #禁止訪問的文件或目錄
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

    access_log  /www/wwwlogs/lhy.com.log;
    error_log  /www/wwwlogs/lhy.com.error.log;
}

image-20200104162311341

導致的結果是界面不一樣

原版

image-20200104162459871

修改后排版有問題,采用原版

image-20200104162423001

三、修改php上傳限制

image-20200104162717682

四、手機ip連接nextcloud並開啟ip信任

image-20200103162822114

添加ip和資源路徑的關聯

說明主機配置在/vhost中

cd /www/server/panel/vhost/nginx

# 復制lhy.com.conf為192.168.99.230
cp lhy.com.conf 192.168.99.230.conf

# 並修改為下圖

image-20200103163008627

添加ip信任

Nextcloud 通過不被信任的域名訪問 動態IP解決方案,允許所有IP訪問

nextcloud在訪問時,會自動判斷已設置好的域名或IP是否被允許,如果你是固定IP,那很好辦,把這個域名或IP添加到配置文件就可以了。但如果是在家搭建的服務器,路由器每重啟一次就是一個公網IP,無法做到每次都設置,於是想到了一個最終解決方案,理論上是禁止了IP限制。

固定ip

  'trusted_domains' => 
  array (
    0 => 'lhy.com',
    1 => '192.168.99.230',
  ),

image-20200104163515751

所有ip

解決方法:

打開 /config/config.php

找到 trusted_domains
增加一項

preg_match('/cli/i',php_sapi_name())?'127.0.0.1':$_SERVER['SERVER_NAME']
//完整的代碼
//索引數字順延就可以
'trusted_domains' => array(
        0 => '127.0.0.1',
        1 => preg_match('/cli/i',php_sapi_name())?'127.0.0.1':$_SERVER['SERVER_NAME'],
),

解釋

$_SERVER[‘SERVER_NAME’] 為獲得當前訪問的域名或IP,最初只設置了server_name,后來在查看cron任務時,發現在cli模式下是無法獲得的,所以增加了cli模式判斷,cli模式直接給個本地IP忽悠程序,正常模式將當前訪問的域名或IP動態的添加的信任的域名中。

這樣如果手機客戶端通過ip進來會被解析到/www/wwwroot/lhy.com目錄下的資源

9、操作教學

一、手機連接nextcloud

http:192.168.99.230
admin	
admin

二、掛載硬盤

參考 https://bugxia.com/1306.html 提示:“smbclient” 未安裝。無法掛載 "SMB / CIFS", "SMB / CIFS 使用 OC 登錄信息"。請聯系管理員安裝。

安裝擴展

image-20200103225931160

image-20200103230010812

image-20200103230058666

這里有兩個問題,

一個是提示:“smbclient” 未安裝。無法掛載 "SMB / CIFS", "SMB / CIFS 使用 OC 登錄信息"。請聯系管理員安裝。

另一個是:權限問題,將硬盤掛載的位置必須是/www/wwwroot/lhy.com/目錄下,這里新建了data_2目錄,否則會出現掛載不了的問題

image-20200103230244667

解決第一個問題

安裝smbclient唄,我是CentOS 7

yum install libsmbclient libsmbclient-devel -y

yum安裝完后,僅僅只是系統底層支持smb client了,而nextcloud是基於php的,還需要通過PECL命令來安裝php對應的smb擴展
這里首先要去掉幾個php函數禁用

安裝之前進入寶塔面板→php管理→禁用函數里面把“exec”“popen”“putenv”刪除不然會安裝不上

pecl install smbclient

這里可能會報錯

WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update

運行

pecl channel-update pecl.php.net

對pecl channel進行升級

PHP Warning: popen() has been disabled for security reasons

popen函數被禁用了,打開寶塔的php管理面板,刪掉被禁用的popen函數即可再次執行pecl安裝smbclient

img

pecl安裝smbclient擴展完成后會提示

img

檢查php的配置文件,看是否已添加引用smbclient的庫文件,如未添加,需手動添加並重啟php

img

回到nextcloud的掛載外部存儲管理頁面,之前的提示已消除

解決第二個問題

cd /www/wwwroot/lhy.com

mkdir data_2

vim /etc/fstab
/dev/sda1 /www/wwwroot/lhy.com/data_2 ntfs-3g defaults,noexec,umask=0000 0 0
mount -a

chmod 777 data_2

cd data_2
chown -R www:www ./

image-20200103230812108

之后可以配置本地目錄掛載

image-20200103230845985

完成

10、問題集合

參考網址:

寶塔面板部署NextCloud逐一解決后台安全及設置警告 https://bugxia.com/114.html

寶塔面板安裝 NextCloud 后台配置優化 https://520iloveyou.vip/index.php/archives/528/

經過部署,nextcloud已經可以在web端或者客戶端使用了,體驗上來說,是沒有任何影響的。但是從web端進入管理頁面,會有如下錯誤

img

PHP 的設置似乎有問題, 無法獲取系統環境變量. 使用 getenv(\”PATH\”) 測試時僅返回空結果.
Please check the installation documentation ↗ for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm.
PHP 模塊 ‘fileinfo’ 缺失. 我們強烈建議啟用此模塊以便在 MIME 類型檢測時獲得最准確的結果.
Your data directory and files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server so that the data directory is no longer accessible, or move the data directory outside the web server document root.
The “Strict-Transport-Security” HTTP header is not set to at least “15552000” seconds. For enhanced security, it is recommended to enable HSTS as described in the security tips.
內存緩存未配置,為了提升使用體驗,請盡量配置內存緩存。更多信息請參見文檔。
The PHP OPcache is not properly configured. For better performance it is recommended to use the following settings in the php.ini:
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
請仔細檢查安裝指南,並檢查日志中是否有錯誤或警告。

作為一個強迫症,不解決這些問題怎么行呢 :笑哭:

1.PHP 的設置似乎有問題, 無法獲取系統環境變量. 使用 getenv(\”PATH\”) 測試時僅返回空結果.

從寶塔文件管理,打開/www/server/php/72/etc/php-fpm.conf,在其尾部添加一行

env[PATH] = /usr/local/bin:/usr/bin:/bin:/usr/local/php/bin

保存並重啟PHP即可解決該問題

img

2.PHP 模塊 ‘fileinfo’ 缺失. 我們強烈建議啟用此模塊以便在 MIME 類型檢測時獲得最准確的結果

這個也很簡單,因為php環境默認是沒有安裝fileinfo這個擴展模塊的,所以手動去寶塔PHP管理選項中安裝fileinfo擴展即可解決該問題

img

大致意思是用戶的數據目錄(data)可以通過互聯網訪問,為了安全起見需要禁止訪問。所以解決方法是修改nextcloud綁定的網站配置文件,添加nextcloud常用目錄禁止訪問即可

location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
    deny all;
}

img

添加完畢保存即可生效

解決方法還是修改nextcloud綁定的網站配置文件,添加一行header信息

add_header Strict-Transport-Security "max-age=63072000;";

img

保存即可生效

5.內存緩存未配置,為了提升使用體驗,請盡量配置內存緩存

這個問題是指php的緩存模塊沒有安裝,nextcloud支持APCu、Memcached、Redis等模塊,選擇其中一個安裝。我之前寫過一個寶塔面板PHP 7.x 編譯安裝APCu

編譯安裝完畢之后,從寶塔面板打開/www/wwwroot/你的域名/config/config.php,手動給nextcloud的配置文件中添加一行設置,指定使用APCu作為緩存

'memcache.local' => '\OC\Memcache\APCu'

img

其他如Memcached、Redis的使用請參照官方文檔:https://docs.nextcloud.com/server/13/admin_manual/configuration_server/caching_configuration.html

意思是php的OPcache模塊沒有安裝配置,依然是從寶塔PHP設置面板中添加安裝OPcache模塊

img

安裝完成后該提示依然是存在的,因為寶塔在安裝OPcache模塊后自動加入的配置不符合nextcloud的推薦配置,所以需要修改一下

找到OPcache的配置這一段,替換成nextcloud的推薦配置,保存並重啟php即可生效

img

補充1:Some files have not passed the integrity check. Further information on how to resolve this issue can be found in the documentation

大意是nextcloud目錄下有一些不該出現的文件,點擊“List of invalid files…”,會列出異常文件列表,刪掉其中的文件即可解決。

img

總結

至此,寶塔面板下安裝nextcloud出現的安全及設置警告均以逐一解決,看一下最終效果

img

=以下為NextCloud 14.0.x版本中新增的一些告警

img

Use of the the built in php mailer is no longer supported. Please update your email server settings
您的網頁服務器未正確設置以解析“/.well-known/caldav”
您的網頁服務器未正確設置以解析“/.well-known/carddav”
The database is missing some indexes. Due to the fact that adding indexes on big tables could take some time they were not added automatically. By running “occ db:add-missing-indices” those missing indexes could be added manually while the instance keeps running. Once the indexes are added queries to those tables are usually much faster.
在數據表 “oc_share” 中無法找到索引 “parent_index” .
在數據表 “oc_filecache” 中無法找到索引 “fs_mtime” .
HTTP的請求頭 “Referrer-Policy” 未設置為 “no-referrer”, “no-referrer-when-downgrade”, “strict-origin” or “strict-origin-when-cross-origin”. 這會導致信息泄露. 請查閱 W3C 建議

1.Use of the the built in php mailer is no longer supported. Please update your email server settings

大意就是php自帶的mail組件不再被nextcloud支持,需要使用smtp方式發送郵件。

其實就是讓你設置一個smtp服務器信息,便於發送郵件,關於SMTP這里不再詳述。

img

2.您的網頁服務器未正確設置以解析“/.well-known/caldav”及您的網頁服務器未正確設置以解析“/.well-known/carddav”

這兩個警告可以一起解決,出現該提示一般是因為這兩個路徑的偽靜態設置有問題,導致無法正常訪問。

解決方法就是添加兩行重定向配置

rewrite /.well-known/carddav /remote.php/dav permanent;
rewrite /.well-known/caldav /remote.php/dav permanent;

img

3.The database is missing some indexes. Due to the fact that adding indexes on big tables could take some time they were not added automatically. By running “occ db:add-missing-indices” those missing indexes could be added manually while the instance keeps running. Once the indexes are added queries to those tables are usually much faster.

在數據表”oc_share” 中無法找到索引”parent_index”
在數據表”oc_filecache” 中無法找到索引”fs_mtime”

大意是說,數據庫的一些索引丟失了,需要使用OCC修復一下。OCC是owncloud的命令行,而nextcloud又是基於owncloud開發的,所以需要用到OCC來修復丟失的數據庫索引。

修復命令為:

php occ db:add-missing-indices

SSH進入服務器nextcloud的根目錄,並執行修復命令

img

出現如下錯誤

Console has to be executed with the user that owns the file config/config.php
Current user: root
Owner of config.php: www
Try adding ‘sudo -u www ‘ to the beginning of the command (without the single quotes)

好吧,需要使用www用戶權限來修改,再次執行

sudo -u www php occ db:add-missing-indices

img

修復成功!

4.HTTP的請求頭 “Referrer-Policy” 未設置為 “no-referrer”, “no-referrer-when-downgrade”, “strict-origin” or “strict-origin-when-cross-origin”. 這會導致信息泄露

大意是,需要設置一個Referrer-Policy請求頭來提高安全性。Nginx配置文件里添加:

add_header Referrer-Policy "no-referrer";

img


至此,Nextcloud升級到14.0.3后出現的一些新的警告提示已全部消滅干凈


img


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM