Nextcloud优化和问题解决合集(二)

由 夏日冰菓 发布

再次记录一下坑爹的Nextcloud优化过程

nextcloud

接着上一篇NextCloud安装之后,使用效果还是达不到理想状态,访问速度过慢,后台系统界面显示各种大大小小的问题,本篇记录着Nextcloud出现的问题和解决方式。

优化Nextcloud 使其达到完整状态

Nextcloud添加Redis缓存

给Nextcloud添加Redis缓存,能提升不少页面打开速度。

同样基于Docker部署Redis,简单方便,端口默认是容器内6379映射到容器外6379

docker run --name redis -p 6379 -d redis

查看docker容器IP

docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

IP

可以看到redis容器的IP是172.17.0.6,开始编辑Nextcloud配置文件

  1. 编辑Nextcloud配置文件

配置文件在一般在/nextcloud/config/config.php
'memcache.local' => '\OC\Memcache\APCu',下面新增以下行

'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
     'host' => '172.17.0.6',
     'port' => 6379,
      ),

图例:

REDIS1

修改结束后重启nextcloud容器即可

  1. 查看是否成功被缓存

在命令行下进入容器,并执行以下语句

docker exec -it redis bash

# 进入redis-cli
> redis-cli
> keys *

如果有显示一些键值表示成功缓存
KEYS

定时执行后台任务

默认情况下,没次打开Nextcloud页面之后会加载一个任务,根据官方建议使用系统定时来优化性能

登录后台 - 基本设置 - 勾选Cron

在linux命令行下输入 crontab -e 进入定时任务管理,输入以下命令保存退出
注意:如果你是使用docker容器安装nextcloud的情况下可以使用以下命令,注意修改容器名

*/5 * * * * docker exec --user www-data nextcloud php cron.php

优化图片或视频缩略图加载缓慢或者无法显示的问题

默认情况下,动图或者视频格式的文件无法生成缩略图,或者生成缓慢,需要安装 FFmpeg 来解决问题

如果是使用容器安装nextcloud可以使用以下命令来进入容器,注意修改容器名

docker exec -it nextcloud /bin/sh

# 执行安装 FFmpeg
apk add ffmpeg
# 或
apt install ffmpeg

安装成功后需要修改nextcloud config.php文件配置,添加以下行数

  'enable_previews' => true,
  'enabledPreviewProviders' =>
  array (
    0 => 'OC\\Preview\\PNG',
    1 => 'OC\\Preview\\JPEG',
    2 => 'OC\\Preview\\GIF',
    3 => 'OC\\Preview\\HEIC',
    4 => 'OC\\Preview\\BMP',
    5 => 'OC\\Preview\\XBitmap',
    6 => 'OC\\Preview\\MP3',
    7 => 'OC\\Preview\\TXT',
    8 => 'OC\\Preview\\MarkDown',
    9 => 'OC\\Preview\\Movie',
   10 => 'OC\\Preview\\MKV',
   11 => 'OC\\Preview\\MP4',
   12 => 'OC\\Preview\\AVI',
   13 => 'OC\\Preview\\Photoshop',
   14 => 'OC\\Preview\\TIFF',
   15 => 'OC\\Preview\\SVG',
  ),

重启Nextcloud服务解决缩略图问题

优化 php-fpm 性能,提高页面加载效率

优化www.conf配置文件,增加更多的进程来处理页面数据。

如果是使用容器安装nextcloud可以使用以下命令来进入容器,注意修改容器名

docker exec -it nextcloud /bin/sh
# 查找 www.conf 位置,一般在/usr/local/etc/php-fpm.d/www.conf
find / -name www.conf

需要修改和添加的字段有:

# pm.max_children = 5
pm.max_children = 128

# pm.start_servers = 2
pm.start_servers = 14

#pm.min_spare_servers = 1
pm.min_spare_servers = 4

# pm.max_spare_servers = 3
pm.max_spare_servers = 24

# 添加以下字段
request_terminate_timeout = 300

数值越大,进程越多,平均每个进程消耗 32M-96M 内存,按需设置

设置成功后重启 nextcloud 服务即可。

解除块大小限制,提升传输速度

在有良好的传输网络下,比如局域网,应当解除块大小限制来提升网络传输效率,默认是102400(10M),设置为0即可关闭块大小限制

如果是使用容器安装nextcloud可以使用以下命令来进入容器,注意修改容器名

docker exec --user www-data nextcloud php occ config:app:set files max_chunk_size --value 0

如果使用本机环境运行的可以使用这条语句

sudo -u www-data php occ config:app:set files max_chunk_size --value 0

504 Gateway Time-out

安装 Nextcloud 显示504超时问题

在 nginx 配置文件钟添加以下语句即可解决

fastcgi_read_timeout 86400;

重启nginx或者重新加载配置文件

nginx -s reload

显示 ”php-imagick模块” 问题

此实例中的 php-imagick 模块不支持 SVG。为了获得更好的兼容性,建议安装它。

如果是使用容器安装nextcloud可以使用以下命令来进入容器,注意修改容器名

docker exec -it nextcloud /bin/sh

# 执行安装 imagemagick
apk add --no-cache imagemagick
# 或
apt install libmagickcore-6.q16-6-extra

安装成功后重启 nextcloud 服务

显示 “您的安装没有设置默认的电话区域” 问题

您的安装没有设置默认的电话区域。这对验证配置设定中没有国家代码的电话号码而言是必需的。要允许没有国家代码的电话号码,请添加带区域相应的 ISO 3166-1 code ↗ 的“默认_电话_区域”到你的配置文件中。

在nextcloud config.php文件配置,添加以下行数

'default_phone_region' => 'CN',

显示 “Strict-Transport-Security" HTTP 头未设为至少 "15552000" 秒” 问题

Strict-Transport-Security" HTTP 头未设为至少 "15552000" 秒。为了提高安全性,建议启用 HSTS,参考步骤见 安全小贴士 ↗

在 nginx 配置文件钟添加以下语句即可解决

add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;

重启nginx或者重新加载配置文件

nginx -s reload

5 条评论

  1. 123
    123 · 2022-12-08 09:46

    太棒了

  2. ash
    ash · 2022-12-09 09:28

    非常详细,感谢分享🙏

  3. lllong33
    lllong33 · 2023-01-10 13:59

    大佬是否碰到过如下问题:
    IS-02 修改nextcloud任何文件, 就会重新更新元数据, 这个过程很慢; 比如我有2000多个文件, 每次都会同步一次;

  4. 真水无香
    真水无香 · 2023-02-28 22:15

    博主好,不知道为什么,redis怎么也没有缓存,试了很多方法,结果都是 (empty array)
    请博主指教

    1. kevin
      kevin · 2023-05-10 10:34

      redis那里大佬文中用的locking,配置里是distributed

发表评论