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

下载速度

上传速度:

安卓客户端速度:

相关推荐
jump_jump1 天前
流式 HTML:从 htmx 片段装配到浏览器原生增量渲染
javascript·性能优化·前端工程化
威联通网络存储2 天前
QNAP存储拓扑助力工业无人机制造车间理顺多源数据流转
nas
小小工匠2 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
Alsn862 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
程序员老赵3 天前
服务器没有桌面?Docker 跑个 Chrome,浏览器就能远程用
docker·容器·devops
杨浦老苏3 天前
轻量级Docker仪表板Servedash
运维·docker·监控·群晖·仪表板
正经教主3 天前
【docker基础】 第八周:容器监控与应用更新策略
运维·docker·容器
kiros_wang3 天前
Docker 使用完整指南
运维·docker·容器
大鱼>3 天前
地平线BPU部署实战:YOLOv8在J5/X3上的算法适配与性能优化
算法·yolo·性能优化
正经教主3 天前
【docker基础】第九周:Docker安全与镜像优化
运维·docker·容器