网站首页 文章专栏 nextcloud性能调优
nextcloud性能调优
创建于:2019-07-29 17:58:39 更新于:2024-03-29 15:56:18 羽瀚尘 4430
网站 nextcloud

1. 定时任务

将定时任务从ajax换到cron

输入以下命令在宿主机上增加cron任务:

crontab -u www-data -e

然后在出现的编辑框中复制粘贴下列命令

*/15 * * * * docker exec --user www-data nextcloud_nextcloud_1 php cron.php

列出cron任务:

crontab -u www-data -l

你可以直接在宿主机运行后面的命令,

docker exec --user www-data nextcloud_nextcloud_1 php /var/www/html/cron.php

还可以查看cron执行记录:

tail -f /var/log/cron.log

参考:

官方推荐

给出了几点建议

2. 使用nginx

默认的nextcloud是Apache web, 我们将其换为nginx,通过搭配nextcloud-fpm和nginx两个docker完成。

实测用nginx可以解决页面卡死的问题。

参考: nginx rewrite

3. 开启gzip

查看是否是gzip传输 - 方法一:浏览器调试界面 - 方法二:curl

curl localhost/css/icons/icons-vars.css  -I -H "Accept-Encoding: gzip, deflate"

webdav的PROPFIND方法不会开启gzip

实测开启gzip传输后页面的加载速度很快,打开页面的感觉也打开大公司高度优化过的页面相同。

参考: 如何查看页面是否开启了gzip压缩

Nginx开启Gzip压缩大幅提高页面加载速度

gzip module doesn't handle all certain HTTP verbs/statuses

4. 开启http2

参考: Nginx配置HTTP2.0

5. 使用缓存

打开/www/wwwroot/你的nextcloud目录/config/config.php,在其尾部添加以下代码

'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'redis' => array(
     'host' => 'localhost',
     'port' => 6379,
)

第1行为指定本地缓存为APCu,第2、3行为指定分布式缓存为redis

宝塔面板下nextcloud完美优化配置

启动一个redis container,并加上密码

6. docker-compose中如何动态修改ip?

本优化过程中使用了多个docker,每次启动其ip地址都会变化。所以采用别名的方式来让docker自动确定其ip地址。

我们已经指定了别名,那么在conf文件中不要写ip地址,直接写别名就可以

在docker-compose.yaml中指定php-fpm别名:

nextcloud:
    image: nextcloud:16.0-fpm
    links:
      - mysql

比如在nginx.conf中的一行:

fastcgi_pass  nextcloud:9000;

另外,nextcloud会自动修改config.php中mysql服务器的地址,只要mysql docker container的别名是mysql

7. 其他参考

程叶博客

nginx语法规则

nginx配置入门

nginx location匹配规则

nginx和php-fpm基础环境的安装和配置

docker完整配置nginx+php+mysql

宝塔面板下nextcloud完美优化配置

rewrite 导致循环的解决方案:添加break

最终nginx的解决方案 官方配置