Docker系列 深度使用nextcloud(九) 硬盘挂载

您所在的位置:网站首页 无法挂载存储文件 Docker系列 深度使用nextcloud(九) 硬盘挂载

Docker系列 深度使用nextcloud(九) 硬盘挂载

2023-12-13 00:04| 来源: 网络整理| 查看: 265

转自我的个人博客https://blognas.hwb0307.com,该文的内容更新仅在个人博客可见。欢迎关注!

前言

基于《Docker系列 搭建个人云盘服务nextcloud》,相信无论是在有/无443端口的Linux机子里均可成功安装Nextcloud。值得一提的是,Nextcloud是一个被频繁维护和更新的应用,而且Nextcloud官方也在积极维护着自己的镜像。一般而言,开发者是为修复bug、增加特性、提升安全性、提升性能等目的才会更新应用的;因此,在绝大多数情况下,成功升级Nextcloud基本上都是好处。

对于普通的docker应用,可以用下面的策略进行升级:

通过docker-compose down下线Stack删除应用对应的image通过docker-compose up -d上线并拉取最新镜像(此时应该在docker-compose.yml里指定image版本号或latest)

然而,Nextcloud不太可能通过该方法成功升级。此外,如果你是通过Docker安装Nextcloud,通过内置的升级通道也是不太可能成功的:

Code_TO9exqq7Nz

那么,我们是否应该升级Nextcloud?什么时候是最好的时机?本文结合我的一次跨版本Nextcloud升级和踩坑经验,讨论并总结一下如何升级Docker版Nextcloud。

是否升级?

这里我列举一些最近跨版本升级的代价:

Nextcloud的封面重置为默认状态(下图是我重新换了一张):

Code_NVoYH6l8j5

某些插件不可用,比如onlyoffice等。

所有的数据都没有丢失,包括与联系人信息相关的CalDav应用。此外,个人觉得新版本的Nextcloud性能有所提升——可能是因为Nextcloud(25.x)使用了php8的原因;或者有其它我未曾了解的原因。

总的来说,这次大升级可谓有惊无险,收获满满。如果你Linux基础比较好,并且备份做好,建议在通读本文后一试。小白折腾要慎重 ヾ(≧∇≦*)ゝ

跨版本升级

这次我的升级过程是跨版本升级:23.0.0.10→25.0.2。但是,如果你直接这样做,你会遇到一个不支持跨版本升级的Error,它通常包括但不限于下面的提示:

Exception: Updates between multiple major versions and downgrades are unsupported

因此,Nextcloud升级的过程是循序渐进的,即:先升级至相邻版本,然后逐步更新至latest版本。

那么如何确定中间版本呢?有三个技巧可以参考:

Nextcloud changlog,上面会列举每次升级的细节,包括版本号:

Code_yHGB0gRRuN

Nextcloud Dockerhub,上面往往会有大版本的最后/最新版本号:

Code_Hx1LiSCcX4

版本号法。比如,23可以直升24,24可以直升25;但23不可以直升25。

我升级的版本路线为:23.0.0.10→23.0.12→24.0.8→25.0.2,基本上是按上面的原则来确定版本号的,大家可参考。

关键数据

我在nextcloud的docker-compose.yml所在目录里运行:

tree -ha -L 2

可以看到下列文件结构:

Code_SKRX4zc2i3

通常来说,app、cache、db在duplicati里都是同时备份的。但你要特别注意app中的config和data文件夹,它们两个包含最重要的核心数据(配置、文件)。你在升级时,甚至可以只保留config和data文件夹;升级完成后Nextcloud的文件和配置也不会丢失。

一般步骤 做好备份,比如基于duplicati。docker-compose down下线应用。修改docker-compose.yml,将nextcloud镜像的版本号改成待升级的版本号:

Code_AR0dE5LWPB

docker-compose up -d,静待镜像拉取完成。通过docker logs -f nextcloud-app-1之类的命令监测升级log。为节省磁盘空间,可以删除Nextcloud旧镜像。整个stack还包括redis和mariadb,它们的镜像维持原样即可。 升级报错

这里展示了一个比较完整的升级log:

MobaXterm1_CHS_Eia4godxjg

一般地,这里的速度是很慢的:

Initializing nextcloud ... Upgrading nextcloud from ...

并且,每次更新的log都可能不太一样的。不一定会有successfull字样,但一般不会有error字样。

如果我们看到AH00094: Command line: 'apache2 -D FOREGROUND'之类的日志,表明Nextcloud已经准备就绪了,你可以访问一下网站看看有什么提示。一般地,它还会让你确认一下更新,你就确认即可。

中途可能有其它错误,但这些错误一般不太可能涉及数据库;这种情况下基本没关系,可以重启页面试试。这里展示一个在网页升级的日志(不记得是哪一次升级了):

正在准备更新 设置日志级别为 调试 启用维护模式 修复日志 步骤: Repair MySQL collation 修复 信息: All tables already have the correct collation -> nothing to do 修复日志 步骤: Repair SQLite autoincrement 修复日志 步骤: Copy data from accounts table when migrating from ownCloud 修复日志 步骤: Drop account terms table when migrating from ownCloud 正在更新数据库结构 数据库已更新 修复日志 步骤: Repair MySQL collation 修复 信息: All tables already have the correct collation -> nothing to do 修复日志 步骤: Repair mime types 修复日志 步骤: Clean tags and favorites 修复 信息: 0 tags of deleted users have been removed. 修复 信息: 0 tags for delete files have been removed. 修复 信息: 0 tag entries for deleted tags have been removed. 修复 信息: 0 tags with no entries have been removed. 修复日志 步骤: Repair invalid shares 修复日志 步骤: Move .step file of updater to backup location 修复日志 步骤: Add move avatar background job 修复 信息: Repair step already executed 修复日志 步骤: Add preview cleanup background jobs 修复日志 步骤: Migrate oauth2_clients table to nextcloud schema 修复 信息: Update the oauth2_access_tokens table schema. 修复 信息: Update the oauth2_clients table schema. 修复日志 步骤: Fix potential broken mount points 修复 信息: No mounts updated 修复日志 步骤: Repair language codes 修复日志 步骤: Install new core bundle components 修复日志 步骤: Add log rotate job 修复日志 步骤: Clear frontend caches 修复 信息: Image cache cleared 修复 信息: SCSS cache cleared 修复 信息: JS cache cleared 修复日志 步骤: Clear every generated avatar on major updates 修复日志 步骤: Add preview background cleanup job 修复日志 步骤: Queue a one-time job to cleanup old backups of the updater 修复日志 步骤: Cleanup invalid photocache files for carddav 修复日志 步骤: Add background job to cleanup login flow v2 tokens 修复日志 步骤: Remove potentially over exposing share links 修复 信息: No need to remove link shares. 修复日志 步骤: Clear access cache of projects 修复日志 步骤: Reset generated avatar flag 修复日志 步骤: Keep legacy encryption enabled 修复日志 步骤: Check encryption key format 修复日志 步骤: Remove old dashboard app config data 修复日志 步骤: Add job to cleanup the bruteforce entries 修复日志 步骤: Queue a one-time job to check for user uploaded certificates 修复日志 步骤: Repair DAV shares 修复日志 步骤: Add background job to set the lookup server share state for users 开始代码完整性检查 发生错误。

必要情况下,可以docker-compose restart重启该stack,甚至是重启整个VPS/NAS。我当时升级为25x版本时,可能NAS配置太差,一直卡着不动,我直接强行关机再启动NAS,后来一切如常。

整个过程可能会不太顺利。不要怕,只要data和config的数据不丢失,就可以苟住!

维护模式

升级Nextcloud的过程中,维护模式是很常见的。它通常有类似提示:

Nextcloud is in maintenance mode

有时候维护模式并不一定代表Nextcloud完全不能运行。你可以尝试关闭维护模式,自己调试一下网站,看是否可以正常登陆。你可以这样做:

方法1:进入Nextcloud的根目录,打开/config/config.php,将maintenance的值改为false后重启stack:

Code_MUXaA3U9Ru

方法2:通过容器php关闭维护模式: # 进入Nextcloud内部 docker exec -it -u www-data nextcloud-app-1 /bin/bash # 关闭维护模式 php occ maintenance:mode --off

首选第1种方法,如果不行再试第2种。一般都可以成功关闭。

Nextcloud 25概览

更多Nextcloud Hub 3升级特性可见:Nextcloud Mail improvements

我2022-12-18升级的是的最新版Nextcloud镜像。大致如下:

主页

Code_NVoYH6l8j5

文件

Code_wmXJM1S04W

图片:

Code_1sksvQHFpJ

PicGo:我用PicGo上传了一下图片,功能不受影响。Nextcloud图床的相关教程见《Docker系列 深度使用nextcloud(三)Typora图床》。

Code_CJK3FLcMWN

管理后台:

NVIDIA_Share_8LZr1kcfQi

UI重新设置了一下,感觉和23版本差别较小。

小结

如果你只是更新一个相邻的版本,其实也挺快的。如果你一直不更新Nextcloud,短期内问题也不大;但是从长期看,由于跨版本升级的不兼容性,更新越少越难;不更新就无法享受一些新特性(但对大多数人来说可能也没什么损失)。我开始时是在NAS里更新一个比较旧的Nextcloud版本,踩坑较多;但在VPS里较新版本里更新就较顺利。

对Nextcloud的家庭用户,我建议每半年或每年找一个空闲的时间更新一下Nextcloud。只要做好备份,基本上是稳的,绝大多数重要配置均不会丢失。建议技术较好、内心较强的小伙伴去折腾一下!

另外,根目录.htaccess的配置内容可能在更新时会丢失,做好备份即可。

有什么问题,请评论区留言喔!

扩展阅读 https://nextcloud.com/changelog:如果跨版本升级,需要根据这个nextcloud changelog一步步升级。https://hub.docker.com/_/nextcloud:官方Docker镜像Update to 13 - “Nextcloud is in maintenance mode” - ℹ️ Support - Nextcloud communityHSTS on docker container? - ℹ️ Support / 📦 Appliances (Docker, Snappy, VM, NCP, AIO) - Nextcloud communityThe “Strict-Transport-Security” HTTP header is not set to at least “15552000” seconds. For enhanced security, it is recommended to enable HSTS - ℹ️ Support - Nextcloud communityUpdates between multiple major versions are unsupported - 📑 How to - Nextcloud community


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3