一、Docker搭建的nextcloud

services:
  nextcloud:
    container_name: nextcloud-app
    image: nextcloud:latest
    restart: unless-stopped
    ports:
      - 9000:80
    environment:
      - MYSQL_HOST=mysql
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=nextcloud
    volumes:
      - ./data:/var/www/html
    depends_on:
      - mysql
      - redis

  cron:
    container_name: nextcloud-cron
    image: nextcloud:latest
    restart: unless-stopped
    entrypoint: /cron.sh
    volumes:
      - ./data:/var/www/html
    depends_on:
      - nextcloud

  redis:
    image: redis:alpine
    container_name: nextcloud-redis
    restart: unless-stopped
    command: ["redis-server", "--appendonly", "yes"]
    volumes:
      - ./redis:/data

  mysql:
    image: mysql:8.0
    container_name: nextcloud-db
    restart: unless-stopped
    environment:
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=nextcloud
      - MYSQL_ROOT_PASSWORD=nextcloud
    volumes:
      - ./db:/var/lib/mysql
      - ./my.cnf:/etc/mysql/my.cnf
  

二、自定义./my.cnf文件

[mysqld]
innodb_buffer_pool_size = 512M
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
max_connections = 200

三、警告修复

docker搭建的nextcloud,提示如下警告:上次后台作业执行运行了11小时前。似乎有些不太劲。检查后台作业设置。 自 2025 年 1 月 6 日 9:26:09 AM 日志中存在 16 个错误服务器未配置维护启动时间。这意味着资源密集型日常后台作业也将在您的主要使用时间执行。我们建议将其设置对于低使用率的时间,这样用户就不会受到这些繁重任务的负载的影响。了解更多详情,请参阅文档 ↗。 可以使用一个或多个 mimetype 迁移。有时会添加新的 mimetypes 以更好地处理某些文件类型。在较大的实例上迁移 mimetype 需要很长时间,因此在升级过程中不会自动完成。使用该命令occ maintenance:repair --include-expensive执行迁移。 检测到一些缺失的可选索引。偶尔会添加新索引(由 Nextcloud 或已安装的应用程序添加)以提高数据库性能。添加索引有时可能需要一段时间并会暂时损害性能,因此在升级期间不会自动完成此操作。添加索引后,对这些表的查询应该会更快。使用命令occ db:add-missing-indices添加它们。缺少引索:“systag_by_objectid”在数据库表“systemtag_object_mapping”中。 了解更多详情,请参阅文档 ↗。当前正在使用数据库处理事务性文件锁定。如果有内存缓存可用,请进行配置以提升性能。了解更多详情,请参阅文档 ↗。
  1. 后台作业未按预期运行
上次后台作业执行运行了11小时前。似乎有些不太劲。检查后台作业设置。

原因:这通常是因为后台任务 ( cron) 未正确配置,或者服务没有运行。
解决方法:确定 Nextcloud 的后台任务模式设置为Cron(推荐)。你可以在管理 → 基本设置 → 后台作业中查看设置,配置cron

在主机中编辑crontab文件:

crontab -u www-data -e

注意 : www-data 是默认的Web服务器用户,如果您使用其他用户运行容器,请替换为实际用户。

添加以下条目:

 */5 * * * * php /var/www/html/cron.php

确保cron 服务正在运行:

systemctl restart cron
systemctl enable cron

如果您使用 Docker,请确保容器内的cron任务配置正确,或使用接下来机上的cron调用容器内的 PHP 脚本。

  1. 服务器没有配置维护开始时间。
    解决方法:编辑 Nextcloud 的config.php文件:
    nano /path/to/nextcloud/config/config.php
    添加或修改以下参数:
    注意:此时间应选择用户活动的少数(例如凌晨)。

    'maintenance_window_start' => '02:00',
  2. MIME 类型需要迁移(比如为特定文件类型改进支持),但由于该操作可能耗时较长,所以不会在升级时自动执行。可以手动运行 occ maintenance:repair --include-expensive 来完成这些迁移。以下是解决步骤:
    确保以正确的用户运行 occ 命令:
  • 在 Docker 容器外部运行

直接在宿主机中运行以下命令(假设容器名为 nextcloud-app):

docker exec -u 33 -it nextcloud-app php occ maintenance:repair --include-expensive
  • 在 Docker 容器内部运行

如果你已经进入容器内部,切换到 www-data 用户:

su -s /bin/bash www-data
php occ maintenance:repair --include-expensive
  • 查看迁移过程日志

运行该命令后,Nextcloud 将开始迁移 MIME 类型,输出日志可能如下:

Repair mime types
- Migrated 100/500 entries
- Migrated 500/500 entries

根据文件数量,迁移可能需要几分钟到几小时。

  • 验证迁移状态

迁移完成后,可以在 Nextcloud 管理界面检查警告是否消失。如果警告仍然存在,可以再次查看是否还有需要修复的其他问题。

  • 维护模式(可选)

如果你运行的 Nextcloud 实例较大,并且担心迁移过程影响性能,可以先启用维护模式:

php occ maintenance:mode --on
php occ maintenance:repair --include-expensive
php occ maintenance:mode --off
  • 总结运行以下命令即可修复 MIME 类型问题:
docker exec -u 33 -it nextcloud-app php occ maintenance:repair --include-expensive

或者,进入容器后切换到正确用户运行命令。
迁移完成后,警告应该会消失。

如果觉得我的文章对你有用,请随意赞赏