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

安卓客户端速度:
