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-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 discoveryDocker[编辑 | 编辑源代码]
要使用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
。
故障排除[编辑 | 编辑源代码]
有关故障排除的详细信息,请参看本页面的英文版本。