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

下载速度

上传速度:

安卓客户端速度:

相关推荐
bluceli2 小时前
前端性能优化实战指南:让你的网页飞起来
前端·性能优化
fetasty7 小时前
rustfs加picgo图床搭建
docker
冰_河19 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
蝎子莱莱爱打怪1 天前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
小p2 天前
docker学习7:docker 容器的通信方式
docker
小p2 天前
docker学习5:提升Dockerfile水平的5个技巧
docker
小p2 天前
docker学习3:docker是怎么实现的?
docker
叶智辽2 天前
【Three.js内存管理】那些你以为释放了,其实还在占着的资源
性能优化·three.js
BigByte3 天前
我用 6 个 WASM 编码器干掉了 Canvas.toBlob(),图片压缩率直接提升 15%
性能优化·webassembly·图片资源
小p3 天前
docker学习: 2. 构建镜像Dockerfile
docker