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, 与固态的缓外速度有关。 需保证稳定后的速度是能跑满千兆的。

下载速度

上传速度:

安卓客户端速度:

相关推荐
qq_3643717219 小时前
基于 Docker 容器化环境配置
运维·docker·容器
GentleDevin20 小时前
Docker 运维常用命令大全
docker·容器·运维命令
运维全栈笔记20 小时前
基于Docker的MinIO单机部署与功能测试指南
运维·docker·容器
心机之蛙qee21 小时前
docker的安装(RHEL9)
运维·docker·容器
炸炸鱼.21 小时前
Docker 高级管理 —— 容器通信技术与数据持久化
docker
乐hh1 天前
DM8配置SSL
数据库·docker·ssl
极客先躯1 天前
高级java每日一道面试题-2025年12月05日-实战篇[Dockerj]-Docker 安装后的默认存储路径是什么?如何修改?
java·docker·默认存储路径在不同系统上的区别·linux overlay2·修改存储路径的理论方法·修改流程中的关键理论点
凤舞飘伶1 天前
windows安装docker-desk
windows·docker·容器
运维全栈笔记1 天前
Docker一键部署Immich:自建私有云相册,照片视频备份无忧
linux·服务器·网络·docker·容器