Nextcloud

来自 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

故障排除[编辑 | 编辑源代码]

有关故障排除的详细信息,请参看本页面的英文版本

参见[编辑 | 编辑源代码]