Nextcloud 是一套客戶機——伺服器軟體(依賴被稱為 apps 的組件),能夠實現諸如共享,協作以及溝通的需要,比如:
Nextcloud 是開源的,並且它基於開放標準。數據主權是 Nextcloud 的一大優勢,也就是說,你可以部署自己的 Nextcloud 實例來擺脫諸如 Dropbox、Office365 和 Google Drive 等專有(甚至不可信)的服務的束縛。
Nextcloud可以按照你的需求部署在小至單板計算機(比如樹莓派),大到有數百萬用戶的超大型數據中心中。Nextcloud 具有一套精心設計的授權方案以及可選的聯邦方案(用於連接多個獨立的實例),所以 Nextcloud 同樣非常適合在企業環境下部署。
Nextcloud 是 ownCloud的分支,有關其歷史,請參看其Wikipedia 頁面。
安裝概覽
完全安裝的 Nextcloud 應當(至少)包含以下組件:
一個web 伺服器;與之配套的應用伺服器,用來運行 Nextcloud(即 PHP 代碼);一個供 Nextcloud 使用的資料庫。
這篇文章將會講解使用 MariaDB/MySQL 或 PostgreSQL 作為資料庫和以下 web 伺服器與應用伺服器的組合:
- Nginx->uWSGI(plus uwsgi-plugin-php)
- Nginx->FPM
- Apache HTTP server(using mod_proxy_usgi)->uWSGI(plus uwsgi-plugin-php)
- Apache HTTP server(using mod_proxy_fcgi)->FPM
Nextcloud 包符合 Web 應用包指導規範。它要求 Web 應用程式應當由專門的用戶運行——在本例中為 nextcloud
。這就是為什麼要使用應用伺服器。出於相同的理由,使用 php-apache直接在 Apache 中執行 Nextcloud 的 PHP 代碼也是不可能的。
安裝
安裝 nextcloud包。當被問及時,選擇 php-legacy包 作為你的php版本,這會拉取相當多的依賴。大多數必要的 PHP 擴展都將以這種方式進行處理。此外,你必須安裝 php-legacy-gd包(最好是作為依賴包安裝,利用 pacman 的--asdeps
選項實現)。
同時建議你安裝下面的軟體包(同樣使用--asdeps
選項):
- php-legacy-sodium包 用於argon2散列算法
- php-legacy-imagick包和librsvg包 用於生成預覽
其他可選依賴將在後面介紹,具體內容取決於你的安裝配置(比如:你選擇了什麼樣的資料庫)。
請注意,php-legacy包 自帶一部分模塊(即bcmath、exif、gmp、intl和sysvsem),這些模塊不必顯式安裝。
配置
PHP
本指南不會修改 PHP 的主配置文件/etc/php-legacy/php.ini
,Nextcloud的 PHP 配置會放在單獨的地方,不干擾其它使用 PHP 的應用程式。這些文件被放在:
- 一份
php.ini
的副本,存放在/etc/webapps/nextcloud
(用於occ
命令行工具以及後台作業)。這是一份初始php.ini
的完整複製,由php-legacy包提供,Nextcloud 將對其進行一些修改,以供使用。
- 應用程式伺服器的相關配置。將在應用程式伺服器的部分介紹這些內容。
將/etc/php-legacy/php.ini
複製到/etc/webapps/nextcloud
(當然,最好是從php-legacy的tarball中解壓一份php.ini,php-legacy包存放在/var/cache/pacman/pkg
)。然後,雖然不是絕對必須的,但請紀律性修改文件的所有權:
# cp /etc/php-legacy/php.ini /etc/webapps/nextcloud
# chown nextcloud:nextcloud /etc/webapps/nextcloud/php.ini
Nextcloud文檔中列出的大部分所需的PHP模塊已經在剛剛複製的PHP配置文件中啟用。但還需手動啟用以下擴展:
/etc/webapps/nextcloud/php.ini
extension=exif extension=gd extension=iconv extension=intl extension=sysvsem ; bcmath and gmp for passwordless login extension=bcmath extension=gmp ; sodium for the argon2 hashing algorithm extension=sodium ; in case you installed php-legacy-imagick (as recommended) extension=imagick
根據你準備使用的資料庫,啟用相應的pdo_xxxx
模塊。請參閱:資料庫。
將date.timezone
設置為你的首選時區,例如:
/etc/webapps/nextcloud/php.ini
date.timezone = Asia/Shanghai
將PHP的內存限制放寬到至少512MiB:
/etc/webapps/nextcloud/php.ini
memory_limit = 512M
為了提高安全性,你也可以配置open_basedir
,但這不是必要的。這限制了 Nextcloud 的 PHP 代碼可以讀取和寫入文件的位置。經過驗證的設置是:
/etc/webapps/nextcloud/php.ini
open_basedir=/var/lib/nextcloud:/tmp:/usr/share/webapps/nextcloud:/etc/webapps/nextcloud:/dev/urandom:/usr/lib/php-legacy/modules:/var/log/nextcloud:/proc/meminfo:/proc/cpuinfo
根據你安裝的其他擴展,你可能需要擴充此列表,例如,如果你選擇了Redis,則需要擴展 /run/redis
。
配置opcache是不必要的,因為這份php.ini
只用於occ
命令行工具和後台作業,這二者並不經常運行PHP進程。
Nextcloud
將以下條目加入nextcloud的配置文件中:
/etc/webapps/nextcloud/config/config.php
'trusted_domains' => array ( 0 => 'localhost', 1 => 'cloud.mysite.com', ), 'overwrite.cli.url' => 'https://cloud.mysite.com/', 'htaccess.RewriteBase' => '/',
將示例的主機名cloud.mysite.com
修改成你的。如果你的Nextcloud需要通過子文件夾訪問(比如https://www.mysite.com/nextcloud
)overwrite.cli.url
和 htaccess.RewriteBase
必須做出相應更改。
系統和環境
確保Nextcloud使用剛剛編輯的php.ini
作為occ
工具的配置文件,設置NEXTCLOUD_PHP_CONFIG
環境變量:
$ export NEXTCLOUD_PHP_CONFIG=/etc/webapps/nextcloud/php.ini
同時將其加入.bashrc
(或.bash_profile
)使其永久生效。出於隱私和安全方面的考量,請為會話數據創建專用目錄:
# install --owner=nextcloud --group=nextcloud --mode=700 -d /var/lib/nextcloud/sessions
網頁應用的配置文件在 /etc/webapps/nextcloud/config/config.php
。
/var/lib/nextcloud/data/
,因為該目錄只能被 root 和應用本身訪問。要安裝使用這個網頁應用的軟體,請使用 /var/lib/nextcloud/apps/
。數據目錄
默認情況下,Nextcloud 將用戶數據存放在 /var/lib/nextcloud/data/
,這個位置可以調節:
/etc/webapps/nextcloud/config/config.php
$CONFIG = [ /* [..] */ 'datadirectory' => '/var/lib/nextcloud/data', /* [..] */ ]
nextcloud
用戶需要有對 datadirectory
的寫入權限。可寫應用目錄
nextcloud
不可寫入默認應用目錄 /usr/share/webapps/nextcloud/apps/
,因為它是軟體包的一部分。
要從應用商店安裝應用,使用一個獨立的、可寫的目錄是可以的。它默認指向 /var/lib/nextcloud/apps/
,並可以通過一個在網頁應用根目錄下的符號連結 (/usr/share/webapps/nextcloud/wapps
) 來訪問。
這個目錄是可調整的:
/etc/webapps/nextcloud/config/config.php
$CONFIG = [ /* [..] */ 'apps_paths' => [ [ 'path'=> '/usr/share/webapps/nextcloud/apps', 'url' => '/apps', 'writable' => false, ], [ 'path'=> '/var/lib/nextcloud/apps', 'url' => '/wapps', 'writable' => true, ], ], /* [..] */ ]
- 聲明為
writable
的apps_paths
條目需要可由nextcloud
用戶寫入。此外,需要在/usr/share/webapps/nextcloud/
中創建指向該目錄的符號連結。 - 上面的語法使用 PHP 的短數組語法。這可以用大多數指南使用的語法編寫:
/etc/webapps/nextcloud/config/config.php
$CONFIG = ( /* [..] */ 'apps_paths' => array ( 0 => array ( 'path' => '/usr/share/webapps/nextcloud/apps', 'url' => '/apps', 'writable' => false, ), 1 => array ( 'path' => '/var/lib/nextcloud/apps', 'url' => '/wapps', 'writable' => true, ), ), /* [..] */ )
日誌目錄
默認情況下,日誌生成在 /var/log/nextcloud/nextcloud.log
,這個位置是可以調整的:
/etc/webapps/nextcloud/config/config.php
$CONFIG = [ /* [..] */ 'logfile' => '/var/log/nextcloud/nextcloud.log', ] /* [..] */
資料庫
MariaDB/MySQL是Nextcloud的推薦選擇。
Nextcloud資料庫的相關資料大都與MariaDB / MySQL有關。Nextcloud開發人員承認,他們不太了解其它資料庫的專業知識。
PostgreSQL據說可以提供比MariaDB/MySQL更好的性能,並且方言更少。SQLite主要支持測試/開發安裝,不建議用於生產環境。受支持的資料庫列表中還包括了Oracle database,但本指南不對其作介紹。
MariaDB / MySQL
自從2013年以來,MariaDB一直作為Arch Linux中的MySQL默認實現。
如果你想在安裝Nextcloud的主機上同時運行資料庫,請配置並啟動MariaDB(如果你尚未這樣做)。請查看此文檔獲得更多信息。不要忘記使用mariadb-install-db
命令初始化MariaDB。為了提高安全性,建議將MariaDB配置為僅偵聽本地Unix套接字:
/etc/my.cnf.d/server.cnf
[mysqld] skip_networking
Nextcloud的官方文檔推薦將事務隔離級別設置為READ-COMMITTED。當你預計有大量並發事務從而造成負載過高時,這一點尤其重要。
/etc/my.cnf.d/server.cnf
[mysqld] transaction_isolation=READ-COMMITTED
設置binlog_format=ROW
的建議已經過時,MariaDB現行版本的默認設置「MIXED
」的表現已經足夠好。
以資料庫用戶root身份啟動命令行工具mysql
。(默認密碼為空,應當儘快修改)
$ mysql -u root -p
為Nextcloud創建用戶和與之配套的資料庫:
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'db-password';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES on nextcloud.* to 'nextcloud'@'localhost';
FLUSH privileges;
(用自行設置的Nextcloud資料庫用戶的密碼替換dp-password欄位。完成後使用\q命令退出。)
在PHP中啟用相應擴展:
/etc/webapps/nextcloud/php.ini
extension=pdo_mysql
與Nextcloud管理手冊中提供的信息不同,對MariaDB進行額外設置是不必要的。
使用以下命令完成對資料庫的安裝:
$ occ maintenance:install \ --database=mysql \ --database-name=nextcloud \ --database-host=localhost:/run/mysqld/mysqld.sock \ --database-user=nextcloud \ --database-pass=db-password \ --admin-pass=admin-password \ --admin-email=admin-email \ --data-dir=/var/lib/nextcloud/data
occ maintenance:install --database=pgsql --database-name=nextcloud --database-host=/run/postgresql...
。詳情請看下面給出的官方文檔。注意將db-password
,admin-password
,admin-email
替換成自己設定的相對應的值。這個命令可以使Nextcloud與資料庫運行在同一台主機上。關於更多選項,請查看官方文檔(輸入occ help maintenance:install
)。查看使用「occ」命令行工具來了解此工具的詳細信息。
PostgreSQL
如果你想在安裝Nextcloud的主機上同時運行資料庫,請配置並啟動PostgreSQL(如果你尚未這樣做)。請查看此文檔獲得更多信息。為了提高安全性,建議將PostgreSQL配置為僅偵聽本地Unix套接字:
/var/lib/postgres/data/postgresql.conf
listen_addresses = ''
特別的,請不要忘記使用initdb
命令初始化資料庫。接下來使用PostgreSQL的命令行工具psql
創建一個名為nextcloud
的用戶,然後為其創建一個同樣名為nextcloud
的資料庫:
[postgres]$ psql
CREATE USER nextcloud WITH PASSWORD 'db-password'; CREATE DATABASE nextcloud TEMPLATE template0 ENCODING 'UNICODE'; ALTER DATABASE nextcloud OWNER TO nextcloud; GRANT ALL PRIVILEGES ON DATABASE nextcloud TO nextcloud; \q
(用自行設置的Nextcloud資料庫用戶的密碼替換dp-password
欄位。)
下載PHP依賴包php-legacy-pgsql包(使用pacman --asdpes選項),然後啟用相應的PHP擴展:
/etc/webapps/nextcloud/php.ini
extension=pdo_pgsql
使用以下命令完成對資料庫的安裝:
$ occ maintenance:install \ --database=pgsql \ --database-name=nextcloud \ --database-host=/run/postgresql \ --database-user=nextcloud \ --database-pass=db-password \ --admin-pass=admin-password \ --admin-email=admin-email \ --data-dir=/var/lib/nextcloud/data
注意將db-password
,admin-password
,admin-email
替換成自己設定的相對應的值。這個命令可以使Nextcloud與資料庫運行在同一台主機上。關於更多選項,請查看官方文檔(輸入occ help maintenance:install
)。查看「occ」工具使用方法來了解此工具的詳細信息。
應用伺服器
uwsgi包和FPM是兩種常用的應用伺服器,可用於處理PHP代碼。其中FPM專門用於PHP,FPM與web伺服器之間使用的通信協議是fastcgi。FPM的文檔仍有改進的空間。而uWSGI可以通過安裝插件來支持包含PHP在內的一部分語言,uWSGI與web伺服器之間使用的通信協議是uwsgi(小寫)。uWSGI有大量的文檔可供查看,雖然大量的文檔可能會導致閱讀困難以及混亂。
uWSGI
uWSGI有自己的文章。在那裡可以找到很多有用的信息。最好作為依賴安裝uwsgi包和它的插件uwsgi-plugin-php-legacy包,比如使用--asdpes
選項。若要使用uWSGI運行Nextcloud代碼,你必須為uWSGI創建一個專門的配置文件(nextcloud.ini
)並且定義一個systemd服務。
nextcloud.ini
Nextcloud包已經包含了一個示例文件,該文件已經位於正確的位置/etc/uwsgi/nextcloud.ini
。通常情況下你都必須根據你的需求調整此文件。你應該找到一份具有大量注釋的修改版本(與nextcloud自帶的相比)。它提供了一個簡潔的Nextcloud配置供個人使用(中等負載)。
通常情況下,應當將啟用的擴展,擴展的配置以及open_basedir
與/etc/webapps/nextcloud/php.ini
同步(opcache除外)。
/etc/uwsgi/nextcloud.ini
的更改應該會變得更廣泛。在軟體包更新期間,將創建一個名為nextcloud.ini.pacnew
的文件,以防止nextcloud包提供的原始文件發生更改。為了更好的檢查新文件的更改情況並將其應用到/etc/uwsgi/nextcloud.ini
中去,可以採取以下方法:
獲取軟體包提供nextcloud.ini
的文件(例如直接從軟體包中解壓),存儲一份它的副本,並將其命名為nextcloud.ini.package
。
如果因nextcloud包更新而產生了nextcloud.ini.pacnew
文件,你可以通過下面的命令比對新舊文件的差異:
diff nextcloud.ini.package nextcloud.ini.pacnew
有選擇性的應用更改到你自己的nextcloud.ini,這具體取決於它們是否適用於你的版本
用nextcloud.ini.pacnew
替換nextcloud.ini.package
uWSGI服務
uwsgi包軟體包提供了一個模板單元文件(uwsgi@.service
)。實例ID(此處為nextcloud)用於選擇正確的配置文件。啟用並啟動uwsgi@nextcloud.service
。
如果你有多個(比如2個)像這樣運行,這時可以考慮使用emperor模式,這樣更節約資源。
FPM
如果選擇FPM作為你的應用伺服器,下載php-legacy-fpm包(最好作為依賴包安裝 --asdeps
)
FPM的配置包含一份與它提供的全部應用相關的php.ini
副本,一份專為每個應用(此處為Nextcloud)生成的pool file文件。最後,還需要調整systemd服務文件。
php-fpm.ini
如前文所述,本指南將不會修改PHP主配置文件/etc/php-legacy/php.ini
,而是創建並修改它的副本:
# cp /etc/php-legacy/php.ini /etc/php-legacy/php-fpm.ini
確保該文件由root所有且僅能被root修改。(-rw-r--r-- 1 root root ... php-fpm.ini
)。啟用 op-cache(取消該行的注釋)。
/etc/php-legacy/php-fpm.ini
zend_extension=opcache
然後將下面的內容放到[opcache]
行下面
/etc/php-legacy/php-fpm.ini
opcache.enable = 1 opcache.interned_strings_buffer = 16 opcache.max_accelerated_files = 10000 opcache.memory_consumption = 128 opcache.save_comments = 1 opcache.revalidate_freq = 1
nextcloud.conf
下一步是創建pool file。它負責為Nextcloud應用程式生成專用的FPM進程。創建文件/etc/php-legacy/php-fpm.d/nextcloud.conf
,你也許可以借鑑這個預先配置好的版本。
確保pool file由root所有且僅能被root修改。(-rw-r--r-- 1 root root ... nextcloud.conf
)。取決於是否開啟訪問記錄(預配置版本中已開啟),應當為日誌文件創建相應的目錄(預配置版本中是/var/log/php-fpm-legacy/access
)。按你的想法修改配置(特別是pm...
,php_value[...]
以及php_flag[...]
)。php_value[...]
和php_flag[...]
應當與文件/etc/webapps/nextcloud/php.ini
中的相一致(而不是/etc/php-legacy/php-fpm.ini
)。
也可以通過修改php-fpm.ini
文件來達到同樣的目的,但是對php-fpm.ini
的修改將對所有由FPM提供服務的應用生效。
www.conf
的pool file的文件,但是在本指南中不發揮任何作用。一個防止其生效的好方法是將其重命名為www.conf.package
並創建一個僅包含注釋行(以分號開頭的行)的文件www.conf
。使用這種方法可以將www.conf
變成空操作文件。該文件同樣不會因php-legacy-fpm包的更新而被覆蓋。在更新中,新文件被命名為www.conf.pacnew
,你通過可以對比www.conf.package
與www.conf.pacnew
來檢查新文件中是否有重大更改。如果發現了需要重新生成nextcloud.conf
的更改,請在對nextcloud.conf
操作完成後,將www.conf.pacnew
重命名為www.conf.package
。systemd服務
FPM作為systemd的一個服務運行。你應該修改服務的配置來使其能夠運行Nextcloud。最好的方法是通過drop-in文件(:
/etc/systemd/system/php-fpm-legacy.service.d/override.conf
[Service] ExecStart= ExecStart=/usr/bin/php-fpm-legacy --nodaemonize --fpm-config /etc/php-legacy/php-fpm.conf --php-ini /etc/php-legacy/php-fpm.ini ReadWritePaths=/var/lib/nextcloud ReadWritePaths=/etc/webapps/nextcloud/config
- 它將ExecStart行替換為上一節中提到的php-fpm.ini的啟動命令。
- 它將/var/lib/nextcloud和/etc/webapps/nextcloud/config目錄(及其下所有內容全部置為可寫。原始服務定義的ProtectSystem=full會默認將/usr,/boot和/etc作為只讀目錄對FPM進程開放。
保持/etc目錄整潔
Nextcloud會默認創建uWSGI的配置文件/etc/uwsgi/nextcloud.ini
.該文件對你沒有任何作用(雖然也沒有任何危害)如果你無論如何都不想它出現在你的目錄中。將以下代碼添加到/etc/pacman.conf
中:
/etc/pacman.conf
# uWSGI configuration that comes with Nextcloud is not needed NoExtract = etc/uwsgi/nextcloud.ini
Web伺服器
有相當數量的web伺服器可供選擇。但你無論作何選擇都要記住,Nextcloud應用必須用其自己的系統用戶nextcloud運行。所以才需要將請求轉發到上文提到的應用伺服器中。
nginx
有關nginx的配置,顯然已經超過了本文的覆蓋範圍。可以查看相關文章了解更多信息。Nextcloud的官方文檔中也提供了詳細配置文件可供參考。你可以自行決定如何將這些代碼引入到你的nginx配置文件中。一種常見的方法是使用/etc/nginx/sites-available
和/etc/nginx/sites-enabled
目錄來單獨配置不同的伺服器(也被稱作虛擬主機)。請參看:Nginx#管理伺服器入口。
如果使用了nextcloud文檔中提供的nginx配置,應將根目錄更改為:
cloud.mysite.com.conf
root /usr/share/webapps/nextcloud;
upstream php-handler { ... }
的部分是不必要的。只需要在location
中指定fastcgi_pass unix:/run/php-fpm-legacy/nextcloud.sock;
當使用uWSGI替代FPM時,應將location
替換成:
cloud.mysite.com.conf
location ~ \.php(?:$|/) { include uwsgi_params; uwsgi_modifier1 14; # Avoid duplicate headers confusing OC checks uwsgi_hide_header X-Frame-Options; uwsgi_hide_header X-XSS-Protection; uwsgi_hide_header X-Content-Type-Options; uwsgi_hide_header X-Robots-Tag; uwsgi_hide_header X-Download-Options; uwsgi_hide_header X-Permitted-Cross-Domain-Policies; uwsgi_pass unix:/run/uwsgi/nextcloud.sock;
}
你可能需要解決以下問題(部分):
- 你的伺服器名稱,即你的Nextcloud能夠訪問的伺服器部分的URL。
- 用於簽名的名稱和用於SSL/TLS的密鑰。
- 訪問記錄存放的位置。
-
Certbot(或其他ACME客戶端)用於存放域驗證質詢的位置。在這裡,
alias
可能比try_files
更合適。 - 用於訪問Nextcloud的路徑(訪問URL中伺服器名稱和埠的權限)。
- 你正在使用的應用伺服器(uWSGI或FPM),即nginx將以何種方式、向何處傳遞觸發的PHP代碼(見上文)。
- 配置OCSP裝訂。
Nginx無需安裝任何其他模塊,因為其本就支持這兩種協議:FastCGI和uwsgi。
2.Apache HTTP伺服器
apache HTTP伺服器中有許多有用的信息。Nextcloud的文檔中同樣有一些配置樣例,你也可以從/usr/share/doc/nextcloud/apache.example.conf
中找到它們。對mod_php的隱性依賴將不再可用,需要使用mod_proxy_fcgi或mod_proxy_uwsgi。
你可以在本站中找到使apache與FPM協同工作的方法。uWSGI的文檔中有使apache與uWSGI和mod_proxy_uwsgi協同工作以處理PHP代碼的方法。注意apache包含了mod_proxy_fcgi
以及mod_proxy_uswgi
兩個插件。它們應按需開啟。
下面是運行Nextcloud所需的模塊:
/etc/httpd/conf/httpd.conf
# these are already loaded in a standard Apache installation LoadModule headers_module modules/mod_headers.so LoadModule env_module modules/mod_env.so LoadModule dir_module modules/mod_dir.so LoadModule mime_module modules/mod_mime.so LoadModule setenvif_module modules/mod_setenvif.so # these need to be uncommented explicitly LoadModule rewrite_module modules/mod_rewrite.so LoadModule ssl_module modules/mod_ssl.so LoadModule socache_shmcb_module modules/mod_socache_shmcb.so LoadModule proxy_module modules/mod_proxy.so # either this one in case you use FPM LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so # or this one in case you opt for uWSGI LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
取消注釋下面的代碼來引入TLS配置參數:
/etc/httpd/conf/httpd.conf
Include conf/extra/httpd-ssl.conf
有關如何優化TLS配置的詳細信息,參看Mozilla SSL配置工具。
請參閱以下兩個示例配置文件,具體取決於你希望如何訪問Nextcloud:
- 通過主機名訪問(例:
https://cloud.mysite.com/
),把這段代碼放入/etc/httpd/conf/extra/httpd-vhosts.conf
中。 - 通過子文件夾訪問(例:
https://www.mysite.com/nextcloud/
),把這段代碼放入/etc/httpd/conf/httpd.conf
中。
當然,你應該按照自己的實際情況來修改示例的配置文件。當你使用uWSGI時,用SetHandler "proxy:unix:/run/uwsgi/nextcloud.sock|uwsgi://nextcloud/"
替換SetHandler
行。
Nextcloud包自帶一個.htaccess
文件,它已經處理了很多重寫和標題內容。運行 occ maintenance:update:htaccess
以適配此文件。/etc/webapps/nextcloud/config/config.php
中的htaccess.RewriteBase
參數對此至關重要。
後台作業
Nextcloud要求按計劃運行某些任務。請查看相關文檔來獲取更多信息。實現這個目的最簡單(也是最可靠)的方法是使用systemd的「服務」和已經內置在nextcloud包中的計時器單元。為使作業使用正確的php.ini
文件(而不是全局php.ini
),服務單元需要進行一些調整。創建一個附加配置片段(drop-in file)並添加:
/etc/systemd/system/nextcloud-cron.service.d/override.conf
[Service] ExecStart= ExecStart=/usr/bin/php-legacy -c /etc/webapps/nextcloud/php.ini -f /usr/share/webapps/nextcloud/cron.php
之後啟用並啟動nextcloud-cron.timer
(不是.service
)
根據文檔的建議,添加如下參數到nextcloud的配置文件中。
/etc/webapps/nextcloud/config/config.php
.... 'maintenance_window_start' => 0, ....
該值是UTC定義的整點時刻,每天從這一時刻開始的4小時,所有高耗時的作業將會被盡數處理,也就是說,請將它安排在主要工作時間以外。
使用內存緩存(In-memory caching)
Nextcloud 的文檔推薦使用存內對象緩存,這樣可以顯著提高性能。
APCu
安裝php-legacy-apcu包 (作為依賴--asdeps
)。在相關配置文件中啟用此擴展:
-
occ
命令和後台任務需要用到的/etc/webapps/nextcloud/php.ini
。 - 下面的文件由你的應用伺服器決定
-
uWSGI:
/etc/uwsgi/nextcloud.ini
。 -
FPM:
/etc/php-legacy/php-fpm.d/nextcloud.conf
。
-
uWSGI:
將以下代碼添加到/etc/webapps/nextcloud/php.ini
中:
/etc/webapps/nextcloud/php.ini
extension=apcu apc.ttl=7200 apc.enable_cli = 1
(最好是寫在Module Settings
部分的下面什麼地方)。
對於另外的那個文件,激活APCu的設置默認已經在其中,只需要取消注釋即可。 另外兩個與 APCu 相關的配置參數也已存在。不需要再修改(touch)/etc/php-legacy/php.ini
或者/etc/php-legacy/conf.d/apcu.ini
這兩個文件。
重啟應用伺服器(不是Web伺服器,官方文檔中強調了)。將下面的代碼添加到Nextcloud配置文件中:
/etc/webapps/nextcloud/config/config.php
'memcache.local' => '\OC\Memcache\APCu',
Redis
下載php-legacy-igbinary包和php-legacy-redis包(作為依賴--asdeps
)如果你在本地運行這個組件(與Nextcloud在同一台主機上)。 當然,你也可以選擇將Redis伺服器安裝在其它機器上。詳細信息參看: Nextcloud官方文檔
在有關文件中啟用所需的igbinary
和redis
擴展:
-
occ
命令和後台任務需要用到的/etc/webapps/nextcloud/php.ini
。 - 下面的文件由你的應用伺服器決定
-
uWSGI:
/etc/uwsgi/nextcloud.ini
。 -
FPM:
/etc/php-legacy/php-fpm.d/nextcloud.conf
。
-
uWSGI:
找到文件中有關啟用擴展的部分,然後添加上啟動igbinary
和redis
的兩行。
extension=redis
之前加載extension=igbinary
。否則occ
會報這個錯:/usr/lib/php-legacy/modules/redis.so: undefined symbol: igbinary_serialize。如果你在上述的配置文件中指定了open_basedir
選項,並且通過本地Unix套接字在本地使用Redis服務,那麼則必須擴展允許PHP讀取和寫入文件的目錄列表。在上面提到的文件找到有關的行,然後在其中添加由Redis創建的包含本地Unix套接字的目錄,例如:/run/redis
。
open_basedir
。所以說,如果你使用了這些配置文件,那麼必須要調整它們。將下面的內容添加到Nextcloud配置文件中:
/etc/webapps/nextcloud/config/config.php
'memcache.local' => '\OC\Memcache\APCu', 'memcache.distributed' => '\OC\Memcache\Redis', 'memcache.locking' => '\OC\Memcache\Redis', 'redis' => [ 'host' => '/run/redis/redis.sock', 'port' => 0, 'dbindex' => 0, 'password' => '', 'timeout' => 1.5, ],
相同的,應根據需要調整/run/redis/redis.sock
。dbindex
,password
和timeout
是可選的。
如果Redis運行在不同的機器上:
/etc/webapps/nextcloud/config/config.php
'memcache.local' => '\OC\Memcache\APCu', 'memcache.distributed' => '\OC\Memcache\Redis', 'memcache.locking' => '\OC\Memcache\Redis', 'redis' => [ 'host' => 'redis-host.mysite.com', 'port' => 6379, ],
你需要將redis-host.mysite.com
替換成你自己的設置。
提高安全性
請參看Nextcloud官方文檔和本百科中的安全條目。Nextcloud也提供了一個安全性檢測工具。
同步
桌面
官方提供的客戶端可以下載 nextcloud-client包。AUR中提供了它的替代版本:nextcloud-client-gitAUR。注意:Nextcloud 不支持 owncloud-client包。
桌面客戶端基本上會將計算機的一個或多個目錄與 Nextcloud 的文件服務中的目錄同步。它可以很好地集成在桌面文件管理器中(KDE plasma 中是 Dolphin、Gnome 中是 Nautilus),在其上顯示表示同步與共享狀態的疊加層。文件的右鍵菜單都會多出一個 Nextcloud 選項,可以通過此選項來使用 Nextcloud 的相關功能。Nextcloud 的官方文檔中專門介紹了其桌面客戶端。
如果 Nextcloud 客戶端未能成功與文件管理器協同,請查看 nextcloud-client包(pacman -Qi nextcloud-client
). 例如 Nautilus(Gnome)需要 python-nautilus包。使用(pacman -S --asdeps
)作為依賴安裝。
Thunderbird
102 版本以後的 Thunderbird 完全支持 CalDAV 和 CardDAV ——具有自動檢測功能(即使不輸入很長的URL也能訪問日曆和地址簿)。更多信息,請參閱 Nextcloud 的官方文檔。
以 davfs2 掛載
如果你想使用 WebDAV 掛載 Nextcloud,請下載 davfs2包(在 davfs2 中有描述)。
使用下面的命令掛載 Nextcloud:
# mount -t davfs https://your_domain/nextcloud/remote.php/dav/files/username/ /path/to/mount
也可以在 /etc/fstab
創建條目:
/etc/fstab
https://your_domain/nextcloud/remote.php/dav/files/username/ /path/to/mount davfs rw,user,noauto 0 0
掛載到 GNOME Files (Nautilus)
你可以直接使用 Nautilus ('+ Other Locations')通過 WebDAV 來訪問文件。使用 Nextcloud 伺服器的 Web GUI 上顯示的連結(例如:https://cloud.mysite.com/remote.php/webdav/
)然後把 davs
替換成 https
。當 Nautilus 嘗試連接時會詢問用戶名和密碼。
Android
從 Google Play 或 F-Droid 上下載Nextcloud的官方應用。
啟用日曆及聯繫人同步(Android 4+):
- 下載DAVx5(Play Store,F-Droid)。
- 創建一個新的 DAVdroid 帳戶,在帳戶選項中設置你伺服器的URL(例如:
https://cloud.mysite.com
)及登錄帳號和密碼。
/remote.php/{carddav,webdav}
這一部分。DAVdroid 會為自己找到正確的 URL。iOS
App Store 有Nextcloud的官方應用。
提示和技巧
使用「occ」命令行工具
occ
是一個非常有用的管理工具。詳情請參看Nextcloud官方文檔。你可以使用occ
命令做許多操作,比如管理用戶和配置應用。
/usr/bin/occ
是一個方便的基於原始occ工具/usr/share/webapps/nextcloud/occ
的包裝,它自動使用默認用戶(nextcloud)運行,使用默認的PHP可執行程序與配置文件。可以使用NEXTCLOUD_USER
, NEXTCLOUD_PHP
和NEXTCLOUD_PHP_CONFIG
環境變量來指定使用別的用戶、PHP可執行文件和PHP配置文件)。特別是對於使用了本內容配置和應用伺服器配置自己的伺服器的用戶,使用NEXTCLOUD_PHP_CONFIG
來指定自己的配置文件是必要的。即使用Next cloud指定的PHP配置文件。在本例中,將export NEXTCLOUD_PHP_CONFIG=/etc/webapps/nextcloud/php.ini
行添加到你的.bashrc
中。
當使用php包而非推薦的php-legacy包時你也需要設置NEXTCLOUD_PHP
環境變量,即export NEXTCLOUD_PHP=/usr/bin/php
也要被添加到.bashrc中。
/etc/webapps/nextcloud/php.ini
中設置apc.enable_cli=1
。否則occ
命令將提示APCu的配置有誤。Pacman hook
nextcloud包自帶一個pacman hook,它負責在軟體包更新後自動升級Nextcloud資料庫。查看 /usr/share/doc/nextcloud/nextcloud.hook
這個文件。
只可惜這個鉤子在運行occ upgrade
命令時無條件的使用全局的php.ini
文件。也就是說,它並不使用上文提及的帳戶下的環境變量NEXTCLOUD_PHP_CONFIG
。
一個可行的解決方案是在適當的地方複製hook文件:
# mkdir -vp /etc/pacman.d/hooks # cp -a /usr/share/doc/nextcloud/nextcloud.hook /etc/pacman.d/hooks/10-nextcloud.hook
並且修改以Exec
開始的行:
/etc/pacman.d/hooks/10-nextcloud.hook
Exec = /usr/bin/runuser -u nextcloud -- /usr/bin/php-legacy --php-ini /etc/webapps/nextcloud/php.ini /usr/share/webapps/nextcloud/occ upgrade
在子目錄下運行Nextcloud
如果按照Web伺服器一節中介紹的方法安裝Nextcloud,最後需要一整個主機名才能訪問Nextcloud服務。例如,cloud.mysite.com
。如果你想通過子目錄訪問Nextcloud的話。例如,www.mysite.com/nextcloud
。請嘗試:
- Nginx:請查看Nextcloud的官方文檔,其中對這部分內容有完整介紹。
- Apache:編輯
/etc/httpd/conf/extra/nextcloud.conf
文件,並注釋掉<VirtualHost *:80> ... </VirtualHost>
這部分內容。
.well-known
URLs,它用於服務發現。更多內容請參看官方文檔:Service discovery
Docker
要使用Docker運行Nextcloud,請查看Docker Hub上的Nextcloud倉庫。
Office集成
對於Office集成,目前有三種解決方案:
這三者的共同點是需要一個單獨的伺服器,並且你的Web伺服器需要進行一些調整以將某些請求轉發到Office服務。實際的集成由上面三者的Nextcloud app完成。
需要注意的是,上面的三個產品都是面向商業客戶的,也就是說你必須為其付費。只有Collabora有面向開發者免費的方案。ONLYOFFICE有對於家庭部署的定價方案。
有關安裝、配置和如何集成的更多信息,參看:
禁用應用推薦
默認情況下,Nextcloud會向新用戶推薦應用,這可能會導致大量通知。要禁用此功能,請使用occ app:disable recommendations
。
使用Calcardbackup備份日曆和地址簿
可以配置calcardbackupAUR,它可以定期備份日曆和地址簿。根據喜好編輯/etc/calcardbackup/calcardbackup.conf
文件,並且啟動和啟用calcardbackup.timer
。
故障排除
有關故障排除的詳細信息,請參看本頁面的英文版本。