【私有服务】Nextcloud 大版本更新流水账

456 阅读3分钟

1. 背景

多年前容器部署了个 Nextcloud 作为个人网盘使用,因为也没有很重度使用,只是作为基础的网盘、跨端数据同步等使用,所以也很久没有去动(也是有点懒,升级没有不遇到问题的,遇到问题就是个把小时,没硬需求懒得动)

版本已经落后了很多(当时部署的大版本为 25,现在已经28了),突然临时起意,想起来更新一把

仅做记录,操作有点莽,勿参考(我自己另外有定时任务定期存备份)

2. 升级

2.0. 关于部署的 Nextcloud

  • 使用 docker-compose 进行简单的编排管理(部署了挺多私有服务,拆分管理了下)
  • 引用的镜像是 nextcloud:fpm-alpine(相当于当时最新版本)

2.1. 一把梭哈

开始先是直接莽了一发

  • 直接拉取最新 image 进行覆盖:docker-compose pull
  • 强制重构 container,使用最新 image:docker-compose up -d --build --force-recreate
  • 不出所料,顺利挂了

image.png

2.2. 小步慢跑

搭建太久了,忘了 Nextcloud 是不能跨多个大版本进行升级的(包括实例部署的 web 端手动升级也是,官方应该是为了兼容性安全)

没办法,只能一步步改,一步步升级了

  • 修改 docker-compose.yml 引用的 image,指定大版本号为上升一级,一步步升级
    • nextcloud:26-fpm-alpine
    • nextcloud:27-fpm-alpine
    • nextcloud:28-fpm-alpine
  • 每改一个版本重复上面的重构流程
    • docker-compose pull
    • docker-compose up -d --build --force-recreate

2.3. 处理问题

每升级一个版本,web 管理后台看下 概览,里面有一些安全性提示需要修复下。一般后面会附有文档链接,里面有修复方式

大体上没遇到什么大坑

3. 问题修复

3.1. db index 缺失

Missing index “fs_mtime” in the “oc_filecache” table. Missing index “parent_index” in the “oc_share” table. Missing index “share_with_index” in the “oc_share” table.

进入 app 容器执行命令补齐索引 ./occ db:add-missing-indices

3.2. header 不对

HTTP 请求头 “X-Robots-Tag” 没有配置为 “none”。这是一个潜在的安全或隐私风险,我们建议您调整这项设置。

容器部署的话,是有个 nginx 做反向代理的,应该在 nginx 配置里处理

所以直接上官方 git 拉了最新的 最新 nginx 配置样例,覆盖之

3.3. no maintenance window start time

Server has no maintenance window start time configured. This means resource intensive daily background jobs will also be executed during your main usage time. We recommend to set it to a time of low usage, so users are less impacted by the load caused from these heavy tasks

参考:Background jobs — Nextcloud latest Administration Manual latest documentation

修改配置文件 config.php 'maintenance_window_start' => 1, 或者 进入容器后添加配置 ./occ config:system:set maintenance_window_start --type=integer --value=1

3.4. 访问 web 处于维护状态 & 手动更新

更新异常终止或者插件更新超时等异常时会进入维护状态,无法访问

  • 手动修改 config.phpmaintenancefalse
  • 进入 app 的容器,手动触发更新:./occ upgrade

10. Tags

docker,compose,build,pull,image,nextcloud,web,app,升级,occ