跳至內容
出自 Arch Linux 中文维基

根據 Wikipedia:Nextcloud:

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 或基於 php-legacy 的安裝(依賴元軟體包 php-interpreter)。本文強烈建議使用 php-legacy 包安裝以保證安全(也能讓你高枕無憂)。詳情請看遷移到 php-legacy。本文假定您使用了 php-legacy 進行安裝。

安裝 nextcloud。當被問及時,選擇 php-legacy 作為你的php版本,這會拉取相當多的依賴。大多數必要的 PHP 擴展都將以這種方式進行處理。此外,你必須安裝 php-legacy-gd(最好是作為依賴包安裝,利用 pacman 的--asdeps選項實現)。

同時建議你安裝下面的軟體包(同樣使用--asdeps選項):

其他可選依賴將在後面介紹,具體內容取決於你的安裝配置(比如:你選擇了什麼樣的資料庫)。

請注意,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/nextcloudoverwrite.cli.urlhtaccess.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

注意:Nextcloud 應當把用戶數據存放在 /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,
        ],
],
/* [..] */
]
注意:
  • 聲明為 writableapps_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命令退出。)

注意:MariaDB對於UTF8編碼的解釋存在缺陷,這導致了MariaDB無法存儲碼位在0x10000及以上的字符(比如emoji)。MariaDB在5.5版本引入了一種新的編碼來「修復」這個問題,它叫做utf8mb4.所以千萬不要使用MariaDB的utf8編碼,請使用utf8mb4。如果需要遷移,請參閱此文檔

在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-passwordadmin-passwordadmin-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-passwordadmin-passwordadmin-email替換成自己設定的相對應的值。這個命令可以使Nextcloud與資料庫運行在同一台主機上。關於更多選項,請查看官方文檔(輸入occ help maintenance:install)。查看「occ」工具使用方法來了解此工具的詳細信息。

應用伺服器

uwsgiFPM是兩種常用的應用伺服器,可用於處理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服務。

警告:必須說明的一點:uWSGI最近維護得很少,其PHP插件更是維護甚少。這已經引發了一些問題,現在只能通過Arch Linux軟體包的維護者修補uWSGI代碼解決問題,即不能在上游解決。

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
警告:不要嘗試通過php_value[...]和php_flag[...]來把上面這些設置放到pool file中。否則FPM進程會在第一個請求處崩潰。

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提供服務的應用生效。

提示:php-legacy-fpm自帶一個名為www.conf的pool file的文件,但是在本指南中不發揮任何作用。一個防止其生效的好方法是將其重命名為www.conf.package並創建一個僅包含注釋行(以分號開頭的行)的文件www.conf。使用這種方法可以將www.conf變成空操作文件。該文件同樣不會因php-legacy-fpm的更新而被覆蓋。在更新中,新文件被命名為www.conf.pacnew,你通過可以對比www.conf.packagewww.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進程開放。

不要忘記啟用啟動php-fpm-legacy服務。

保持/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小時,所有高耗時的作業將會被盡數處理,也就是說,請將它安排在主要工作時間以外。

警告:不要下載 nextcloud-systemd-timers。該軟體包已經過時且不再維護。

使用內存緩存(In-memory caching)

Nextcloud 的文檔推薦使用存內對象緩存,這樣可以顯著提高性能。

注意:關注這篇通知:Nextcloud服務以伺服器推送取代了客戶端輪詢,這大大減少了同步延遲,這依賴於redis。

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

將以下代碼添加到/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-igbinaryphp-legacy-redis(作為依賴--asdeps)如果你在本地運行這個組件(與Nextcloud在同一台主機上)。 當然,你也可以選擇將Redis伺服器安裝在其它機器上。詳細信息參看: Nextcloud官方文檔

注意:「Redis」與「APCu」本地緩存並不衝突。事實上,Nextcloud的文檔推薦同時配置這二者。

在有關文件中啟用所需的igbinaryredis擴展:

  • occ命令和後台任務需要用到的 /etc/webapps/nextcloud/php.ini
  • 下面的文件由你的應用伺服器決定
    • uWSGI:/etc/uwsgi/nextcloud.ini
    • FPM:/etc/php-legacy/php-fpm.d/nextcloud.conf

找到文件中有關啟用擴展的部分,然後添加上啟動igbinaryredis的兩行。

注意:應當在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

注意:#Application server 一節中提到的示例配置文件nextcloud.ininextcloud.conf中已經啟用了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.sockdbindexpasswordtimeout是可選的。

如果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 的 Web 界面上的設置>設備及會話安全來生成新的令牌。

桌面

官方提供的客戶端可以下載 nextcloud-clientAUR中提供了它的替代版本:nextcloud-client-gitAUR。注意:Nextcloud 不支持 owncloud-client

桌面客戶端基本上會將計算機的一個或多個目錄與 Nextcloud 的文件服務中的目錄同步。它可以很好地集成在桌面文件管理器中(KDE plasma 中是 Dolphin、Gnome 中是 Nautilus),在其上顯示表示同步與共享狀態的疊加層。文件的右鍵菜單都會多出一個 Nextcloud 選項,可以通過此選項來使用 Nextcloud 的相關功能。Nextcloud 的官方文檔中專門介紹了其桌面客戶端。

如果 Nextcloud 客戶端未能成功與文件管理器協同,請查看 nextcloud-clientpacman -Qi nextcloud-client). 例如 Nautilus(Gnome)需要 python-nautilus。使用(pacman -S --asdeps)作為依賴安裝。

注意:Nextcloud 的桌面客戶端提供了一個可以指示同步狀態的系統托盤圖標[1]。但 GNOME 沒有提供開箱即用的系統托盤圖標 API[2]。如果需要使用此功能,可以通過安裝並啟用 gnome-shell-extension-appindicator。詳情請看GNOME#Extensions

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
提示:如果想要實現自動掛載目錄,你可以將你的用戶名(及密碼,可選)存儲在 davfs2#Storing credentials 描述的文件中。
注意:如果不能創建、複製文件及目錄,參見 davfs2#Creating/copying files not possible and/or freezes

掛載到 GNOME Files (Nautilus)

你可以直接使用 Nautilus ('+ Other Locations')通過 WebDAV 來訪問文件。使用 Nextcloud 伺服器的 Web GUI 上顯示的連結(例如:https://cloud.mysite.com/remote.php/webdav/)然後把 davs 替換成 https。當 Nautilus 嘗試連接時會詢問用戶名和密碼。

注意:確保你已經安裝了 gvfs-dnssd,如果沒有安裝,也許會出現「Location is not mountable」錯誤。

Android

Google PlayF-Droid 上下載Nextcloud的官方應用。

啟用日曆及聯繫人同步(Android 4+):

  1. 下載DAVx5Play StoreF-Droid)。
  2. 創建一個新的 DAVdroid 帳戶,在帳戶選項中設置你伺服器的URL(例如:https://cloud.mysite.com)及登錄帳號和密碼。
注意:如前面的 Nextcloud#Web 伺服器章節所示,如果你在 web 伺服器上配置了適當的重定向,則不需要/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_PHPNEXTCLOUD_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中。

警告:當使用php-legacy-apcu進行緩存時,則需要在 /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。請嘗試:

  • Apache:編輯/etc/httpd/conf/extra/nextcloud.conf文件,並注釋掉<VirtualHost *:80> ... </VirtualHost>這部分內容。
注意:別忘了編輯.well-knownURLs,它用於服務發現。更多內容請參看官方文檔: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

故障排除

有關故障排除的詳細信息,請參看本頁面的英文版本

參見