宝塔面板部署NextCloud15.0.5逐一解决后台安全及设置警告
nextcloud可以看做是一款基于owncloud的私有云解决方案。如果只需要简单的使用nextcloud,最基本的部署环境只需要nginx(apache)+php即可。
记录一下在宝塔面板环境下搭建nextcloud的过程中出现的一些问题及解决。
=======更新========
一、部署
部署的过程不再详述,总结一下就是:
1.宝塔面板安装nginx+php7.2(注意nextcloud从13.0版本开始才支持php 7.2)
2.下载压缩包并上传
3.服务端解压并访问
4.填写安装信息(用户名、密码),如果只是简单使用,可直接使用SQLite作为数据库,不需要MySQL
具体安装教程请参照以下链接:
宝塔面板安装 Nextcloud 搭建私有云/网盘及挂载阿里云OSS对象存储(一)
二、发现问题
经过部署,nextcloud已经可以在web端或者客户端使用了,体验上来说,是没有任何影响的。但是从web端进入管理页面,会有如下错误

作为一个强迫症,不解决这些问题怎么行呢
三、逐一解决
1.PHP 的设置似乎有问题, 无法获取系统环境变量. 使用 getenv(\”PATH\”) 测试时仅返回空结果.
从宝塔文件管理,打开/www/server/php/73/etc/php-fpm.conf,在其尾部添加一行
env[PATH] = /usr/local/bin:/usr/bin:/bin:/usr/local/php/bin

2.PHP 模块 ‘fileinfo’ 缺失. 我们强烈建议启用此模块以便在 MIME 类型检测时获得最准确的结果
这个也很简单,因为php环境默认是没有安装fileinfo这个扩展模块的,所以手动去宝塔PHP管理选项中安装fileinfo扩展即可解决该问题

3. HTTP的请求头 “Strict-Transport-Security” 未设置为至少 “15552000” 秒。
解决方法还是修改nextcloud绑定的网站配置文件,添加一行header信息
add_header Strict-Transport-Security "max-age=63072000;";

4.内存缓存未配置,为了提升使用体验,请尽量配置内存缓存
这个问题是指php的缓存模块没有安装,nextcloud支持APCu、Memcached、Redis等模块,选择其中一个安装。
首先,我们来安装服务,进入管理面板–软件管理–运行环境–redis-点击安装,等待完成

完成之后开始第二步,配置设置。这一步根据自己需要进行配置。注意安全问题哦
我这里就改一下设置密码验证,修改端口等

然后安装php扩展

在宝塔中放行自己设置的端口

进入nextcloud网站根目录。找到config文件

在
);
前添加以下内容
'dbuser' => 'cloud',
'dbpassword' => 's3wxbtbptJWGRRmM',
'installed' => true,
'memcache.local' => '\OC\Memcache\Redis',
'redis' => array(
'host' => 'localhost',
'port' => redis设置的端口,
'password' => 'redis设置的密码',
),
刷新页面 ,配置成功
5. 您的数据目录和文件可以从互联网直接访问..htaccess文件不起作用。
解决方法是修改nextcloud绑定的网站配置文件,添加nextcloud常用目录禁止访问即可
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/
{
deny all;
}

照上图操作,添加完毕,保存后即可生效。
6.您的网页服务器未正确设置以解析“/.well-known/caldav”及您的网页服务器未正确设置以解析“/.well-known/carddav”
这两个警告可以一起解决,出现该提示一般是因为这两个路径的伪静态设置有问题,导致无法正常访问。
解决方法就是添加两行重定向配置
rewrite /.well-known/carddav /remote.php/dav permanent;
rewrite /.well-known/caldav /remote.php/dav permanent;

7.HTTP的请求头 “Referrer-Policy” 未设置为 “no-referrer”, “no-referrer-when-downgrade”, “strict-origin” or “strict-origin-when-cross-origin”. 这会导致信息泄露
大意是,需要设置一个Referrer-Policy请求头来提高安全性。Nginx配置文件里添加:
add_header Referrer-Policy "no-referrer";

8.一些文件没有通过完整性检查。
要解决这个问题很简单,打开无效文件列表,里面会把NextCloud目录下多余的文件全部罗列出来,照着这个列表,删除相关文件,即可解决。(也就是说,NextCloud文件夹里面不要放一些乱七八糟的文件)。

删除文件后,需要点击重新扫描,再次检查,就不会有警告提示了。

9.未找到 PHP 的 “fileinfo” 模块。强烈推荐启用该模块,从而获得更好的 MIME 类型探测结果。
10.PHP 的 OPcache 模块未载入。推荐开启获得更好的性能。
11.该实例缺失了一些推荐的PHP模块。为提高性能和兼容性,我们强烈建议安装它们。imagick
以上三个警告是未检测到PHP相关模块的警告,可以通过安装PHP模块,一起解决。
根据提示,需要安装的模块分别为fileinfo、opcache、imagemagick。

12.数据库中的一些列由于进行长整型转换而缺失。由于在较大的数据表重改变列类型会耗费一些时间,因此程序没有自动对其更改。您可以通过命令行手动执行 “occ db:convert-filecache-bigint” 命令以应用挂起的更改
此警告是说,数据库的一些索引丢失了,需要使用OCC修复一下。OCC是owncloud的命令行,而nextcloud又是基于owncloud开发的,所以需要用到OCC来修复丢失的数据库索引。
修复命令为:
cd /www/wwwroot/cloud.miensi.com
sudo -u www php occ db:convert-filecache-bigint

执行后,根据提示,按y,回车
执行正常后,没有任何提示,返回提示符,表示执行完毕。
13.最近一次执行后台任务运行时间为 2 小时前,似乎哪里出了问题。 请检查后台任务设置
后台开启路径:
设置->基本设置-> 后台任务 点选 第三个选项 Cron
使用系统 cron 服务每 15 分钟执行一次 cron.php 文件.cron.php 需要被系统用户 “www” 执行.

服务器crontab定时执行任务
用ssh连接到服务器在root用户下执行 crontab -u www -e
按I进入 编辑状态 输入要执行的计划任务
*/15 * * * * php -f /www/wwwroot/cloud.miensi.com/cron.php
按esc输入 :wq! 保存退出,重新刷新网页即可正常
至此,所有安全及设置警告全都解决,再次执行检查后,提示 所有检查已通过
