Nextcloud 是一款开源免费的私有云存储网盘项目,可以让你快速便捷地搭建一套属于自己或团队的云同步网盘,从而实现跨平台跨设备文件同步、共享、版本控制、团队协作等功能。它的客户端覆盖了 Windows、Mac、Android、iOS、Linux 等各种平台,也提供了网页端以及 WebDAV 接口,所以你几乎可以在各种设备上方便地访问你的云盘,相当于一个简易的 NAS。你也可以挂载第三方云存储,比如OneDrive、FTP、OSS等,个人比较喜欢它的笔记和看板插件。

虽然 Nextcloud 是使用 PHP 开发的,但是安装过程中总会遇到很多问题,尤其是在 Nginx 上安装。我搞了两天,以下是我遇到的一些问题的解决方案,如果你发现 Nextcloud 管理后台日志中一直有报错,表示我用 Docker 安装的也是如此,只要不影响使用,可以无视。

  1. 需要的 PHP 扩展
    在宝塔面板的“软件商店”里选择使用的 php版本-设置-安装扩展 安装,需要 fileinfo、opcache、redis、imagemagick、exif、exif 这几个扩展,同时需要将禁用函数中的 shell_exec 删掉

  2. 项目您的网页服务器未正确设置以解析“/.well-known/caldav”。更多信息请参见文档。您的网页服务器未正确设置以解析“/.well-known/carddav”。更多信息请参见文档。

在 Nginx 配置中(或者伪静态规则)加入以下两条即可

rewrite /.well-known/carddav /remote.php/dav permanent;
rewrite /.well-known/caldav /remote.php/dav permanent;
  1. 一些文件没有通过完整性检查。了解如何解决该问题请查看我们的文档。(无效文件列表… / 重新扫描…)
    Nextcloud 会比对运行目录下所有文件的 hash 值,只要把不是 Nextcloud 的多余文件删除掉即可解决。对于 hash 错误的,例如 .user.ini 文件,从源码包复制一个覆盖即可。

  2. 最近一次执行后台任务运行时间为 21 天前,似乎哪里出了问题。请检查后台任务设置。
    需要后台添加一个定时任务,如果你 后台-基本设置 中选的是 Webcron,那个添加一个每隔5分钟定时访问:nextcloud域名/cron.php 的任务即可;如果你选的是 Cron,则添加一个每隔5分钟执行 Shell 脚本的任务即可,脚本内容如下:

php -f /var/www/nextcloud/cron.phpon.php
  1. 你的数据存储目录可以从互联网上直接访问,.htaccess文件没有生效,请配置你的网页服务器以避免数据存储目录可从外部访问或将数据存储目录转移到网页服务器根目录之外。

在 Nginx 的伪静态规则中加入

location
~ ^/(data|config|.ht|db_structure.xml|README) {
deny all;
}
  1. PHP的安装似乎不正确,无法访问系统环境变量。getenv("PATH")函数测试返回了一个空值。 请参照安装说明文档中的PHP配置说明查阅您服务器的PHP配置信息,特别是在使用php-fpm时。

解决方法:在 /www/server/php/74/etc/php-fpm.conf 文件底部添加如下内容:

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
  1. 开启 Redis 缓存加速
    安装 Redis,默认是没有密码的,在 config/config.php 文件中加入以下内容即可,详细说明参考同目录的 config.sample.php 文件
'redis' =>
array (
   'host' => 'localhost',
   'port' => 6379,
),

Never give up your dreams.