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

news2024/11/17 13:42:10

转自我的个人博客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

通常来说,appcachedb在duplicati里都是同时备份的。但你要特别注意app中的configdata文件夹,它们两个包含最重要的核心数据(配置、文件)。你在升级时,甚至可以只保留configdata文件夹;升级完成后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,后来一切如常。

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

维护模式

升级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 community
  • HSTS on docker container? - ℹ️ Support / 📦 Appliances (Docker, Snappy, VM, NCP, AIO) - Nextcloud community
  • The “Strict-Transport-Security” HTTP header is not set to at least “15552000” seconds. For enhanced security, it is recommended to enable HSTS - ℹ️ Support - Nextcloud community
  • Updates between multiple major versions are unsupported - 📑 How to - Nextcloud community

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/148674.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

02、做点准备工作 osg\openscenegraph源代码下载 C++三维视频融合实战系列(时空克隆)

首先&#xff0c;要有一点C编程基础&#xff0c;熟悉VS2013开发环境。 在开始实践之前&#xff0c;先要搭建号VS2013开发环境。 然后&#xff0c;建议电脑安装windows 10 64位操作系统。 接下来需要在以下地址下载开源代码&#xff1a; 1、osg下载 打开openscenegraph主页…

CSS权威指南(七)视觉格式化

文章目录1.盒模型2.元素的显示方式3.行内元素1.盒模型 不管是什么元素,CSS都假定每个元素会生成一个或多个矩形框,我们称之为元素。各元素框的中心是内容区域&#xff0c;四周有可选的内边距、边框、轮廓和外边距。默认情况下&#xff0c;内容区的背景出现在内边距范围内。外边…

5分钟搞懂用户态,内核态

5分钟搞懂用户态,内核态 1. 什么是用户态,内核态 用户态就是提供应用程序运行的空间&#xff0c;为了使应用程序访问到内核管理的资源例如CPU&#xff0c;内存&#xff0c;I/O。内核必须提供一组通用的访问接口&#xff0c;这些接口就叫系统调用。 用户态&#xff0c;内核态…

进制详解:二进制、八进制和十六进制

进制详解&#xff1a;二进制、八进制和十六进制 背景&#xff08;Contexts&#xff09; 我们平时使用的数字都是由 0~9 共十个数字组成的&#xff0c;例如 1、9、10、297、952 等&#xff0c;一个数字最多能表示九&#xff0c;如果要表示十、十一、二十九、一百等&#xff0c;…

机器学习笔记之深度信念网络(一)背景介绍与模型表示

机器学习笔记之深度信念网络——背景介绍与模型表示引言深度信念网络场景构建深度信念网络的联合概率分布引言 从本节开始&#xff0c;将介绍深度信念网络。 深度信念网络 深度信念网络(Deep Belief Network,DBN)是杰弗里辛顿(Geoffrey Hinton)于2006年提出的模型&#xff0…

Day853.WorkerThread模式 -Java 性能调优实战

WorkerThread模式 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于WorkerThread模式的内容。 Thread-Per-Message 模式&#xff0c;对应到现实世界&#xff0c;其实就是委托代办。这种分工模式如果用 Java Thread 实现&#xff0c;频繁地创建、销毁线程非常影响性能…

场景编程集锦 - 吉米的总统梦想

1. 场景描述 吉米是太平洋岛国一个贫苦家庭的孩子&#xff0c;他的梦想就是当总统&#xff0c;引领国家走向富强之路。 开学的第一堂课上&#xff0c;老师用白色的粉笔在黑板上写下了“我的梦想”&#xff0c;同学们都陷入了思考。大卫的梦想是当一名科学家&#xff0c;用奇思妙…

CSS初级教程(文本)【第六天】

文章目录【1】CSS 文本[字体颜色|背景色]【2】CSS 文本对齐【3】CSS 文字装饰【4】CSS 文本转换[大写或小写]【5】CSS 文字间距【6】CSS 文本阴影【7】所有 CSS 文本属性CSS上回学习链接 CSS初级教程 颜色【第一天】 CSS初级教程 背景【第二天】 CSS初级教程 边框【第三天】 CS…

Windows访问控制 -- SID

Windows访问控制是一个比较大的题目&#xff0c;因此计划用一系列的文章简单谈一下这个。本篇是开篇&#xff0c;介绍SID。 Windows访问控制定义 Windows访问控制的含义可以参考MSDN的描述&#xff1a;Access control refers to security features that control who can acce…

Java集合容器介绍

Java 容器分为 Collection 和 Map 两大类&#xff0c;其下又有很多子类&#xff0c;如下所示&#xff1a; Collection接口&#xff1a;单列数据&#xff0c;定义了存取一组对象的方法的集合 1、List&#xff1a;元素有序(指的是存储时&#xff0c;与存放顺序保持一致)、可重复的…

【Docker】(四)使用volume持久化Docker容器中的Redis数据

1.前言 本系列文章记录了从0开始学习Docker的过程&#xff0c;Docker系列历史文章&#xff1a; &#xff08;一&#xff09;基本概念与安装使用 &#xff08;二&#xff09;如何使用Docker发布一个SpringBoot服务 &#xff08;三&#xff09;使用registry远程镜像仓库管理镜像…

[ 数据结构 ] 赫夫曼编码--------数据、文件压缩解压

0 引出 如上图:给定字符串按定长编码处理,最终对应二进制长度为359 思考:如何压缩,将359有效降低? ----回顾:赫夫曼树 1 数据压缩 拿到数据(字符串)的第一反应,虽然知道应该也像上面一样转为字节数组,但就不知道该怎么办了?统计数组中各字节使用的次数,将次数作为权值,字节…

2023.1.8 学习周报

文章目录摘要文献阅读1.题目2.摘要3.介绍4.论文主要贡献5.相关工作5.1 序列感知的推荐系统5.2 神经注意模型6.模型&#xff1a;ATTREC6.1 序列推荐6.2 基于Self-Attention的用户短期兴趣建模6.3 用户长期兴趣建模6.4 模型学习7.实验7.1 数据集7.2 评估指标7.3 模型比较7.4 实验…

SSO单点登录实例详解(前端传Code授权登录)

什么是 SSO&#xff08;单点登录&#xff09; SSO 英文全称 Single Sign On&#xff0c;单点登录。SSO 是在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的应用系统。 单点登录流程 单点登录大致流程如下所示&#xff1a; 单点登录详细流程&#x…

【自学C++】C++变量初始化

C变量初始化 C变量初始化教程 变量 的初始化就是在定义变量的同时&#xff0c;给变量设置一个初始值&#xff0c;在 C 中&#xff0c;如果定义变量没有初始化&#xff0c;那么变量有可能会被赋值也有可能不会赋值。 如果是定义的 全局变量 或者 静态变量&#xff0c;未初始化…

2022年语音合成(TTS)和语音识别(ASR)年度总结

论文统计每月更新一次&#xff0c;主要跟踪语音合成和语音识别的发展状况(很多文章都是在会议后才发出&#xff0c;但不影响统计。统计过程难免存在疏漏&#xff0c;因此统计结果仅供参考。所有文章语音合成领域统计列表请访问http://yqli.tech/page/tts_paper.html&#xff0c…

绝大多数人远远低估了软件开发的难度

给你付钱了&#xff0c;你应该把软件做好&#xff01; 这个话相当于&#xff1a; 给你付钱了&#xff0c;你应该把月亮摘下来&#xff01; 趣讲大白话&#xff1a;臣妾做不到 ********** 软件是特殊商品服务 可以说很难有标准 开发的难度取决于需求多少&#xff0c;技术难度&a…

Java Map集合的介绍和使用

什么是Map类型的集合 介绍 1.用于保存具有映射关系的数据&#xff08;key——value&#xff09;。 2.Map中的key和value可以是任意的类型的数据。 3.Map中的key值不允许重复。 4.Map中的value值可以重复。 5.一般常用string作为value的key。 6.key和value之间存在一一对…

如何进行地图SDK开发(二)——示例文档

概述 前面的文章文章我们写到了SDK的开发以及ak认证的实现&#xff0c;在本文我们继续讲讲地图SDK开发中的示例文档的实现。 技术点 vue3viteelement-plusmonaco-editor 实现后效果 实现 1. 工程初始化 1.1 搭建工程 搭建工程的过程请参照博文(使用vite搭建vue3项目&…

javaEE初阶 — 线程池

文章目录线程池1 什么是线程池2 标准库中的线程池2.1 什么是工厂模式2.2 如何使用标准库中的线程池完成任务2.3 ThreadPoolExecutor 构造方法的解释3 实现一个线程池线程池 1 什么是线程池 随着并发程度的提高&#xff0c;随着对性能要求标准的提高会发现&#xff0c;好像线程…