再说一点Nextcloud性能相关的事

后台计划任务

在Nextcloud的文档中,要求正确配置好后台任务,后台任务的运行会影响服务器的性能。而对于如何设置该后台任务,在不同的操作系统下其实有不同的设置方法。我使用的是群晖NAS,它的操作系统应该是基于Linux内核和某个发行版进行定制开发的,而且我的Nextcloud是Docker容器安装,参照网络上的经验将后台任务设置以Cron运行,总是不能正常运行,参考官方文档也没有正常运行。

按上一篇文章解决了运行速度的问题后,又再研究了一下这个问题,顺利解决了,这里介绍一下自己的设置方法,供大家探讨。

一、命令格式

首先,由于我的Nextcloud是运行在Docker容器中,所以不能用一般的Linux命令直接在容器中设定,需要通过一些方法在操作系统中去运行容器中的程序。

这样在不同的系统下,如何在系统外执行容器中的命令其实有不同的方法,Nextcloud官方文档给的命令基本方法是:

*/5  *  *  *  * php -f /var/www/nextcloud/cron.php

而在群晖中,php -f 的基本格式根本不能正常执行,是非法命令。
群晖执行容器中命令的基本格式是 docker exec 容器名 容器中命令 (参数)
经过多次尝试,最终可行的命令方法是,将前述官方命令格式中的-f及路径文章,更换成容器名和容器中需要执行的容器中文件。最终命令如下:
docker exec –user www-data nextcloud php cron.php

因为Nextcloud是运行在Apache2 Web服务器上的,所以这里执行该命令需要用www-data用户身份去运行该命令。

二、群晖系统中计划运行该命令的方法

由于群晖是高度自定制的系统,直接在系统文件中设置该计划任务非常困难。其实,群晖提供了非常易用的桌面图形化的计划任务设置方法,十分简单方便。

2.1 打开任务计划,新增“用户定义的脚本”

2.2 编辑脚本的内容

2.2.1 用户帐号要选择 root

2.2.2 计划时间可以根据需要设置到分钟

2.2.3 用户定义的脚本就是前述的命令

Nextcloud中的计划任务有三种设置选项,默认的是AJAX,但官方推荐的是Cron,如果你的系统只是个人使用,选择使用AJAX也不会有太大的影响,这样就不会有错误提示,也不用这么麻烦去设置。

让你的Nextcloud服务器快起来

Nextcloud服务器是一个非常好的应用,内容全面 ,有许多功能强大的插件,运行稳定可靠,有很友好的支持文档,也有社区和网友的经验分享。

我的Nextcloud服务是通过docker运行的,有一个问题一直困扰着我,就是这个服务在运行一段时间后,打开其中内容的速度会变得很慢,我也在网络上查找了相关的问题,许多人都有这个反应,部分使用者难以忍受就选择不再使用这个产品了。我按照官方文档和别人的经验对服务器进行了各种设置,但都没有太好的效果。

终于在这周,服务器已经慢得我也难以忍受了,打开主文件夹竟然要差不多20秒,决心再尝试一下修复这个问题,看来暂时取得了成功。

一、问题的分析

造成服务器运行速度不快的原因有许多,这里仅从软件方面来分析一下,其实Nextcloud对硬件要求不高。

Nextcloud要正常运行,最少需要有以下条件:

  • 数据库
  • PHP环境
  • Apache2服务器

其中,数据库带来了数据查询、写入和日志操作方面的问题。PHP是Web页面生成的后端,对Nextcloud在浏览器中的表现有最直接的影响。而Apache2服务器性能较强,在通用配置下对Nextcloud的影响会比较小。

经过观察,我打开文件夹要不少时间,尝试按别人的方法进行数据库优化,但效果不明显。同时也看到,切换系统的不同应用也要很长时间,比如打开邮件、日历和音乐等,这似乎说明问题还可能是内部的PHP表现不佳造成的,考虑Nextcloud本身对资源要求不高,最主要的原因可能还是在系统缓存的设置上出现问题。

根据以上分析,重新检查验证了官方要求的配置,并对PHP的相关内容进行了调整。

二、主要配置

1、Nextcloud容器启用时,设置好基本的运行参数。

”’Auto configuration via environment variables’

  • MYSQL_DATABASE Name of the database using mysql / mariadb.
  • MYSQL_USER Username for the database using mysql / mariadb.
  • MYSQL_PASSWORD Password for the database user using mysql / mariadb.
  • MYSQL_HOST Hostname of the database server using mysql / mariadb.
  • PHP_MEMORY_LIMIT (default 512M
  • PHP_UPLOAD_LIMIT (default 512M

在启动容器时,通过以上环境变量设置,Nextcloud就可以正常运行,也基本没有性能方面的问题。

2、安装并设置redis缓存

根据使用的经验,redis缓存对优化Nextcloud有非常大的影响,也是官方推荐的内容,直接影响数据的查询性能。

2.1 安装redis,按网络上的教程做就可以,如果不做数据持久化可以不用做多余的设置。

2.2 设置Nextcloud的config.php文件

在docker容器中,该文件位于/var/www/html/config目录下。

3、设置opcache缓存

3.1 在Nextcloud的config.php文件中设置opcache缓存

3.2 在PHP配置中设置opcache缓存

修改 /usr/local/etc/php/php.ini-development文件,有关opcache缓存的主要内容启用

[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=1

; Determines if Zend OPCache is enabled for the CLI version of PHP
opcache.enable_cli=1

; The OPcache shared memory storage size.
opcache.memory_consumption=128

; The amount of memory for interned strings in Mbytes.
opcache.interned_strings_buffer=8

; The maximum number of keys (scripts) in the OPcache hash table.
; Only numbers between 200 and 1000000 are allowed.
opcache.max_accelerated_files=10000

在许多的教程文章中,都只是说到按官方要求,设置好config.php文件,使用内存缓存,而实际上Nextcloud的性能主要是由PHP的表现和mqsql数据库的表现所决定的,这个配置就决定了PHP的性能表现,比如:opcache.enable=1 就是“Determines if Zend OPCache is enabled”,只有启用该配置,才能真正使用opcache缓存。

我就是在该项配置后完全解决了Nextcloud的运行速度问题。

4、优化数据库的查询性能

Nextcloud将大量的状态数据保存在数据库中,所以我们每请求一个页面,Nextcloud都要向数据库存取大量数据,所以数据库的读写性能也会直接影响Nextcloud的表现。关于修改数据查询速度的方法,网络上也有较多讨论。

以我的MariaDb 10数据库为例,该数据库是以Docker容器运行的。

按官方的要求运行容器:

$ docker run --name some-mariadb -v /my/custom:/etc/mysql/conf.d -e MARIADB_ROOT_PASSWORD=my-secret-pw -d mariadb:latest

其中,将容器的/etc/mysql/conf.d的文件夹映射到本地/my/custom文件夹。

在 /my/custom文件夹下建立 my.cnf文件,写入如下内容:

[mysqld]
innodb_flush_log_at_trx_commit=0

对于大系统,这项设置能够大幅改善数据库的性能,但极端情况下有1秒钟的数据损失风险,如果在家庭和人个应用的场景,并且我们数据库的安装本身没有大的问题,这项设置应该不会严重影响Nextcloud的表现。

Nextcloud是一个很好的应用,但其中有很多专业的系统配置问题,建议开发者设立专门的配置文件,减少普通使用者的困难。

在NextCloud中启用MarkDown编辑器

Nexcloud是一个很好的内容管理工具,很多人把它作为个人云盘来使用,特别是结合家用路由器或NAS来搭建,更加方便实用。

同时,通过一定的插件安装和使用,nextcloud也是一个很好用的云文档编辑器,使用网络供应商的云编辑器可能会遇到网络等问题,而自建云编辑服务则响应快速。

nextcloud搭建成云编辑器主要考虑一般通用文件的编写浏览,一类是office文档,另一类则是代码、MarkDown类专用文档。其中office文档可以通过集成onlyoffice等应用来解决,MarkDown文档则可以通过集成MarkDown Editor插件来解决。

1、安装相关插件

要实现在nextcloud比较好的MarkDown类文档编写体验,评价比较高的插件是MarkDown Editor,可以在nextcloud的应用市场中直接安装该插件。但这里存在一个问题,仅安装该插件并不能实现同时文本编辑和实时预览,需要同时安装另外两个组件:Text 和 Plain text editor

看官网介绍:

当这些插件都正确安装并启用后,用右键或文件旁边的三个点,可以选择启用同时编辑和预览。

此时再打开文件后,界面如下:

左面是文本编辑区,右边是实时预览。

2、解决一个错误

新版的插件安装,当使用数学公式时提示错误:

在源码网站,许多人都遇到同样的问题,有一位作者提出了临时的解决方案,效果很好。

3、调整文本编辑和预览字体大小

原始安装的插件在电脑上显示字体很小,到了几乎看不清的状态,nextcloud中MarkDown的字体显示本质上是web浏览器的渲染设定,修改相关参数则可以实现在web端的不同样式。

进入安装目录的files_markdown/css文件夹,修改preview.css文件:

3.1、原字体14px,改为16px

3.2、加入一条设置,修改文本编辑字体大小:

通过加入各种元素,发现该插件都能比较好地渲染解释,值得深入研究学习。