NextCloudのバージョンを15→21にアップグレードした件

自前のクラスタで管理しているNextCloudのバージョンが15のままでだいぶ古いままだった。セキュリティの懸念とか、いろいろ新機能があるようなのでアップグレードしてみた。

理由は後述するが結構苦戦した、

  • バージョンのアップグレード
  • メンテナンスモードの解除

という手順を踏めばそれ以外の作業は全く必要なかった

バージョンのアップグレード

実はNextCloudのアップグレードはメジャーバージョン1つずつしかアップグレードできない。なので、15→21にするには6回アップグレードする必要があった。

It is only possible to upgrade one major version at a time. For example, if you want to upgrade from version 14 to 16, you will have to upgrade from version 14 to 15, then from 15 to 16.

https://hub.docker.com/_/nextcloud

横着していっきに15→21にアップグレードするとエラーが出た

Can't start Nextcloud because the version of the data (21.0.0.18) is higher than the docker image version (15.0.14.1) and downgrading is not supported. Are you sure you have pulled the newest image version?

以下の方法を6回繰り返した

バージョンを1つあげる方法

# statefulsetのコンテナイメージの更新(16→17にあげる場合)
# RollingUpdateなstatefulsetなのでしばらくすれば勝手に反映される
$ k patch statefulset nextcloud-stateful --type='json' -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value":"nextcloud:17"}]'

# デプロイされたらコンテナにアクセス
$ k exec -it nextcloud-stateful-0 /bin/bash

# バージョン確認
root@nextcloud-stateful-0:/var/www/html# cat version.php 
<?php 
$OC_Version = array(17,0,10,1);
$OC_VersionString = '17.0.10';
$OC_Edition = '';
$OC_Channel = 'stable';
$OC_VersionCanBeUpgradedFrom = array (
  'nextcloud' => 
  array (
    '16.0' => true,
    '17.0' => true,
  ),
  'owncloud' => 
  array (
  ),
);
$OC_Build = '2020-10-08T07:10:52+00:00 6235275b7a2328563e1038327b078caaca7d903e';
$vendor = 'nextcloud';

# www-dataにユーザー変更
# rootではアップグレードできない
# ref: https://github.com/kubernetes/kubernetes/issues/30656#issuecomment-738687664
root@nextcloud-stateful-0:/var/www/html# su -s /bin/bash www-data

# 17にアップグレード
www-data@nextcloud-stateful-0:~/html$ php occ upgrade
Nextcloud or one of the apps require upgrade - only a limited number of commands are available
You may use your browser or the occ upgrade command to do the upgrade
Set log level to debug
Updating database schema
Updated database
Disabled incompatible app: deck
Disabled incompatible app: files_texteditor
Updating <accessibility> ...
Updated <accessibility> to 1.3.0
# ...
Checked for update of app "files_texteditor" in appstore 
Starting code integrity check...
Finished code integrity check
Update successful
Maintenance mode is kept active
Reset log level
# バージョンが上がったか確認
www-data@nextcloud-stateful-0:~/html$ php occ -V
Nextcloud is in maintenance mode - no apps have been loaded

Nextcloud 17.0.10

メンテナンスモードの解除

アップグレード時に勝手にメンテナンスモードになっているらしい。

$ k exec -it nextcloud-stateful-0 /bin/bash
# コンテナ内
root@nextcloud-stateful-0:/var/www/html# su -s /bin/bash www-data
www-data@nextcloud-stateful-0:~/html$ php occ maintenance:mode --off
Maintenance mode disabled

アクセス

できました🎉👏🎉👏🎉👏

/img/2021-03-14_01.png

ダッシュボードができた!?

/img/2021-03-14_02.png

slackみたいに自アカウントのステータスを設定できる

/img/2021-03-14_03.png

天気も設定できるらしい

所感

  • メジャーバージョンを6つあげたが、特に上記以外で必要となる作業が全くなかったのはとても楽
  • statefulsetの挙動忘れてて、kubectlでpatchしたもののコンテナに即時で反映されるのかどうか忘れてた
    • これみてどんな感じだったか思い出した
  • NextCloudがどんどん進化していって嬉しい
    • まだダッシュボードにおくWidgetも10~20種類ほどしかない
    • 機能は十分揃っている気がするがコミュニティが充実していけば嬉しいなぁと思った

See also