快乐404
发布于 2025-03-21 / 109 阅读
0
0

nextcloud常见报错收集

前提:修改完config.php文件以后要看权限和用户是否有修改。如果有变化可以使用。

chown -R www-data:www-data config.php     //如果在宿主机上操作,config.php路径要正确。

备注: 用户名:abc

occ路径:/app/www/public (注意:在容器内部路径)

容器名称:nextcloud-app

容器镜像:linuxserver/nextcloud

1、One or more mimetype migrations are available.

Occasionally new mimetypes are added to better handle certain file types. Migrating the mimetypes take a long time on larger instances so this is not done automatically during upgrades. Use the command occ maintenance:repair --include-expensive to perform the migrations.

解决:

方法一:直接进入容器目录,执行
php occ maintenance:repair --include-expensive

方法二:(未测试)
cd /home/docker/next/      #实际的nextcloud安装路径
chmod 555 /home/docker/next/data/occ    #修改权限
sudo -u abc php /home/docker/next/data/occ maintenance:repair --include-expensive  #修复

*********重要说明*********:在linuxserver/nextcloud 镜像中occ文件位置:/app/www/public

1-1、检测到一些缺失的可选索引。

偶尔会添加新的索引(由 Nextcloud 或已安装的应用程序)以提高数据库性能。添加索引有时需要一段时间,并会暂时损害性能,因此在升级过程中不会自动完成。一旦添加了索引,对这些表的查询应该会更快。使用命令 occ db:add-missing-indices 来添加索引。 缺少引索: “unique_category_per_user”在数据库表“vcategory”中。

问题分析

  • 缺失索引unique_category_per_user

  • 所在表vcategory(用于存储分类数据,如日历、联系人分类)

  • 影响:可能导致分类相关操作变慢,但不影响核心功能

  • 原因:Nextcloud 升级时不会自动添加索引(避免大表锁表风险)

1. 添加缺失索引

# 进入维护模式
sudo -u abc php occ maintenance:mode --on

# 添加所有缺失索引(包括提示的这个)
sudo -u abc php occ db:add-missing-indices

# 关闭维护模式
sudo -u abc php occ maintenance:mode --off

2、服务器没有配置维护时段开始时间。

这意味着资源密集型日常后台作业也将在您的主要使用时间执行。 我们建议将其设置为低使用率的时间,这样用户就不会受到这些繁重任务造成的负载的影响。

解决:在config/config.php中加入:

 'maintenance_window_start' => 1,

3、出现日志错误

后台显示:自从 March 13, 2025, 8:44:55 PM 日志中存在 1 个错误

解决:

删除 日志就行 /home/docker/nextcloud/nextcloud/data/nextcloud.log //根据自己的路径

4、你在安装过程中未设置默认的国际区号。确实国际区号的电话号码时将使用默认的国际区号进行验证......

解决:

在config/config.php中加入:

  'default_language' => 'zh_CN',
  'default_locale' => 'zh',
  'default_phone_region' => 'CN',

5、您尚未配置电子邮件服务器或尚未验证配置。

请在“基本设置”中进行配置。配置完毕后,请点击表单下方的“发送电子邮件”按钮来验证您的设置。

解决:

配置邮箱就行,配置邮箱过程看第9条。

6、cron不执行:

后台显示:上次后台作业执行运行了 1 小时前。 似乎有些不对劲。

我们进到 管理设置-基本设置-后台任务 这里。看到系统默认是使用AJAX的方式。而官方推荐是使用cron。这个需要主机每隔5分钟自动执行一次脚本。

解决:

第一步:宿主机输入以下代码,看后台是否执行了cron

docker exec --user abc nextcloud php /var/www/html/cron.php

第二步:定位 Docker 的真实路径

输入:

which docker

返回结果:

/Volume1/@apps/DockerEngine/dockerd/bin/docker  # 每个人的不一样,实际路径可能与此不同

第三步:宿主机输入,加入计划任务

crontab -e

第四步:替换docker路径。“-i”插入以下代码,“:wq”退出编辑

*/5 * * * * /Volume1/@apps/DockerEngine/dockerd/bin/docker exec --user abc nextcloud php /var/www/html/cron.php

到此应该就可以5分钟显示了。

7、反向代理标头设置不正确。这会允许攻击者对 Nextcloud 假冒其IP地址并引发安全问题。

解决:

在目录下 config/config.php

  'trusted_proxies' => 
  array (
    0 => '192.168.100.102',
  ),

如图:

8、当前正在使用数据库处理事务性文件锁定。若有内存缓存可用,请进行配置以提升性能。

解决:

在config.php文件中加入以下代码,启用Redis

  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => 
  array (
    'host' => 'redis',
    'password' => '',
    'port' => 6379,
  ),

9、电子邮件服务器配置失败,无法发信。

解决:

首先要在个人“信息一栏”-“电子邮件”把自己邮箱填上。

10、nextcloud警告:PHP OPcache 模块配置不正确。

OPcache 缓冲区几乎已满。 为了确保所有脚本都可以保存在缓存中,建议将“opcache.memory_conclusion”应用到您的 PHP 配置,其值高于 "128".

解决:

1. 在宿主机上创建自定义配置文件

在宿主机上创建一个目录,并在其中创建 z-custom-php.ini 文件。因为ini文件加载过层中后面会覆盖前面,/usr/local/etc/php/conf.d文件夹中已经有opcache-recommended.ini,所以要让自己建的文件夹往后排,也可以直接改opcache-recommended.ini文件。

mkdir -p /path/to/custom-php-config
nano /path/to/custom-php-config/z-custom-php.ini

z-custom-php.ini 文件中写入:

#启用OPcache
opcache.enable=1
#确保启用 CLI 模式的 OPcache
opcache.enable_cli=1
#启用文件覆盖功能(获取状态必需)
opcache.enable_file_override=1
#生产环境建议值(根据服务器内存调整)
opcache.memory_consumption=1024
opcache.max_accelerated_files=100000
#临时存储字符串大小,单位为MB
opcache.interned_strings_buffer=16
# 开发环境用1秒,生产环境用3600秒
opcache.revalidate_freq=300
#打开注释缓存
opcache.save_comments=1
解决上传等限制
memory_limit = 512M
upload_max_filesize = 16G
post_max_size = 16G
max_execution_time = 3600
date.timezone = "UTC"

修改 docker-compose.yml 文件,添加挂载配置:

      - /path/to/custom-php-config/custom.ini:/usr/local/etc/php/conf.d/custom.ini

因为我使用的是linuxserver/nextcloud,容器内只有 /etc/php83 目录(没有其他版本目录),说明该镜像使用的是 PHP 8.3 版本。这种情况下,您可以这样挂载:

  - /home/docker/nextcloud/app/php/z-custom-php.ini:/etc/php83/conf.d/z-custom-php.ini

11、PHP 被设置为移除内联块,这将导致多个核心应用无法访问。

这可能由缓存/加速器导致的,例如 Zend OPcache 或 eAccelerator。

解决:需要将/usr/local/etc/php/conf.d/opcache-recommended.ini文件中的opcache.save_comments=0,0改为1。或者是其他自建ini文件中的opcache.save_comments=0,0改为1。

12、您的实例上的某些标头设置不正确 - 未设置 Strict-Transport-Security HTTP 标头(应至少为 15552000 秒)。为了增强安全性,建议启用 HSTS。 了解更多详情,

方法1:在反代中加入以下代码:

add_header Strict-Transport-Security "max-age=15768000; 

如图:

方法2:以linuxserver/nextcloud为例。修改/config/nginx/site-confs/default.conf文件。

添加代码:

add_header Strict-Transport-Security max-age=15552000;
        add_header Strict-Transport-Security 'max-age=15552000' always;
        add_header Referrer-Policy                   "no-referrer"       always;
        add_header X-Content-Type-Options            "nosniff"           always;
        add_header X-Frame-Options                   "SAMEORIGIN"        always;
        add_header X-Permitted-Cross-Domain-Policies "none"              always;
        add_header X-Robots-Tag                      "noindex, nofollow" always;
        add_header X-XSS-Protection                  "1; mode=block"     always;

13、您的网页服务器未正确设置以解析“/.well-known/**”

编辑nginx配置文件,修改well-know相关代码。以linuxserver/nextcloud为例。修改/config/nginx/site-confs/default.conf文件。

找到一下代码:

   location ^~ /.well-known {
        location = /.well-known/carddav { return 301 /remote.php/dav/; }
        location = /.well-known/caldav  { return 301 /remote.php/dav/; }
        location /.well-known/acme-challenge    { try_files $uri $uri/ =404; }
        location /.well-known/pki-validation    { try_files $uri $uri/ =404; }
        return 301 /index.php$request_uri;

修改为以下代码:

    location ^~ /.well-known {
        location = /.well-known/webfinger   { return 301 $scheme://$host:自己的端口号/index.php/.well-known/webfinger; }
        location = /.well-known/nodeinfo    { return 301 $scheme://$host:自己的端口号/index.php/.well-known/nodeinfo; }
        location = /.well-known/carddav { return 301 $scheme://$host:自己的端口号/remote.php/dav/; }
        location = /.well-known/caldav  { return 301 $scheme://$host:自己的端口号/remote.php/dav/; }
        location /.well-known/acme-challenge    { try_files $uri $uri/ =404; }
        location /.well-known/pki-validation    { try_files $uri $uri/ =404; }
        return 301 /index.php$request_uri;
    }

修改完毕后确保default.conf文件的拥有者和权限不变,如果变了就用修改一下。

用以下命令:linuxserver/nextcloud默认为"abc"

chown -R 用户名:用户组 default.conf

14、不被信任的域名

修改config/config.php文件,添加以下代码:

  #受信任的域名
  'trusted_domains' => 
  array (
    0 => '10.0.0.2',
    1 => '10.1.1.20',
    2 => 'nc6.example.com',
    3 => 'hnc6.example.com',
    4 => 'nc4.example.com',
  ),

15、更新APP插件后,提示“请使用命令行更新程序,因为通过浏览器更新在您的config.php中被禁用

第一步:进入容器并更新应用(使用实际容器ID)

docker exec -u abc -w /app/www/public fe82899549 php occ app:update onlyoffice

详细解释:

  1. -u abc:指定在容器内使用 abc 用户执行命令(linuxserver/nextcloud 的标准用户)

  2. -w /app/www/public:设置工作目录到 occ 文件所在位置

  3. f9e82899549:替换为您的实际容器ID

  4. php occ:执行 occ 命令行工具

执行完以后会提示:“Nextcloud or one of the apps require upgrade - only a limited number of commands are available You may use your browser or the occ upgrade command to do the upgrade onlyoffice is up-to-date or no updates could be found

从输出信息来看,有两个关键问题需要解决:

  1. Nextcloud 核心系统需要升级:提示 "Nextcloud or one of the apps require upgrade"

  2. OnlyOffice 应用状态问题:虽然显示 "onlyoffice is up-to-date",但系统整体需要升级

第二步:

# 1. 进入维护模式

docker exec -u abc -w /app/www/public f9e828995419 php occ maintenance:mode --on

# 2. 执行核心系统升级

docker exec -u abc -w /app/www/public f9e828995419 php occ upgrade

# 3. 退出维护模式

docker exec -u abc -w /app/www/public f9e828995419 php occ maintenance:mode --off

这个时候应该可以正常进入nextcloud了。

16、某些文件未通过完整性检查。

点击进入后提示:

"Results ======= - onlyoffice - INVALID_HASH - lib/FileCreator.php Raw output.........."

回忆应该是改了onlyoffice插件中的lib/FileCreator.php文件。卸载onlyoffice,重新安装。但是错误提示一直都在,预期是因为数据库或者缓存问题。官方提示需要重新扫描。

输入以下命令:

docker exec -u abc nextcloud-app php /app/www/public/occ integrity:check-core
docker exec -u abc nextcloud-app php /app/www/public/occ integrity:check-app onlyoffice

备注: 用户名:abc

occ路径:/app/www/public (注意:在容器内部路径)

容器名称:nextcloud-app

容器镜像:linuxserver/nextcloud


评论