Nextcloud
Nextcloud 是一套客户端-服务器软件,它(通过所谓的应用)允许各种共享、协作和通信,例如:
Nextcloud 是开源的,并且基于开放标准。数据主权是一个很大的优势,也就是说,通过您自己的 Nextcloud 实例,您可以摆脱专有(且可能不可信)的服务,如 Dropbox、Office 365 或 Google Drive。
根据您的需求,Nextcloud 可以从单板计算机(例如 Raspberry Pi)一直部署到为数百万用户提供服务的大型数据中心。凭借精心设计的授权方案和联合选项(连接离散实例),Nextcloud 非常适合在企业环境中使用。
Nextcloud 是 ownCloud 的一个分支。有关历史,请参阅 Wikipedia。
安装概述
一个完整的 Nextcloud 安装包含(至少)以下组件
一个 Web 服务器,搭配一个 应用服务器,其上运行着 Nextcloud(即 PHP 代码),并使用一个 数据库。
本文将涵盖 MariaDB/MySQL 和 PostgreSQL 作为数据库,以及以下 Web 服务器和应用服务器的组合:
- nginx → uWSGI(加上 uwsgi-plugin-php)
- nginx → FPM,
- Apache HTTP 服务器(使用 mod_proxy_uwsgi) → uWSGI(加上 uwsgi-plugin-php)
- Apache HTTP 服务器(使用 mod_proxy_fcgi) → FPM
Nextcloud 软件包符合Web 应用程序软件包指南。 除此之外,这还强制要求 Web 应用程序以专用用户身份运行 - 在本例中为 nextcloud
。 这是应用服务器在此处发挥作用的原因之一。 出于同样的原因,不再可能通过 php-apache 在 Apache 进程中直接执行 Nextcloud 的 PHP 代码。
安装
安装 nextcloud 软件包。 当被询问时,选择 php-legacy 作为您的 PHP 版本。 这将拉取相当多的依赖软件包。 大多数必需的 PHP 扩展将通过这种方式处理。 此外,您必须安装 php-legacy-gd(最好作为依赖软件包,使用 pacman 选项 --asdeps
)。
建议同时安装以下软件包
- php-legacy-sodium,用于 argon2 哈希算法,以及
- php-legacy-imagick 和 librsvg,用于预览生成
(同样使用 --asdeps
)。 其他可选依赖项将在稍后根据您的具体设置(例如,您选择的数据库)进行介绍。
请注意,一些模块(即 bcmath、exif、gmp、intl 和 sysvsem)随 php-legacy 一起提供。 因此,这些模块不需要显式安装。
配置
PHP
本指南不修改 PHP 的中央配置文件 /etc/php-legacy/php.ini
,而是将 Nextcloud 特定的 PHP 配置放在不会潜在干扰其他基于 PHP 的应用程序设置的位置。 这些位置是
/etc/webapps/nextcloud
中php.ini
的专用副本(用于occ
命令行工具和后台任务)。 这实际上是 php-legacy 软件包提供的原始php.ini
的副本,其中包含一些 Nextcloud 特定的添加/修改。
- 应用服务器配置中的相应设置。 这些将在关于应用服务器的部分中介绍。
将 /etc/php-legacy/php.ini
的副本复制到 /etc/webapps/nextcloud
(或者更好的是,从 /var/cache/pacman/pkg
下面的 php-legacy 软件包 tarball 中提取 php.ini
)。 尽管不是绝对必要,但请更改副本的所有权
# 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 = Europe/Berlin
将 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
。
系统与环境
为确保 occ
工具使用 Nextcloud 特定的 php.ini
,请设置环境变量 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
数据库
MariaDB/MySQL 是 Nextcloud 的规范选择。
- MySQL 或 MariaDB 数据库是推荐的数据库引擎。[1]
大多数关于 Nextcloud 数据库的信息都与 MariaDB/MySQL 有关。 Nextcloud 开发人员承认对其他数据库的专业知识较少。
PostgreSQL 据说提供更好的性能,并且与 MariaDB/MySQL 相比,总体上具有更少的怪癖。 SQLite 主要支持用于测试/开发安装,不建议用于生产环境。 支持的数据库列表还包含 Oracle 数据库。 本文不涵盖此产品。
MariaDB / MySQL
由于 MariaDB 自 2013 年以来一直是 Arch Linux 中的默认 MySQL 实现[2],因此本文仅提及 MariaDB。
如果您想在与 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
至少与推荐的 ROW
一样好。 在任何情况下,此设置仅在应用复制时才相关。
使用数据库用户 root 启动 CLI 工具 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;
(db-password
是您必须选择的数据库用户 nextcloud 的实际密码的占位符。)使用 \q
退出工具。
因此,如果您已决定使用 MariaDB 作为 Nextcloud 安装的数据库,则必须启用相应的 PHP 扩展
/etc/webapps/nextcloud/php.ini
extension=pdo_mysql
不需要进一步的配置(与 MariaDB 相关)(与 Nextcloud 的 管理员手册 中给出的信息相反)。
现在使用以下命令设置 Nextcloud 的数据库模式
$ 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
注意占位符(例如 db-password
)并将其替换为适当的值。 此命令假定您在与 Nextcloud 相同的主机上运行数据库。 输入 occ help maintenance:install
并参阅 Nextcloud 的 文档 以获取其他选项。 有关此工具的 Arch 特定详细信息,请参阅 使用 "occ" 命令行工具。
PostgreSQL
有关 PostgreSQL 的详细信息,请查阅相应的 文章。 如果您想在与 Nextcloud 安装相同的主机上运行数据库,请配置并启动 postgresql(如果您尚未这样做)。 在此场景中,为了提高安全性,建议将 PostgreSQL 配置为仅监听本地 UNIX 套接字
/var/lib/postgres/data/postgresql.conf
listen_addresses = ''
尤其不要忘记使用 initdb
初始化您的数据库。 完成后,启动 PostgreSQL 的 CLI 工具 psql 并创建数据库用户 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
(db-password
是您必须选择的数据库用户 nextcloud 的密码的占位符。)
安装额外的软件包 php-legacy-pgsql 作为依赖项(pacman 选项 --asdeps
),并在 /etc/webapps/nextcloud/php.ini
中启用相应的 PHP 扩展
/etc/webapps/nextcloud/php.ini
extension=pdo_pgsql
现在使用以下命令设置 Nextcloud 的数据库模式
$ 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
)并将其替换为适当的值。 此命令假定您在与 Nextcloud 相同的主机上运行数据库。 输入 occ help maintenance:install
并参阅 Nextcloud 的 文档 以获取其他选项。 有关此工具的 Arch 特定详细信息,请参阅 使用 "occ" 命令行工具。
应用服务器
有两种流行的应用服务器可用于处理 PHP 代码:uWSGI 或 FPM。 FPM 专门用于 PHP。 Web 服务器和 FPM 之间使用的协议是 fastcgi。 该工具的文档仍有改进空间。 另一方面,uWSGI 可以通过特定于语言的插件为以少数几种语言编写的代码提供服务。 使用的协议是 uwsgi(小写)。 该工具的文档非常详尽 - 尽管大量的文档可能会变得混乱且笨拙。
uWSGI
uWSGI 有其自己的文章。 可以在那里找到许多有用的信息。 安装 uwsgi 和插件 uwsgi-plugin-php-legacy - 最好作为依赖项,即使用 --asdeps
。 要使用(或在)uWSGI 中运行 Nextcloud 的代码,您必须配置一个 uWSGI 特定的配置文件 (nextcloud.ini
) 并定义一个 systemd 服务。
nextcloud.ini
nextcloud 软件包包含一个示例配置文件,该文件已位于正确的位置 /etc/uwsgi/nextcloud.ini
。 在几乎所有情况下,您都必须根据您的要求和设置调整此文件。 查找一个包含大量注释更改的版本(与软件包的版本相比)。 它假定为个人使用而进行的简单 Nextcloud 安装(即负载适中)。
通常,使启用的扩展、特定于扩展的设置和 open_basedir
与 /etc/webapps/nextcloud/php.ini
(opcache 除外)保持同步。
/etc/uwsgi/nextcloud.ini
的更改可能会变得非常广泛。 如果软件包 nextcloud 提供的原始文件发生更改,则在软件包更新期间将创建一个名为 nextcloud.ini.pacnew
的文件。 为了更好地跟踪后一个文件中的更改并将其应用于 /etc/uwsgi/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)的所谓池文件。 最后,您必须调整 systemd 服务文件。
php-fpm.ini
如前所述,本文避免修改 /etc/php-legacy/php.ini
中的 PHP 中央配置。 而是创建一个 FPM 特定的副本。
# 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[...]
将这些设置放在池文件中。 您的 FPM 进程将在第一个请求时持续崩溃。nextcloud.conf
接下来,您必须为 FPM 创建一个所谓的池文件。 它负责为 Nextcloud 应用程序生成专用的 FPM 进程。 创建文件 /etc/php-legacy/php-fpm.d/nextcloud.conf
- 您可以使用这个 功能版本 作为起点。
再次确保此池文件由 root 拥有且仅可由 root 写入(即 -rw-r--r-- 1 root root ... nextcloud.conf
)。 根据是否配置了访问日志(上述示例 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_value[...]
和 php_flag[...]
完成的设置也可以在 php-fpm.ini
中指定。 但请注意,php-fpm.ini
中的设置适用于 FPM 服务的所有应用程序。
www.conf
,但在此处几乎没有用处。 摆脱它的一个好方法是将其重命名为 www.conf.package
,并创建一个仅包含注释行(以分号开头的行)的文件 www.conf
。 这样,www.conf
变为无操作。 在安装新版本的 php-legacy-fpm 期间,它也不会被覆盖。 而是创建一个文件 www.conf.pacnew
。 您可以将其与 www.conf.package
进行比较,以查看池文件中是否有任何重大更改,您可能需要在 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 进程以只读方式挂载。 - 如果您想使用硬件视频加速(例如在 memories 应用中),您需要显式允许访问您的图形设备,因为
PrivateDevices=true
会从 FPM 进程中隐藏任何设备。 例如,将BindPaths=/dev/dri/renderD128
和DeviceAllow=/dev/dri/renderD128 rw
添加到 drop-in 文件中,可以允许使用正确配置的 Intel iGpu。
保持 /etc 目录整洁
Nextcloud 软件包无条件地创建 uWSGI 配置文件 /etc/uwsgi/nextcloud.ini
。 当然,当您运行 FPM 而不是 uWSGI 时,它毫无用处(并且没有任何危害)。 如果您仍然想摆脱它,只需将以下 NoExtract 行添加到 /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 { ... }
。 只需在处理将带有 PHP URI 的请求转发到应用服务器的 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; }
您可能需要调整的事项(并非详尽无遗)
- 您的服务器名称(
server_name
子句 2x),即您的 Nextcloud 安装将通过其访问的 URL 的服务器部分。 - 您用于 SSL/TLS 的证书和密钥的名称。
- 您是否以及在何处写入访问日志。
- Certbot(或任何其他 ACME 客户端)将放置域名验证质询的位置。 此处使用
alias
而不是try_files
可能更合适。 - 用于访问您的 Nextcloud 安装的路径。 (URL 中服务器名称和端口部分右侧的部分。)
- 您正在使用的应用服务器(uWSGI 或 FPM),即 nginx 将如何以及在何处传递需要触发某些 PHP 代码的请求。 (见上文。)
- 配置 OCSP stapling。
由于 nginx 本身支持 FastCGI 和 uwsgi 协议,因此无需安装任何其他模块。
Apache HTTP 服务器
在关于Apache HTTP 服务器的文章中找到许多有用的信息。 Nextcloud 的文档有一些示例配置,也可以在 /usr/share/doc/nextcloud/apache.example.conf
中找到。 两者都隐含地依赖于 mod_php,而 mod_php 已无法再使用。 需要应用 mod_proxy_fcgi 或 mod_proxy_uwsgi。
有关如何将 Apache 与 FPM 集成的信息可以在本 wiki 中找到。 uWSGI 的文档有一些关于如何通过 uWSGI 和 mod_proxy_uwsgi 将 Apache 与 PHP 集成的信息。 请注意,Apache 软件包附带了 mod_proxy_fcgi 和 mod_proxy_uwsgi 模块。 需要根据需要加载它们。
运行 Nextcloud 需要以下 Apache 模块
/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 安装
- 如果您的 Nextcloud 安装通过专用主机名(例如
https://cloud.mysite.com/
)访问,请将 此 片段放入/etc/httpd/conf/extra/httpd-vhosts.conf
。
- 如果您的 Nextcloud 安装位于您网站的子文件夹中(例如
https://www.mysite.com/nextcloud/
),请将 此 片段放入您的/etc/httpd/conf/httpd.conf
。
当然,您必须根据您的具体设置调整这些示例配置文件。 当您使用 uWSGI 时,将 SetHandler
指令替换为 SetHandler "proxy:unix:/run/uwsgi/nextcloud.sock|uwsgi://nextcloud/"
。
Nextcloud 软件包附带了一个 .htaccess
文件,该文件已经处理了很多重写和标头内容。 运行 occ maintenance:update:htaccess
以调整此文件。 /etc/webapps/nextcloud/config/config.php
中的参数 htaccess.RewriteBase
对此至关重要。
后台任务
Nextcloud 需要在计划的基础上运行某些任务。 有关详细信息,请参阅 Nextcloud 的文档。 设置这些后台作业最简单(也最可靠)的方法是使用 nextcloud 已经安装的 systemd 服务和 timer 单元。 服务单元需要进行一些调整,以便作业使用正确的 PHP ini 文件(而不是全局 php.ini
)。 创建一个drop-in 文件并添加
/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
(而不是服务)。
按照文档的建议,添加参数
/etc/webapps/nextcloud/config/config.php
.... 'maintenance_window_start' => 0, ....
到 Nextcloud 的配置文件。 该值是 UTC 时间中一天的小时,定义了 4 小时窗口的开始。 需要每天仅运行一次的耗时作业将在此时间范围内安排,即在工作时间之外。
内存缓存
Nextcloud 的文档建议应用某种内存对象缓存,以显着提高性能。
APCu
安装 php-legacy-apcu(作为依赖项 --asdeps
)。 在相关的配置文件中启用扩展。 这些是
/etc/webapps/nextcloud/php.ini
,供occ
命令和后台作业使用,以及- 根据您使用的应用程序服务器,可以是
- 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 相关的其他两个配置参数也已存在。 无需修改 /etc/php-legacy/php.ini
或 /etc/php-legacy/conf.d/apcu.ini
。
重启您的应用程序服务器(而不是 Nextcloud 文档声称的 Web 服务器)。 将以下行添加到您的 Nextcloud 配置文件
/etc/webapps/nextcloud/config/config.php
'memcache.local' => '\OC\Memcache\APCu',
Redis
如果您在本地(即与 Nextcloud 在同一主机上)运行此组件,请安装 php-legacy-igbinary 和 php-legacy-redis(作为依赖项 --asdeps
)。 或者,Redis 服务器可以在不同的机器上运行。 有关更多信息,请参阅 Nextcloud 的文档。
在相关的配置文件中启用所需的扩展 igbinary
和 redis
。 这些是
/etc/webapps/nextcloud/php.ini
,供occ
命令和后台作业使用,以及- 根据您使用的应用程序服务器,可以是
- 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
选项,并且在本地使用 Redis 和本地 Unix 套接字,则必须扩展 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。 请记住,不支持将 owncloud-client 与 Nextcloud 一起使用。
桌面客户端基本上将您桌面计算机的一个或多个目录与 Nextcloud 文件服务中的相应文件夹同步。 它与您桌面的文件管理器(KDE Plasma 中的 Dolphin,Gnome 中的 Nautilus)很好地集成,显示表示同步和共享状态的覆盖图标。 每个文件的上下文菜单都会获得一个额外的条目Nextcloud,用于管理此文件的共享并获取公共或内部共享链接。 Nextcloud 的文档有一个专门介绍桌面客户端的卷。
如果集成未按描述工作,请查阅 nextcloud-client 软件包的可选依赖项。 例如,Nautilus 需要 nautilus-python。 作为依赖包安装。
Thunderbird
自 102 版本起,Thunderbird 完全支持 CalDAV 和 CardDAV - 甚至具有自动检测功能(即您不必提供长 URL 来访问您的日历和地址簿)。 有关详细信息,请参阅 Nextcloud 的文档。
使用 davfs2 挂载文件
如果您想使用 WebDAV 挂载 Nextcloud,请安装 davfs2AUR(如 davfs2 中所述)。
要挂载您的 Nextcloud,请使用
# mount -t davfs https://cloud.mysite.com/remote.php/dav/files/username/ /path/to/mount
您也可以在 /etc/fstab
中为此创建一个条目
/etc/fstab
https://cloud.mysite.com/remote.php/dav/files/username/ /path/to/mount davfs rw,user,noauto 0 0
在 GNOME 文件(Nautilus)中挂载文件
您可以通过 WebDAV 协议直接在 Nautilus(“+ 其他位置”)中访问文件。 使用您的 Nextcloud 安装 Web GUI 中显示的链接(例如 https://cloud.mysite.com/remote.php/webdav/
),但将协议名称 https
替换为 davs
。 Nautilus 将在尝试连接时要求输入用户名和密码。
Android
从 Google Play 或 F-Droid 下载官方 Nextcloud 应用程序。
要启用联系人和日历同步(Android 4+)
- 下载 DAVx5(Play 商店,F-Droid)。
- 在账户设置中创建一个新的 DAVdroid 账户,并指定您的服务器 URL(例如
https://cloud.mysite.com
)和登录名/密码对。
/remote.php/{carddav,webdav}
部分,如上面的 Web 服务器 部分所示。 DAVdroid 将自行找到正确的 URL。iOS
从 App Store 下载官方 Nextcloud 应用程序。
提示和技巧
使用 "occ" 命令行工具
occ
是一个用于服务器管理的有用工具。 有关详细信息,请参阅 Nextcloud 的文档。 您可以使用 occ
执行许多常见的服务器操作,例如管理用户和配置应用程序。
/usr/bin/occ
提供了一个围绕原始 /usr/share/webapps/nextcloud/occ
的便捷包装器,它自动以默认用户(nextcloud)身份运行,使用默认的 PHP 可执行文件和 PHP 配置文件。 环境变量 NEXTCLOUD_USER
、NEXTCLOUD_PHP
和 NEXTCLOUD_PHP_CONFIG
可用于指定非默认用户、PHP 可执行文件和 PHP 配置文件(分别)。 特别是后者(使用 NEXTCLOUD_PHP_CONFIG
)在 Nextcloud 的设置方式如 配置 和 应用程序服务器 部分所述时是必要的,即使用 Nextcloud 特定的 PHP 配置。 在这种情况下,将 export NEXTCLOUD_PHP_CONFIG=/etc/webapps/nextcloud/php.ini
放入您的 .bashrc
中。
当使用软件包 php 而不是推荐的软件包 php-legacy 时,您还必须设置 NEXTCLOUD_PHP
,即 export NEXTCLOUD_PHP=/usr/bin/php
。
/etc/webapps/nextcloud/php.ini
中设置 apc.enable_cli=1
。 否则,occ
命令将抱怨 APCu 未正确配置。Pacman hook
nextcloud 软件包附带一个 pacman hook,它负责在软件包更新后自动升级 Nextcloud 数据库。 请查看 /usr/share/doc/nextcloud/nextcloud.hook
。
不幸的是,此 hook 在运行 occ upgrade
时无条件地使用全局 php.ini
,即它没有考虑到 使用 "occ" 命令行工具 中上述环境变量 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 安装可通过专用服务器名称访问的设置,例如 cloud.mysite.com
。 如果您希望 Nextcloud 位于子目录中,例如 www.mysite.com/nextcloud
,则
- 对于 nginx,请参阅 Nextcloud 文档中明确涵盖此主题的部分。
- 对于 apache,编辑您包含的
/etc/httpd/conf/extra/nextcloud.conf
,并注释掉包含文件的<VirtualHost *:80> ... </VirtualHost>
部分。
.well-known
URL。 有关更多信息,请参阅 Nextcloud 文档中的服务发现。Docker
有关在 Docker 中运行 Nextcloud 的信息,请参阅 Docker Hub 上的 Nextcloud 仓库。
Office 集成
目前有三种不同的 Office 集成解决方案
这三者共同之处在于需要专用服务器,并且需要调整您的 Web 服务器以将某些请求转发到 Office 服务。 然后通过特定于上述产品之一的 Nextcloud 应用程序来完成与 Nextcloud 的实际集成。
请注意,这三种产品都面向企业,即您将需要为 Office 服务付费。 只有 Collabora 提供免费的开发者计划(CODE)。 ONLYOFFICE 以合理的价格提供 Home Server 计划。
有关安装、设置说明以及与 Nextcloud 的集成,请咨询
禁用应用推荐
默认情况下,Nextcloud 会向新客户端推荐应用,这可能会导致大量通知。 要禁用此功能,请使用 occ app:disable recommendations
禁用 recommendations 应用。
使用 calcardbackup 备份日历和地址簿
可以安装和配置 calcardbackupAUR 软件包,以提供日历和/或地址簿数据库的定期备份。 编辑 /etc/calcardbackup/calcardbackup.conf
以符合您的喜好,然后启动并启用 calcardbackup.timer
。
故障排除
读取日志
默认情况下,Web 应用程序的日志位于 /var/log/nextcloud/nextcloud.log
中。 条目(行)采用 JSON 格式,可能非常长。 使用 jq 可以大大提高可读性
# jq . </var/log/nextcloud/nextcloud.log | less
解决 “is_file(): open_basedir restriction in effect” 问题
在 Nextcloud v28.0.4 中引入了一个回归,它在包含以下内容的出错消息中表现出来
is_file(): open_basedir restriction in effect
在日志文件 /var/log/nextcloud/nextcloud.log
中。 此消息后给出的文件路径在一个位置缺少一个斜杠,而在另一个位置则多出一个斜杠,例如
File (/usr/share/webapps/nextcloudapps//dav/l10n/de.js)
这是一个已知的 bug,该 bug 已被 修复 并 向后移植到 v28.0.5。 对于 v28.0.4,您可以应用以下解决方法
- 添加一个符号链接
/usr/share/webapps/nextcloudapps
,指向/usr/share/webapps/nextcloud/apps
# cd /usr/share/webapps # ln -sf nextcloud/apps nextcloudapps
- 将此符号链接的路径添加到与您的 Nextcloud 安装相关的
open_basedir
设置。 这些是
/etc/webapps/nextcloud/php.ini
open_basedir=...:/usr/share/webapps/nextcloudapps:...
以及根据您使用的应用程序服务器,可以是 (FPM)
/etc/php-legacy/php-fpm.d/nextcloud.conf
php_value[open_basedir] = ...:/usr/share/webapps/nextcloudapps:...
或 (uWSGI)
/etc/uwsgi/nextcloud.ini
php-set = open_basedir=...:/usr/share/webapps/nextcloudapps:...
使用 v28.0.5,您应该能够再次回滚此解决方法。
将 v27 升级到 v28
将版本 27 安装升级到版本 28 需要以下步骤
安装并启用扩展 sodium
在版本 28 中,建议安装并启用 PHP 扩展 sodium,它提供了 argon2 哈希算法。 安装相应的软件包 php-legacy-sodium 作为依赖项(即使用 --asdeps
),并在两个位置启用它
/etc/webapps/nextcloud/php.ini
,供occ
命令和后台作业使用,以及- 根据您使用的应用程序服务器,可以是
- uWSGI 的情况下的
/etc/uwsgi/nextcloud.ini
,或 - FPM 的情况下的
/etc/php-legacy/php-fpm.d/nextcloud.conf
。
- uWSGI 的情况下的
只需查找启用其他扩展的现有部分,并添加与 sodium
相对应的另外一行。
将 maintenance_window_start 添加到配置
建议将参数 maintenance_window_start
添加到 Nextcloud 的配置文件 /etc/webapps/nextcloud/config/config.php
。 有关详细信息,请参阅 #后台作业 部分和 Nextcloud 的文档。
解决 “ResourceLocator can not find a web root” 问题
直到 28.0.3 版本,Nextcloud 都存在一个回归问题,该问题表现为日志 /var/log/nextcloud/nextcloud.log
中充斥着类似的消息
- ResourceLocator can not find a web root
请参阅相应的 GitHub 工单。 幸运的是,此问题对 Nextcloud 的功能没有影响,但真正的问题可能会被此日志噪声掩盖。 解决方法是更改 Nextcloud 的配置文件
/etc/webapps/nextcloud/config/config.php
'apps_paths' => array ( 0 => array ( 'path' => '/usr/share/webapps/nextcloud/apps', 'url' => '/apps', 'writable' => false, ), 1 => array ( 'path' => '/usr/share/webapps/nextcloud/wapps', 'url' => '/wapps', 'writable' => true, ), ),
/usr/share/webapps/nextcloud/wapps
是指向 /var/lib/nextcloud/apps
的符号链接。 它是 nextcloud 软件包的一部分 - 因此通常已经存在。 如果由于某种原因它不存在,请使用以下命令创建它
# ln -sf /var/lib/nextcloud/apps /usr/share/webapps/nextcloud/wapps
当问题得到解决后,可以将 path
更改回 /var/lib/nextcloud/apps
。
迁移到 php-legacy
过去曾多次发生 php 软件包及时更新到最新的 PHP 版本(符合 Arch Linux 的滚动发布理念),但 Nextcloud 与这个全新的版本不兼容的情况 - 破坏了现有的安装,并给 nextcloud 软件包的维护者和用户带来了大量工作。 当软件包 php 从 8.1 版本切换到 8.2 版本时,这种情况几乎再次发生。
为了避免这种频繁的麻烦,在那时引入了一组新的 php-legacy 软件包。 这些软件包将遵循最旧但仍然 积极支持的 PHP 分支。 软件包 nextcloud 已被修改为依赖于元软件包 php-interpreter,该软件包由 php 和 php-legacy 提供。 这样,软件包 nextcloud 的用户可以选择在 php 或 php-legacy 之上构建他们的 Nextcloud 安装。
强烈建议选择 php-legacy。 使用这个仅稍微过时的 PHP 版本,系统升级不太可能导致现有的 Nextcloud 安装无法使用。
迁移到 php-legacy 需要一些手动操作。 根据您的实际设置,必须应用以下任务的子集
PHP 扩展
用它们对应的 php-legacy 对等项替换 php 扩展。 例如,卸载 php-apcu php-fpm php-gd php-imagick php-pgsql 并作为依赖项安装 php-legacy-apcu php-legacy-fpm php-legacy-gd php-legacy-imagick php-legacy-pgsql。
以前的扩展 php-intl 是一个例外,因为它已成为 php 和 php-legacy 的组成部分。 因此,此处无需显式处理此软件包。
PHP 扩展的实际集合取决于数据库、内存对象缓存、应用程序服务器和其他因素。 当然,如果另一个应用程序依赖于最新的 PHP 版本,则可能仍然需要非 legacy 模块。 这同样适用于 php 本身。
Nextcloud 特定的 php.ini
副本
/etc/webapps/nextcloud/php.ini
open_basedir=...:/usr/lib/php-legacy/modules:... extension_dir = "/usr/lib/php-legacy/modules/" ;extension=imap <= to be deleted
FPM 配置
(这仅在使用应用程序服务器 FPM 时适用。)
$ mv /etc/php/php-fpm.ini /etc/php-legacy/php-fpm.ini $ mv /etc/php/php-fpm.d/nextcloud.conf /etc/php-legacy/php-fpm.d/nextcloud.conf
修改 /etc/php-legacy/php-fpm.ini
/etc/php-legacy/php-fpm.ini
extension_dir = "/usr/lib/php-legacy/modules/" ;extension=imap <= to be deleted
修改 /etc/php-legacy/php-fpm.d/nextcloud.conf
/etc/php-legacy/php-fpm.d/nextcloud.conf
listen = /run/php-fpm-legacy/nextcloud.sock ; It's available in: /usr/share/php-legacy/fpm/status.html access.log = /var/log/php-fpm-legacy/access/$pool.log ; uncomment if php-imap is installed and used <= to be deleted ; php_value[extension] = imap <= to be deleted
可选,但建议:使 www.conf
成为空操作,同时仍然能够跟踪此文件的修改,这些修改可能会随 php-legacy-fpm 未来的更新而到来
$ mv /etc/php-legacy/php-fpm.d/www.conf /etc/php-legacy/php-fpm.d/www.conf.package $ echo "; just a no-op" > /etc/php-legacy/php-fpm.d/www.conf
停止并禁用 systemd 服务 php-fpm.service。 为 php-fpm-legacy.service 创建一个 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
启用并启动 systemd 服务 php-fpm-legacy.service。
uWSGI 配置
(这仅在使用应用程序服务器 uWSGI 时适用。)
/etc/uwsgi/nextcloud.ini
php-set = open_basedir=...:/usr/lib/php-legacy/modules... # uncomment if php-imap is installed and used <= to be deleted # php-set = extension=imap <= to be deleted
Nginx 配置
修改配置文件,其中配置了将某些请求转发到应用程序服务器。 在 FPM 的情况下,例如
cloud.mysite.com.conf
fastcgi_pass unix:/run/php-fpm-legacy/nextcloud.sock;
在 uWSGI 的情况下,不需要进行调整。
Apache HTTP 服务器配置
如果您使用 Apache 的 HTTP 服务器和 FPM 作为应用程序服务器,请调整您配置中的此行
SetHandler "proxy:unix:/run/php-fpm-legacy/nextcloud.sock|fcgi://nextcloud/"
在 uWSGI 的情况下,不需要进行调整。
后台任务
更新 Nextcloud 计划后台作业的 drop-in 文件
/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
Pacman hook
pacman 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 升级期间,pacman 将抱怨找不到 /usr/bin/php
。
清理
不要忘记清理可能已过时的文件和目录。 潜在的候选者是
/usr/lib/php /etc/php
一个或多个应用程序的怪异行为
在两个位置可以找到包含 Nextcloud 应用程序文件的文件夹
/usr/share/webapps/nextcloud/apps
(又名只读应用程序目录)。 这是 nextcloud 软件包和应用程序软件包(例如 nextcloud-app-contacts)放置包含 Nextcloud 应用程序文件的文件夹的位置。
/var/lib/nextcloud/apps
(又名可写应用程序目录)。 这是您找到通过 GUI 或通过occ app:install
命令安装的应用程序的文件所在的文件夹的位置。
当应用程序的文件可以在两个目录中找到时(尤其是在不同版本中),可能会发生各种奇怪的事情。 在一个具体的 案例 中,contacts 应用程序可以在只读应用程序目录和可写应用程序目录中找到。 结果,GUI 中包含联系人的页面未显示。 它仍然是空白的白色。 浏览器的 Javascript 控制台显示错误消息
Uncaught Error: Could not find initial state contactsinteraction of contacts
检查在两个位置找到的应用程序。 要确定是删除只读目录还是可写目录中的应用程序文件夹,请确定该应用程序是否是软件包的一部分。 运行
# cd /usr/share/webapps/nextcloud/apps # pacman -Qo * >/dev/null
报告为
error: No package owns ....
(并且也可以在可写应用程序目录中找到)的所有文件夹都可以从 /usr/share/webapps/nextcloud/apps
中安全删除。 其他双重安装的应用程序(即属于软件包的应用程序)应从 /var/lib/nextcloud/apps
中删除。
InnoDB 拒绝写入 ROW_FORMAT=COMPRESSED 的表
MariaDB 版本 >= 10.6 且 < 10.6.6 与 Nextcloud 不兼容,因为数据库强制执行 对压缩的 InnoDB 表只读,而 Nextcloud 一直(并且仍然)在使用这些类型的表
- 从 MariaDB 10.6.0 到 MariaDB 10.6.5,COMPRESSED 行格式的表默认情况下是只读的。 这旨在作为取消写入支持并弃用该功能的第一步。
- 此计划已被废弃,从 MariaDB 10.6.6 开始,COMPRESSED 表不再默认只读。
此外,Nextcloud 已经 解决了 此问题。 从 Nextcloud v24 开始,Nextcloud 的新安装不再使用行格式 COMPRESSED。 必须注意的是,现有的(v24 之前的)安装不会自动从行格式 COMPRESSED 迁移走。
底线:您可能不会受到影响,因为自 2022-02-10 以来,Arch Linux 一直在发布 MariaDB v10.6.6 或更高版本。
在不太可能发生您受到此问题影响的情况下,有几种可能的补救措施
- 调整您的 MariaDB 配置
/etc/my.cnf.d/server.cnf
[mariadb-10.6] innodb_read_only_compressed=OFF
- 按照 一些 评论 对相应的 Nextcloud 问题 的建议,将您的 MariaDB 表从行格式 COMPRESSED 迁移到 DYNAMIC。 请注意,只要您停留在 Nextcloud < v24,新表将再次使用行格式 COMPRESSED - 因此将需要以相同的方式进行迁移。
- 用 PostgreSQL 替换 MariaDB,并使用
occ db:convert-type
迁移您的 Nextcloud 实例的数据。 有关详细信息,请参阅 Nextcloud 的文档。
升级到 >= 21.0.0 后出现权限和设置问题
http
用户运行的。 这在关于此用户的跨应用程序访问方面存在安全隐患(它可以访问所有 Web 应用程序的所有数据)。自 21.0.0 版本起,nextcloud 更紧密地遵循Web 应用程序软件包指南。 这引入了单独的用户 nextcloud
,Web 应用程序以此用户身份运行。
从 nextcloud < 21.0.0 升级后,请确保
- 数据目录位于
/var/lib/nextcloud/data
- 可写应用程序目录位于
/var/lib/nextcloud/apps
- 数据目录和可写应用程序目录,以及它们下面的所有文件,都是可写的,并且属于
nextcloud
用户 - Web 应用程序配置文件位于
/etc/webapps/nextcloud/config/
,该目录及其内容是可写的,并且属于nextcloud
用户 - 应用程序服务器,例如 FPM 或 uWSGI,配置为以
nextcloud
用户而不是http
用户身份运行 Web 应用程序 - 更新 cron 任务/systemd 定时器以使用新用户运行
- 最后,通过执行以下操作,允许您的 Web 服务器用户
http
读取 Nextcloud 安装目录/usr/share/webapps/nextcloud
# chown -R nextcloud:http /usr/share/webapps/nextcloud
登录循环,在 access.log、error.log 和 nextcloud.log 中没有任何线索
正如 论坛帖子 中提到的那样,可以通过设置 sessions 目录的正确权限来解决此问题。(有关详细信息,请参阅 Nextcloud 的文档。)sessions 目录也可能完全缺失。 系统和环境 中记录了此目录的创建。
/var/lib/nextcloud
应该看起来像这样
drwxr-xr-x 6 nextcloud nextcloud 4096 17. Apr 00:56 ./ drwxr-xr-x 21 root root 4096 17. Apr 00:53 ../ drwxr-xr-x 2 nextcloud nextcloud 4096 16. Feb 00:21 apps/ drwxrwx--- 10 nextcloud nextcloud 4096 16. Apr 13:46 data/ drwx------ 2 nextcloud nextcloud 4096 17. Apr 01:04 sessions/
此外,这可能是由于系统分区已满而引起的,这是由于 nextcloud.log 文件过大,因为 此错误。 在这种情况下,截断日志文件并禁用预览生成器,或在 config.php 中将日志级别设置为 4 并重启 Nextcloud 有助于解决问题。
环境变量不可用
根据您使用的应用程序服务器,可以为 Nextcloud 的 PHP 代码提供自定义环境变量。
FPM
按照 Nextcloud 的文档,例如,在 /etc/php-legacy/php-fpm.d/nextcloud.conf
中添加一行或多行
/etc/php-legacy/php-fpm.d/nextcloud.conf
env[PATH] = /usr/local/bin:/usr/bin:/bin
uWSGI
例如,在 /etc/uwsgi/nextcloud.ini
中添加一行或多行
/etc/uwsgi/nextcloud.ini
env = PATH=/usr/local/bin:/usr/bin:/bin
请注意,第二个 =
周围不能有任何空格。
您正在通过安全连接访问您的实例,但是您的实例正在生成不安全的 URL
如果您在管理设置中收到以下消息
- 您正在通过安全连接访问您的实例,但是您的实例正在生成不安全的 URL。 这很可能意味着您位于反向代理之后,并且覆盖配置变量未正确设置。 请阅读有关此内容的文档页面。
在您的配置文件中添加以下内容:[7]
/etc/webapps/nextcloud/config/config.php
'trusted_proxies' => ['192.168.1.0'], 'overwriteprotocol' => 'https',
将 192.168.1.0
替换为您的公网 IP。
Nextcloud 报告索引损坏 (MariaDB)
如果 Nextcloud 报告索引损坏(例如在 occ db:
命令期间或在管理 > 日志记录中),您可以通过执行以下命令修复数据库
$ mysqlcheck --check --auto-repair nextcloud -u nextcloud -p
如果命令失败,它仍然会指出包含损坏索引的表 TABLE
。 通过登录 mariadb 修复它
$ mysql -u nextcloud -p mysql> use nextcloud; mysql> check table TABLE; mysql> optimize table TABLE; mysql> exit;
替换 TABLE
以匹配您的发现。
未能获取 Collabora capabilities endpoint
如果您收到以下响应
- 未能获取 Collabora capabilities endpoint: Client error: `GET https://127.0.0.1/wapps/richdocumentscode/proxy.php?req=/hosting/capabilities` resulted in a `404 Not Found` response
仔细检查您的 config.php
,条目 overwrite.cli.url
是否已按照 配置 / Nextcloud 部分中的描述进行设置。