Nextcloud - Arch Linux 中文维基

跳至內容

# Nextcloud

出自 Arch Linux 中文维基

相關文章

- Apache HTTP 伺服器
- Nginx
- OpenSSL
- WebDAV

翻譯狀態：

- 本文（或部分內容）譯自 Nextcloud，最近一次同步於 2024-11-17，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

根據 Wikipedia:Nextcloud:

Nextcloud 是一套客戶機——伺服器軟體（依賴被稱為 apps 的組件），能夠實現諸如共享，協作以及溝通的需要,比如：

- 文件共享
- 個人信息管理（contacts,calendar,tasks)
- 通訊（mail,chat,video conferencing)
- 合作編輯(text,Office integration)

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-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`。

注意：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,
            ],
    ],
    /* [..] */
    ]

注意：

- 聲明為 `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命令退出。）

注意：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-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服務。

警告：必須說明的一點：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.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進程開放。

不要忘記啟用和啟動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。

### 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-igbinary包和php-legacy-redis包（作為依賴`--asdeps`）如果你在本地運行這個組件（與Nextcloud在同一台主機上）。 當然，你也可以選擇將Redis伺服器安裝在其它機器上。詳細信息參看： Nextcloud官方文檔

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

在有關文件中啟用所需的`igbinary`和`redis`擴展：

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

找到文件中有關啟用擴展的部分，然後添加上啟動`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`。

注意：在#Application server 一節中提到的示例配置文件nextcloud.ini和nextcloud.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.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 的 Web 界面上的設置>設備及會話安全來生成新的令牌。

### 桌面

官方提供的客戶端可以下載 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`)作為依賴安裝。

注意：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 Play 或 F-Droid 上下載Nextcloud的官方應用。

啟用日曆及聯繫人同步（Android 4+）：

1. 下載DAVx5（Play Store，F-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_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中。

警告：當使用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`。請嘗試：

- 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集成，目前有三種解決方案：

- Collabora Online
- ONLYOFFICE
- MS Office Online Server

這三者的共同點是需要一個單獨的伺服器，並且你的Web伺服器需要進行一些調整以將某些請求轉發到Office服務。實際的集成由上面三者的Nextcloud app完成。

需要注意的是，上面的三個產品都是面向商業客戶的，也就是說你必須為其付費。只有Collabora有面向開發者免費的方案。ONLYOFFICE有對於家庭部署的定價方案。

有關安裝、配置和如何集成的更多信息，參看：

- Collabora online, app
- ONLYOFFICE, app
- MS Office Online Server, app

### 禁用應用推薦

默認情況下，Nextcloud會向新用戶推薦應用，這可能會導致大量通知。要禁用此功能，請使用`occ app:disable recommendations`。

### 使用Calcardbackup備份日曆和地址簿

可以配置calcardbackupAUR，它可以定期備份日曆和地址簿。根據喜好編輯`/etc/calcardbackup/calcardbackup.conf`文件，並且啟動和啟用`calcardbackup.timer`。

## 故障排除

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

## 參見

- Nextcloud Documentation Overview
- Nextcloud Admin Manual

分類：​

- 存在語法高亮錯誤的頁面
- 文件分享
- 網絡應用

Nextcloud
新增話題