NextCloud极致性能优化

目录

  • [1. nextcloud性能优化点](#1. nextcloud性能优化点)
    • [1.1 nextcloud镜像选择fpm](#1.1 nextcloud镜像选择fpm)
    • [1.2 nginx优化](#1.2 nginx优化)
    • [1.3 redis优化](#1.3 redis优化)
    • [1.4 php优化 (NextCloud fpm容器)](#1.4 php优化 (NextCloud fpm容器))
    • [1.5 PHP OPcache (NextCloud fpm容器)](#1.5 PHP OPcache (NextCloud fpm容器))
    • [1.6 数据库优化](#1.6 数据库优化)
    • [1.7 定时任务优化](#1.7 定时任务优化)
  • [2. 优化后](#2. 优化后)

由于nextcloud性能较差,需要对nextcloud进行优化以提高加载速度和文件传输速度。 本次是基于nextcloud docker-compose 环境下的优化。 如果是非docker环境,也可参照。

1. nextcloud性能优化点

1.1 nextcloud镜像选择fpm

apache、fpm、alpine的区别:https://blog.csdn.net/gitblog_01087/article/details/151538983

apach版本是性能较差的, 需要更换为fpm版本的镜像。 把镜像名加上-fpm即可,比如 nextcloud:32-fpm

docker环境变量中配置php内存参数限制

bash 复制代码
      - PHP_UPLOAD_LIMIT=32G      # 配置最大上传大小,防止无法上传大文件
      - PHP_MEMORY_LIMIT=2G   # 配置最大上传大小,防止无法上传大文件
      - PHP_OPCACHE_MEMORY_CONSUMPTION=512M

注意:从apache版本迁移到fpm版本后,一个关键点是要把nextcloud的var/www/html目录挂载给nginx容器。

静态资源直接从nginx访问,不经过nextcloud容器。

nextcloud容器的var/www/html目录需要完全由外部挂载,如果原来不是完整挂载,那么需要从容器中拷贝出完整的目录后,再重新挂载。

1.2 nginx优化

使用fpm镜像后, nginx.conf配置见 github docker nginx配置

除了更改server地址外,其他不需要任何更改。 server nextcloud:9000

另外配置了ssl的话要开启http2,性能更好。 http2要求必须使用ssl。

1.3 redis优化

配置redis容器, 并在nextcloud config.php中启用redis缓存。(若有密码需要配置对应的密码)

/var/www/html/config/config.php

bash 复制代码
  'memcache.local' => '\\OC\\Memcache\\APCu',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => 
  array (
    'host' => 'redis',
    'port' => 6379,
  ),

1.4 php优化 (NextCloud fpm容器)

在nextcloud fpm容器中, /usr/local/etc/php-fpm.d/www.cnf文件中配置php fpm线程池。

这是官方文档的推荐配置

bash 复制代码
pm = dynamic
pm.max_children = 120
pm.start_servers = 12
pm.min_spare_servers = 6
pm.max_spare_servers = 18

1.5 PHP OPcache (NextCloud fpm容器)

https://docs.nextcloud.com/server/21/admin_manual/installation/server_tuning.html#enable-php-opcache

默认已配置
/usr/local/etc/php/conf.d/opcache-recommended.ini

bash 复制代码
opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

1.6 数据库优化

nextcloud官方链接参照:https://docs.nextcloud.com/server/21/admin_manual/installation/server_tuning.html#using-mariadb-mysql-instead-of-sqlite

我的nas是16G内存,所以我给的数据库缓存是2G.

bash 复制代码
[mysqld]
innodb_buffer_pool_size=2G
innodb_io_capacity=4000

innodb_read_io_threads = 8
innodb_write_io_threads = 8

优化后登陆mariaDB容器确认:

bash 复制代码
mariadb -u 你的用户名 -p
# 输入你的密码

SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

SHOW VARIABLES LIKE 'innodb_io_capacity';

SHOW VARIABLES LIKE 'innodb_read_io_threads';

SHOW VARIABLES LIKE 'innodb_write_io_threads';

1.7 定时任务优化

如果在宿主机配置

bash 复制代码
# 定时任务
*/5 * * * * docker exec --user www-data mynas-nextcloud-1 php -d memory_limit=-1 -f /var/www/html/cron.php --define apc.enable_cli=1
# 预览图生成任务
*/5 * * * * docker exec --user www-data mynas-nextcloud-1 php /var/www/html/occ preview:pre-generate

或者, nextcloud容器内配置

bash 复制代码
# 注意:容器内cron环境变量可能很少,建议指定完整路径并设置环境
*/5 * * * * www-data /usr/local/bin/php -d memory_limit=-1 -f /var/www/html/cron.php --define apc.enable_cli=1 >> /var/log/nextcloud-cron.log 2>&1
*/5 * * * * www-data /usr/local/bin/php /var/www/html/occ preview:pre-generate >> /var/log/nextcloud-preview.log 2>&1

2. 优化后

具体速度能达到多少与网络和硬盘速度都有关系。

网络连接需要确保是千兆或以上

注意固态盘也不是一定能达到100M/s, 与固态的缓外速度有关。 需保证稳定后的速度是能跑满千兆的。

下载速度

上传速度:

安卓客户端速度:

相关推荐
Allen_LVyingbo2 小时前
面向“病历生成 + CDI/ICD”多智能体系统的选型策略与落地实践(三)
算法·自然语言处理·性能优化·知识图谱·健康医疗·柔性数组
oMcLin2 小时前
如何在CentOS 7.9上配置并调优Docker Compose与Traefik,实现电商平台的自动化路由与高可用负载均衡?
docker·centos·自动化
黎陌MLing12 小时前
docker安装管理TDengine
docker·容器·tdengine
❀͜͡傀儡师13 小时前
docker部署Arcane容器可视化管理平台
运维·docker·容器
老姚---老姚13 小时前
docker常用命令
运维·docker·容器
桦说编程16 小时前
滑动窗口限流器的演进之路:从调度器实现到 Packed CAS
java·后端·性能优化
❀͜͡傀儡师18 小时前
docker一键部署HFish蜜罐
运维·docker·容器
DO_Community18 小时前
DigitalOcean容器注册表推出多注册表支持功能
服务器·数据库·docker·kubernetes
dnpao19 小时前
linux onlyoffice服务向docker容器中添加中文字体
linux·运维·docker