摘要訊息 : 在 CentOS 8, PHP 8 和 MySQL 8 下配置 Nextcloud.

0. 前言

Seafile 的教學我們已經寫過很多次了, 而 Nextcloud 卻沒有. 這是因為 Nextcloud 更新之後一直比較穩定, 使用文章《CentOS 7 + PHP 7 + MySQL 5.7 下搭建 NextCloud》中的方法仍然是可行的. 但是這篇文章是 2017 年寫的, 已經比較老舊. 這三四年間, CentOS8, PHP 8 和 MySQL 8 已經發布, 之前那一篇文章有些地方確實已經過時, 因此就有了這篇文章.

在進行之前, 首先要確保 unzip 和 wget 套件已經安裝, 如果不確定的話可以執行指令 dnf install unzip wget.

本篇文章基於 《在 CentOS 8 下配置 Nginx + PHP 8 + MySQL 8 + phpMyAdmin + vsFTPd》.

更新紀錄 :

  • 2022 年 6 月 13 日進行第一次更新和修正.

1. 下載

首先進入 Nextcloud 的網站 https://nextcloud.com/, 滑鼠移動到右上角的 Get Nextcloud 按鈕, 然後點擊 Nextcloud server, 然後找到 ARCHIVE FILE, 其左側有 DOWNLOAD SERVER 字樣. 點擊之後就有了一個藍色的 Download for server 按鈕. 右鍵複製下載連結可以得到 https://download.nextcloud.com/server/releases/latest.zip.

我們進入存放網站的專用檔案夾 cd /www, 將 Nextcloud 下載到伺服器上 wget https://download.nextcloud.com/server/releases/latest.zip 並解壓縮 unzip latest.zip. 解壓完成之後, 我選擇了重新命名一下檔案夾 (當然, 你也可以不這樣做) : mv nextcloud cloud, 然後把檔案夾授權給 Nginx chown -R nginx:nginx cloud.

2. 安裝

和 Seafile 不同, Nextcloud 採用最常用的網頁安裝方式, 因此安裝的過程比 Seafile 簡單很多. Seafile 是安裝完成之後才將網頁名稱繫結到網域名稱上, 而 Nextcloud 正好相反. 為此, 我這裡為大家準備了一份已經添加了 SSL 的 Nginx 配置檔案 :

upstream php-handler {
    server unix:/var/opt/remi/php80/run/php-fpm/www.sock;
}
server {
    listen 80;    # 連接埠, 進階者可以更改, 新手不建議更改
    listen [::]:80;    # 連接埠, 進階者可以更改, 新手不建議更改
    server_name 改為你的網域名稱;
    return 301 https://$server_name$request_uri;
}
server {
    listen 443 ssl http2;    # 連接埠, 進階者可以更改, 新手不建議更改
    listen [::]:443 ssl http2;    # 連接埠, 進階者可以更改, 新手不建議更改
    server_name 改為你的網域名稱;
    ssl_certificate 改為證書位置;
    ssl_certificate_key 改為密鑰位置;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    add_header Referrer-Policy "no-referrer" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-Download-Options "noopen" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Permitted-Cross-Domain-Policies "none" always;
    add_header X-Robots-Tag "none" always;
    add_header X-XSS-Protection "1; mode=block" always;
    fastcgi_hide_header X-Powered-By;
    root /www/cloud;    # 繫結的檔案夾, 根據你自己的情況進行更改. 如果完全根據本博客發布的文章進行安裝, 則不需要更改
    index index.php index.html /index.php$request_uri;
    expires 1m;
    client_max_body_size 0;
    proxy_connect_timeout 36000s;
    proxy_read_timeout 36000s;
    proxy_send_timeout  36000s;
    send_timeout  36000s;
    proxy_request_buffering off;
    fastcgi_buffers 64 4K;
    fastcgi_connect_timeout 1200s;
    fastcgi_send_timeout 1200s;
    fastcgi_read_timeout 1200s;
    fastcgi_buffer_size 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 256k;
    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
    location = / {
        if ( $http_user_agent ~ ^DavClnt ) {
            return 302 /remote.php/webdav/$is_args$args;
        }
    }
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
    location ^~ /.well-known {
        rewrite ^/\.well-known/host-meta\.json  /public.php?service=host-meta-json  last;
        rewrite ^/\.well-known/host-meta        /public.php?service=host-meta       last;
        rewrite ^/\.well-known/webfinger        /public.php?service=webfinger       last;
        rewrite ^/\.well-known/nodeinfo         /public.php?service=nodeinfo        last;
        location = /.well-known/carddav     { return 301 /remote.php/dav/; }
        location = /.well-known/caldav      { return 301 /remote.php/dav/; }
        try_files $uri $uri/ =404;
    }
    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/)  { return 404; }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console)              { return 404; }
    location ~ \.php(?:$|/) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        set $path_info $fastcgi_path_info;
        try_files $fastcgi_script_name =404;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param HTTPS on;
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }
    location ~ \.(?:css|js|svg|gif)$ {
        try_files $uri /index.php$request_uri;
        expires 6M;
        access_log off;
    }
    location ~ \.woff2?$ {
        try_files $uri /index.php$request_uri;
        expires 7d;
        access_log off;
    }
    location / {
        try_files $uri $uri/ /index.php$request_uri;
    }
}

然後使用指令 nginx -t 測試以下配置檔案是否有錯. 如果沒有錯誤, 那麼就會顯示

Figure 1. Nginx 配置檔案修改完成

否則, 你需要根據給出的錯誤提示更改配置. 配置完成之後, 我們需要重新載入 Nginx 的配置文件 : systemctl reload nginx. 接著就可以訪問網站 :

Figure 2. Nextcloud 安裝頁面

帳號和密碼自訂. 對於資料庫, 由於我們已經安裝了 MySQL, 因此我們點擊位於管理者帳號輸入框下面的儲存空間和資料庫, 展開之後選擇 MySQL 並填寫相關配置 :

Figure 3. 資料庫設定

填寫完成之後點擊最下方的完成設定即可. 如果中間有跳轉到 https://localhost/index.php/core/apps/recommended, 將中間的 localhost 改為你的網域名稱即可 (不知道這一個 BUG). 然後便有 :

Figure 4. Nextcloud 安裝完成

3. 解除警告和配置

點擊右上角的頭像, 再點擊設定, 最後點擊左側管理中的概覽, 你可能會看到如下警告 :

Figure 5. Nextcloud 控制台警告

我們需要專門針對 Nextcloud 進行一些配置.

對於第一個設定錯誤, 如果大家的記憶體不夠大, 則可以不用理會. 如果伺服器的記憶體大於 4G, 則我建議進行修改. 如果你是按照本博客給出的 PHP 8 安裝方式, 則執行下面指令 vim /etc/opt/remi/php80/php.ini, 搜尋 memory_limit, 將後面的數值改為比 512 更大的數字, 建議改為 512 或者 1024. 然後重啟 PHP-FPM : systemctl restart php80-php-fpm. 刷新網頁之後, 第一個警告就消失了.

第二個和第三個警告是關於 Nginx 配置檔案的. 當時我在安裝的時候, Nginx 的配置檔案是不正確的, 所以導致了這兩個警告. 不過, 如果你使用本文給出的 Nginx 配置檔案, 那麼是不會出現這兩個警告的.

最後這兩個警告是關於 Nextcloud 配置檔案的. 為了解決這兩個警告, 我們首先安裝 Memcached : dnf install -y memcached, 然後開啟它 : systemctl enable --now memcached. 然後我們通過修改 Nextcloud 檔案夾下的 config/config.php 檔案進行配置. 一份完整的配置如下 (這份配置檔案在 Nextcloud 22.1 版本下測試通過), 所有的選項的說明都在該選項之後的註解中 (預設檔案指的是 /Nextcloud 的檔案夾/config/config.php) :

<?php $CONFIG = [ 'instanceid' => '請更改',
'passwordsalt' => '請更改',
'secret' => '請更改',
/* 上面這三個選項的值保持和預設檔案相同, 不要進行更改 */
'trusted_domains' => [
    '請更改'
  ],        # 你的網域名稱, 可以添加多個, 中間用逗號隔開
'datadirectory' => '/www/cloud/data',       # 存儲上傳檔案的檔案夾
'version' => '請更改',        # 版本, 保持和預設配置檔案一致, 不要進行更改
'dbtype' => '請更改',
'dbhost' => '請更改',
'dbname' => '請更改',
'dbuser' => '請更改',
'dbpassword' => '請更改',
'dbtableprefix' => 'oc_',
/* 上面這幾個是關於資料庫的配置, 保持和預設檔案相同, 不要進行更改 */
'installed' => true,        # 是否已經安裝, 不要進行更改
'default_language' => 'zh_HK',      # 預設語言
'force_language' => false,       # 強制顯示語言. 設定為某種語言視為開啟, 之後所有的用戶界面都會顯示這一種語言, 不能進行更改
'default_locale' => 'zh_HK',        # 預設的地區或者國家
'default_phone_region' => 'zh_HK',     # 預設的手機號碼前綴
'force_locale' => false,        # 強制位於某個地區, 類似於 'force_language' 選項
'defaultapp' => 'dashboard,files',      # 預設頁面
'knowledgebaseenabled' => true,     # 是否開啟幫助選項
'allow_user_to_change_display_name' => true,        # 是否允許用戶更改用戶名稱
'remember_login_cookie_lifetime' => 60*60*24*15,        # 記住登陸的 cookie 生存時長
'session_lifetime' => 60 * 60 * 24,     # session 的生存時長
'session_keepalive' => true,        # 保持 session 活躍
'auto_logout' => false,     # 自動退出
'token_auth_enforced' => false,     # 強制開啟客戶端驗證
'token_auth_activity_update' => 300,        # token 活躍時長, 單位為秒
'auth.bruteforce.protection.enabled' => true,       # 密碼爆破保護
'auth.webauthn.enabled' => true,        # 網頁驗證開啟
'hide_login_form' => false,     # 隱藏登陸界面
'skeletondirectory' => '/www/cloud/core/skeleton',      # skeleton 檔案夾, 只需要根據自己的情況更改 /www/cloud 部分即可
'templatedirectory' => '/www/cloud/nextcloud/templates',        # templates 檔案夾, 只需要根據自己的情況更改 /www/cloud 部分即可
#'lost_password_link' => 'https://???/login/reset',        # 忘記密碼界面, 建議刪除此項
'mail_domain' => '你的網域名稱',       # 郵件發送網域名稱
'mail_from_address' => 'system',     # 發送郵件的用戶名稱
'mail_smtpdebug' => false,      # SMTP 偵錯模式
'mail_smtpmode' => 'php',      # 郵件發送模式, 可选 : sendmail、smtp、qmail、php
#'mail_smtphost' => '127.0.0.1',     # 郵件伺服器
#'mail_smtpport' => 25,      # 郵件伺服器連接埠
#'mail_smtptimeout' => 10,       # 郵件伺服器超時設定
#'mail_smtpsecure' => '',        # 郵件伺服器安全設定, 可選 ssl 與 tls
#'mail_smtpauth' => false,       # 郵件伺服器是否需要驗證
#'mail_smtpauthtype' => 'LOGIN',     # 郵件伺服器驗證類型, 可選 LOGIN 與 PLAIN
#'mail_smtpname' => '',      # 郵件伺服器帳戶名稱
#'mail_smtppassword' => '',      # 郵件伺服器帳戶密碼
#'mail_template_class' => '\OC\Mail\EMailTemplate',      # 郵件發送樣板
#'mail_send_plaintext_only' => false,        # 僅採用文字發送
#'mail_smtpstreamoptions' => [],     # 郵件伺服器其它選項
#'mail_sendmailmode' => 'smtp',      # 郵件發送模式, 可選 smtp 和 pipe. 對於 smtp, 有一個參數 -bs 來表示使用 SMTP 協議進行標準輸入和輸出; 對於 pipe, 有一個參數 -t 表示使用標準輸入流來進行輸入和輸出
#'overwritehost' => '',      # PROXY 重寫地址
#'overwriteprotocol' => '',      # PROXY 重寫協議, 可選 HTTP 和 HTTPS
#'overwritewebroot' => '',       # PROXY 父檔案夾
#'overwritecondaddr' => '',      # PROXY 地址, 支援正規表達式
#'overwrite.cli.url' => '',      # PROXY 網域名稱
#'htaccess.RewriteBase' => '/',      # htaccess 重寫
#'htaccess.IgnoreFrontController' => false,      #如果 Apache 沒有啓用 "mov_env", 則啓用此項
#'proxy' => '',     # 代理伺服器
#'proxyuserpwd' => '',       # 代理伺服器驗證
#'proxyexclude' => [],       # PROXY 白名單
'allow_local_remote_servers' => false,      # 遠端伺服器
'trashbin_retention_obligation' => 'disabled',       # 垃圾桶內的檔案保留 D1 天, 在 D2 天之後刪除. 可以設定為 auto, 即 30 天刪除; disabled 為手動清理; D1 可以設定為 auto, D2 也可以設定為 auto. 'auto' 即代表 '30, 30'
'versions_retention_obligation' => 'disabled',      # 文件版本控制. 時間和上個選項類似
'appcodechecker' => true,       # 應用程式程式碼檢查
'updatechecker' => true,        # 升級檢查
'updater.server.url' => 'https://updates.nextcloud.com/updater_server/',        # 升級伺服器, 不要更改
'updater.release.channel' => 'stable',      # 升級通道, 可選 daily, beta 和 stable
'has_internet_connection' => true,      # 是否可以連結到網路
'connectivity_check_domains' => [
	'www.nextcloud.com',
	'www.startpage.com',
	'www.eff.org',
	'www.edri.org'
],      # 網路連接性檢查的網域名稱選項
'check_for_working_wellknown_setup' => true,        # .well-known URL 檢查
'check_for_working_htaccess' => false,       # .htaccess 檢查, Nginx 用戶無需開啟
'check_data_directory_permissions' => true,     # 檔案夾權限檢查
'config_is_read_only' => false,     #配置檔案僅可讀而不可寫
'log_type' => 'file',       # 日誌檔案類型
'logfile' => '/var/log/nextcloud.log',      # 日誌檔案存儲位置
'logfilemode' => 0640,      # 日誌檔案權限
'loglevel' => 2,        # 日誌內容. 可選 0 = Debug, 1 = Info, 2 = Warning, 3 = Error, and 4 = Fatal
'syslog_tag' => 'Nextcloud',        # 系統日誌標識
'log.condition' => [
	'shared_secret' => '9woFrQvEvtkG2vRGYCPBZJGbGV8eyQVhrMxm23oQJELNueUotoHo9Vhu7RRJj8chJnUDHaqkWyCospXc2B6FwfYvJJphjEdv2XsL',
],      # 日誌條件, 任何條件觸發都會導致日誌進入 debug 模式
'logdateformat' => 'l, d-M-Y H:i:s T',      # 日誌日期類型, 訪問 https://www.php.net/manual/en/function.date.php 可以獲取更多類型
'logtimezone' => 'Asia/Hong_Kong',      # 日誌地區
'log_query' => false,       # 日誌寫入資料庫的查詢操作
'log_rotate_size' => 100 * 1024 * 1024,     # 日誌文件大小
'customclient_desktop' =>
	'https://nextcloud.com/install/#install-clients',
'customclient_android' =>
	'https://play.google.com/store/apps/details?id=com.nextcloud.client',
'customclient_ios' =>
	'https://itunes.apple.com/us/app/nextcloud/id1125420102?mt=8',
'customclient_ios_appid' =>
		'1125420102',
/* 上面幾個選項都是關於 Nextcloud 桌面或者手機應用程式下載的, 除非你有自己的地址, 否則不要進行更改 */
'appstoreenabled' => true,      # 可以安裝新的應用程式
'appstoreurl' => 'https://apps.nextcloud.com/api/v1',       # 應用程式獲取地址, 不要進行更改
'apps_paths' => [
	[
		'path'=> '/www/cloud/apps',
		'url' => '/apps',
		'writable' => true,
	],
],      # 應用程式相關選項
'enable_previews' => true,      # 開啟預覽
'preview_max_x' => 4096,        # 預覽最大寬度, null 表示不限制
'preview_max_y' => 4096,        # 預覽最大高度, null 表示不限制
'preview_max_filesize_image' => -1,     # 可預覽的最大檔案大小, -1 表示不限制. 單位為 MB
/*'preview_libreoffice_path' => '/usr/bin/libreoffice',
'preview_office_cl_parameters' =>
	' --headless --nologo --nofirststartwizard --invisible --norestore '.
	'--convert-to png --outdir ',*/
/* 上面兩個選項是關於在線 Office, 沒有安裝不需要配置
 */
'enabledPreviewProviders' => [
	'OC\Preview\PNG',
	'OC\Preview\JPEG',
	'OC\Preview\GIF',
	'OC\Preview\BMP',
	'OC\Preview\XBitmap',
	'OC\Preview\MP3',
	'OC\Preview\TXT',
	'OC\Preview\MarkDown',
	'OC\Preview\OpenDocument',
	'OC\Preview\Krita',
    'OC\Preview\Illustrator',
    'OC\Preview\HEIC',
    'OC\Preview\Movie',
    'OC\Preview\MSOffice2003',
    'OC\Preview\MSOffice2007',
    'OC\Preview\MSOfficeDoc',
    'OC\Preview\PDF',
    'OC\Preview\Photoshop',
    'OC\Preview\Postscript',
    'OC\Preview\StarOffice',
    'OC\Preview\SVG',
    'OC\Preview\TIFF',
    'OC\Preview\Font',
],      # 可預覽的類型
'ldapUserCleanupInterval' => 51,        # 檢查 LDAP 用戶時間間隔
'sort_groups_by_name' => false,     # 以名稱對用戶組進行排序
'comments.managerFactory' => '\OC\Comments\ManagerFactory',     # 評論管理
'systemtags.managerFactory' => '\OC\SystemTag\ManagerFactory',      # Tags 管理
/*'openssl' => [
	'config' => '/absolute/location/of/openssl.cnf',
],*/        # SSL 選項, 我們已經在 Nginx 中配置, 所以不再需要此項
'memcache.local' => '\OC\Memcache\APCu',        # 記憶體緩存
'memcache.distributed' => '\OC\Memcache\Memcached',     # 使用 Memcached
/*'redis' => [
	'host' => 'localhost',
	'port' => 6379,
	'timeout' => 0.0,
	'read_timeout' => 0.0,
	'user' =>  '',
	'password' => '',
	'dbindex' => 0,
	'ssl_context' => [
		'local_cert' => '/certs/redis.crt',
		'local_pk' => '/certs/redis.key',
		'cafile' => '/certs/ca.crt'
	]
],
'redis.cluster' => [
	'seeds' => [
		'localhost:7000',
		'localhost:7001',
	],
	'timeout' => 0.0,
	'read_timeout' => 0.0,
	'failover_mode' => \RedisCluster::FAILOVER_ERROR,
	'user' =>  '',
	'password' => '',
	'ssl_context' => [
		'local_cert' => '/certs/redis.crt',
		'local_pk' => '/certs/redis.key',
		'cafile' => '/certs/ca.crt'
	]
],*/        # 使用 Redis
'memcached_servers' => [
	['localhost', 11211],
],      # Memcached 伺服器

/**
 * Connection options for memcached
 */
'memcached_options' => [
	\Memcached::OPT_CONNECT_TIMEOUT => 50,
	\Memcached::OPT_RETRY_TIMEOUT =>   50,
	\Memcached::OPT_SEND_TIMEOUT =>    50,
	\Memcached::OPT_RECV_TIMEOUT =>    50,
	\Memcached::OPT_POLL_TIMEOUT =>    50,
	\Memcached::OPT_COMPRESSION =>          true,
	\Memcached::OPT_LIBKETAMA_COMPATIBLE => true,
	\Memcached::OPT_BINARY_PROTOCOL =>      true,
],      # Memcached 相關配置
'cache_path' => '/www/cloud/data/$user/cache',     # 緩存保存檔案夾
'cache_chunk_gc_ttl' => 60*60*24,       # 緩存保存時間
/*'objectstore' => [
	'class' => 'OC\\Files\\ObjectStore\\Swift',
	'arguments' => [
		'username' => 'facebook100000123456789',
		'password' => 'Secr3tPaSSWoRdt7',
		'container' => 'nextcloud',
		'objectPrefix' => 'oid:urn:',
		'autocreate' => true,
		'region' => 'RegionOne',
		'url' => 'http://8.21.28.222:5000/v2.0',
		'tenantName' => 'facebook100000123456789',
		'serviceName' => 'swift',
		'urlType' => 'internal'
	],
],
'objectstore' => [
	'class' => 'OC\\Files\\ObjectStore\\Swift',
	'arguments' => [
		'autocreate' => true,
		'user' => [
			'name' => 'swift',
			'password' => 'swift',
			'domain' => [
				'name' => 'default',
			],
		],
		'scope' => [
			'project' => [
				'name' => 'service',
				'domain' => [
					'name' => 'default',
				],
			],
		],
		'tenantName' => 'service',
		'serviceName' => 'swift',
		'region' => 'regionOne',
		'url' => 'http://yourswifthost:5000/v3',
		'bucket' => 'nextcloud',
	],
],
'objectstore.multibucket.preview-distribution' => false,*/        # Object Store
'sharing.managerFactory' => '\OC\Share20\ProviderFactory',      # Share Provider
'sharing.maxAutocompleteResults' => 25,     # 搜尋最大回傳數量
'sharing.minSearchStringLength' => 0,       # 搜尋字串最大長度
'sharing.enable_share_accept' => true,     # 內部分享需要經過用戶同意
'sharing.force_share_accept' => false,      # 內部分享強制接受, 設定為 true 之後用戶不再有自主選擇的權利
'sharing.enable_share_mail' => true,        # 通過郵件分享
/*'dbdriveroptions' => [
	PDO::MYSQL_ATTR_SSL_CA => '/file/path/to/ca_cert.pem',
	PDO::MYSQL_ATTR_INIT_COMMAND => 'SET wait_timeout = 28800'
],*/        # MySQL SSL
#'sqlite.journal_mode' => 'DELETE',     # SQLite Journal 模式
'mysql.utf8mb4' => true,       # MySQL utf8mb4 模式
'supportedDatabases' => [
	'sqlite',
	'mysql',
	'pgsql',
	'oci',
],      # 支援的資料庫
'tempdirectory' => '/www/cloud/tmp',        # 臨時檔案存放位置
'hashing_default_password' => true,
'hashingThreads' => PASSWORD_ARGON2_DEFAULT_THREADS,
'hashingMemoryCost' => PASSWORD_ARGON2_DEFAULT_MEMORY_COST,
'hashingTimeCost' => PASSWORD_ARGON2_DEFAULT_TIME_COST,
'hashingCost' => 10,
/* 上面幾個選項關於密碼 hashing */
'blacklisted_files' => [],      # 黑名單檔案
'share_folder' => '/',     # 預設分享檔案夾
'theme' => '',      #預設主題
'cipher' => 'AES-256-CTR',      # 加密方式
'minimum.supported.desktop.version' => '2.0.0',     # 桌面應用程式最低版本
'localstorage.allowsymlinks' => false,      # 本地存儲 symlinks
'quota_include_external_storage' => false,      # 外部存儲
'external_storage.auth_availability_delay' => 1800,     # 外部存儲驗證延遲
'filesystem_check_changes' => 1,        # 檔案系統更改檢測
'part_file_in_storage' => true,     # 上傳時對檔案進行切割
'mount_file' => '/www/cloud/data/mount.json',       #mount.json 存儲為止
'filesystem_cache_readonly' => false,       # 檔案緩存只讀
#'trusted_proxies' => ['203.0.113.45', '198.51.100.128', '192.168.2.0/24'],      # 信任的 PROXY
'forwarded_for_headers' => ['HTTP_X_FORWARDED', 'HTTP_FORWARDED_FOR'],      # 轉發 HTTP headers
'max_filesize_animated_gifs_public_sharing' => 10,      # GIF 圖像預覽大小限制. 單位為 MB
'filelocking.enabled' => true,      # 檔案協作
'filelocking.ttl' => 60*60,     # 檔案協作鎖定時間, 單位為秒
#'memcache.locking' => '\\OC\\Memcache\\Redis',     # 檔案協作緩存方式
'filelocking.debug' => false,       # 檔案協作 DEBUG 模式
'upgrade.disable-web' => false,     # 關閉以網頁升級的方式
'debug' => false,       # DEBUG 模式
'data-fingerprint' => '',       # 備份確認
'copied_sample_config' => false,        # 是否為預設配置. 想要這份檔案稱為預設配置, 此項必須為 false
#'lookup_server' => 'https://lookup.nextcloud.com',      #自訂查詢伺服器
'gs.enabled' => false,      # global scale
'gs.federation' => 'internal',      # global scale 模式
/*'csrf.optout' => [
	'/^WebDAVFS/', // OS X Finder
	'/^Microsoft-WebDAV-MiniRedir/', // Windows webdav drive
],*/      # 使用的時候確定好你在做什麼!
'simpleSignUpLink.shown' => true,       # 註冊頁面
'login_form_autocomplete' => true,      # 允許瀏覽器自動填充
];

需要注意的是, 上述配置中的前面三個選項, 網域名稱和資料庫相關的選項請和原始配置檔案保持一致, 其它標識 "請更改" 的選項需要閣下根據自己的情況進行更改. 對於其它選項, 如果你不熟悉程式碼的編寫或者不熟悉 Nextcloud, 請保持和我的一致 (關於此份配置檔案有任何疑問的, 請在評論留下).

這裡我給出一個偵錯的方法 : 如果有一個配置產生錯誤導致 Nextcloud 出現問題, 那麼可以使用折半刪除的方法來找出具體哪一個配置出了問題. 首先, 選擇後面一半的配置, 注意不要選擇最後一行的 ];, 直接刪除. 因為這一半配置是進階的, 可有可無, 即時刪掉 Nextcloud 也可以正常運作. 一旦 Nextcloud 恢復正常, 那麼出錯的部分就在後面那一半被刪除的配置中. 如果 Nextcloud 沒有恢復正常, 那麼不要把刪除的那一部分重新複製回去 (因為被刪除的那一部分可能還存在其它錯誤), 而是繼續刪除一半. 直到找到錯誤出現在哪一部分位置, 找到之後修正這些錯誤即可. 如果不知道如何修正的話, 直接刪除掉也是可以的.

最終我們可以看到 :

Figure 6. 控制台警告解除