一、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”中。 了解更多详情,请参阅文档 ↗。当前正在使用数据库处理事务性文件锁定。如果有内存缓存可用,请进行配置以提升性能。了解更多详情,请参阅文档 ↗。
- 后台作业未按预期运行
上次后台作业执行运行了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 脚本。
服务器没有配置维护开始时间。
解决方法:编辑 Nextcloud 的config.php文件:nano /path/to/nextcloud/config/config.php
添加或修改以下参数:
注意:此时间应选择用户活动的少数(例如凌晨)。'maintenance_window_start' => '02:00',
- 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
或者,进入容器后切换到正确用户运行命令。
迁移完成后,警告应该会消失。