「Nextcloud のメンテナンス(1)」の続きです。28.0.7 から 31.0.7 へアップグレードします。まずマイナーバージョンの最終版まで上げて、それからメジャーバージョンを1つ上げて、という繰り返しになります。
最初に、ロリポップの PHP を「モジュール版」から「CGI版」に切り替えます。モジュール版では途中でメモリ不足を起こします(参照:「Nextcloud 突然止まる→アップデート」)。「設定」を押してから、5〜10分程度かかります。
Nextcloud にログインして「管理者設定」→「システム」を開き、「PHP」の項目を見ると、切り替わったかどうかがわかります。モジュール版はメモリ制限が 300 MB で固定、CGI 版は 128 MB がデフォルトです。
Nextcloud をインストールしたディレクトリの .user.ini をロリポップ FTP で開いて、memory_limit=512M を書き加えます。この設定はすぐに反映されます。(「管理者設定」→「システム」→「PHP」で確認できる)
Nextcloud の「管理者設定」→「概要」を開き、「アップデーターを開く」を押します。
「Start Update」でアップデートを開始します。
「Disable maintenance mode and continue with web updater」というボタンが出るので、それを押すと、次の画面になります。「アップデートを開始」を押します。
数秒でアップデートが完了して、自動的に Nextcloud のホームページに移動します。(メジャーバージョンを上げるときは、少し時間がかかります)
以下、最新バージョンになるまでこの作業を繰り返しますが、メモリ制限の設定が1回ごとに元に戻ってしまうため、毎回 .user.ini の再編集が必要です。
無事に、最新版までたどりつきました。
PHP を「モジュール版」に戻します。(こうしないとクライアントからのログインができない。参照:「Nextcloudが突然不調→解決した?」)
さて、「管理者設定」→「概要」を開くと、めっちゃいろいろ警告が出ています。ちょっと何とかしましょう。
"trusted_proxies" の設定が正しくありません。IPアドレスの配列であるべきで、CIDR表記で範囲を指定することもできます。
config/config.php に以下の記述を書き加えます。アドレスは IPv4, IPv6 のアドレスか、CIDR 表記によるアドレス範囲です。URL から IPv4 アドレスを調べるには、aguse.jp が簡単です。
'trusted_proxies' =>
array (
0 => 'XXX.XXX.XXX.XXX',
),
PHPのメモリ制限が推奨値の512 MBを下回っています。アップデータを含む一部の機能やアプリが正しく動作しない場合があります。
PHP OPcacheモジュールが正しく設定されていません。 OPcache が無効になっています。
これらはモジュール版の PHP を使う場合はどうしようもありません。放置します。
サーバーにはメンテナンスウィンドウの開始時間が設定されていません。
config/config.php に 'maintenance_window_start' => 16, を書き加えます。(UTC 16:00 は JST 01:00)
1つ以上のmimetypeマイグレーションが利用できます。時折、特定のファイルタイプをよりよく扱うために新しいmimetypesが追加されます。大規模なインスタンスではmimetypesの移行に時間がかかるため、アップグレード時には自動的には行われません。移行を行うには `occ maintenance:repair --include-expensive` コマンドを使用してください。
こんな風に occ .... コマンドを使う、という指示がときどきあるのですが、ロリポップのライトプランには ssh 接続の機能がありません。どうするんだ?と思って調べたところ、Nextcloud に OCC Web というアプリを入れたら、occ コマンドをウェブベースで実行できるそうです。
YMKD’s Tips
NextcloudのMissing indexエラー
Nextcloudを、さくらのレンタルサーバーで快適に使っていたのだけど、あるときから Missing ind…
(2019年04月27日 12:24)
OCC Web アプリを見つけるには、右上のメニューから「アプリ」を選んで、左のタブで「あなたのアプリ」を選んだあと(重要)、検索アイコンをクリックして "OCC Web" と入力します。
「ダウンロードして有効にする」と、画面上部のツールバーに OCC Web のアイコンが現れます。
このアイコンをクリックすると、黒いコンソール風の画面が出てきます。occ のコマンドを入力すると、実行してくれます。これがあれば ssh 接続がなくても大丈夫ですね。
インスタンスの一部のヘッダーが正しく設定されていません - `Strict-Transport-Security` HTTPヘッダーが設定されていません(少なくとも `15552000` 秒に設定する必要があります)。
これは前にも対処していて、.htaccess に下の1行を書き加えればよいのですが、どこに書けばいいのかがよくわかってませんでした。<IfModule mod_headers.c>...</IfModule> の中に書けばよいようです。
Header set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
いくつかの欠落しているオプションのインデックスを検出しました。データベースのパフォーマンスを向上させるために、(Nextcloudまたはインストールされたアプリケーションによって)新しいインデックスが追加されることがあります。(中略)インデックスを追加するには、`occ db:add-missing-indices` コマンドを使用してください。
OCC Web で実行しました。
まだいくつかメッセージが残っているんですが、重大なものは対応できたかなと思います。しばらくこれで運用を続けます。
ところで、この機会にロリポップのディスク使用状況を確かめたところ、えらいファイル数が多いことに気づきました。20万個もファイル作ってるかな?? ロリポップのライトプランにはファイル数の上限(30万個)があるので、気になるところです。
よく調べてみると、Nextcloud で削除済みのファイルがゴミ箱に残ったままであることがわかりました。そもそもこんな機能があるなんて知らなかったよ。30日以上経過したファイルは削除する設定にしました。config/config.php の trashbin_retention_obligation の値を 'auto,30' に変更します。
だいぶ落ち着きました。それでも17万個もあるんか……Nextcloud のシステムファイルの数が多いんですかね。あまりいじって動かなくなったら困るので、しばらくは触らずにいようと思います。
