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

下载速度

上传速度:

安卓客户端速度:

相关推荐
cpolar技术支持6 小时前
Docker 容器启动失败怎么查?端口、日志、权限与网络排障完整教程
linux·docker·容器·cpolar·网络排障
Web3&Basketball8 小时前
LLM 峰谷定价怎么吃满:一个能对账的错峰调度器
python·性能优化·大模型·任务调度·成本优化·deepseek·推理优化
一技安身8 小时前
【大模型】Win11 部署 DeepSeek+ RAGFlow0.27.2 (Ollama方案,断网可用)
docker·ai·语言模型
yunwei378 小时前
eBPF 教程:追踪 CUDA GPU 操作
linux·后端·性能优化
新时代牛马9 小时前
docker run 起不来?从dockerd、containerd 到runc 一条线讲透
运维·docker·容器
JavaPub-rodert9 小时前
Docker 安装 MySQL 完整教程:从零部署数据库,到生产环境持久化配置
数据库·mysql·docker
努力努力再努力wz10 小时前
【Docker 入门系列】:从 Namespace、CGroup 到 LXC:理解容器运行时、rootfs 与 LXC 实战
运维·docker·容器
JavaPub-rodert11 小时前
Docker 多阶段构建:为什么生产环境镜像可以小 90%
运维·docker·容器
狼爷12 小时前
磁盘IO打满怎么办?我用5个真实案例,总结了这套可复用的排查方法论
后端·性能优化
PC2005-cloud13 小时前
Qdrant 连接失败排查:localhost 解析到 __1,而 Docker 只绑了 IPv4
运维·docker·容器