有馬総一郎のブログ

(彼氏の事情)

2023年07月16日 08:45:16 JST - 4 minute read - Linux

Nextcloud 27にアップグレードしてPHP8.0から8.2に切り替える

Nextcloud 27にアップグレードすることにした。

Nextcloud 27

それに伴いUbuntu Serverも20.04から推奨である22.04にアップグレードした。

ともあれ、普通にブラウザからNextcloudを27にアップグレードする。すると以下のような警告が表示された。

  • 最後のバックグラウンドジョブの実行は4 時間前を実行しました。何かがおかしいようです。 バックグラウンドジョブの設定を確認してください↗。
  • あなたは現在、PHP 8.0.29 を使用しています。ディストリビューションでサポートされたら、すぐにPHPのバージョンをアップグレードして、PHPグループ↗の提供するパフォーマンスとセキュリティメリットを享受してください。
  • PHP 8.0 is now deprecated in Nextcloud 27. Nextcloud 28 may require at least PHP 8.1. Please upgrade to one of the officially supported PHP versions provided by the PHP Group ↗ as soon as possible.
  • データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 “occ db:add-missing-indices"を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。
  • テーブル “oc_mounts"のインデックス “mounts_user_root_path_index"が見つかりません。

PHP8.0から8.2に切り替える

既にphp8.2はインストール済だったのでsudo update-alternatives --config phpをしてバージョンを切り替える。

$ php -v
PHP 8.2.8 (cli) (built: Jul  8 2023 07:10:21) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.8, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.8, Copyright (c), by Zend Technologies

モジュールなどインストール

切り替わったので、モジュールを確認する。

php -m | grep -i ctype
php -m | grep -i curl
php -m | grep -i dom
php -m | grep -i fileinfo
php -m | grep -i filter
php -m | grep -i GD
php -m | grep -i hash
php -m | grep -i JSON
php -m | grep -i libxml
php -m | grep -i mbstring
php -m | grep -i openssl
php -m | grep -i posix
php -m | grep -i session
php -m | grep -i SimpleXML
php -m | grep -i XMLReader
php -m | grep -i XMLWriter
php -m | grep -i zip
php -m | grep -i zlib
php -m | grep -i pdo_pgsql
php -m | grep -i apcu
php -m | grep -i memcached
php -m | grep -i redis
php -m | grep -i imagick

すると、GDcurlmbstringSimpleXMLXMLReaderXMLWriterpdo_pgsqlzipapcumemcachedが有効になってなかった。

sudo apt install php8.2-gd php8.2-curl php8.2-mbstring php8.2-xml php8.2-pgsql php8.2-zipでモジュールをインストールする。

さあ、nextcloud再起動させようと思って気付く。php8.2-fpmが未インストールだと。ということで、sudo apt install php8.2-fpmをインストールする。そして、/etc/nginx/sites-available配下設定ファイルのfpmを書き換える。

upstream php-handler {
-    server unix:/run/php/php8.0-fpm.sock;
+   server unix:/run/php/php8.2-fpm.sock;
}

そして、sudo systemctl restart php8.2-fpm.serviceする。1

すると、PHPのバージョン警告は消えたが他の警告が表示された。

セキュリティ&セットアップ警告

Nextcloud 27
  • PHPのメモリ制限が推奨値の512MB以下です。
  • PHPのシステム環境変数が正しく設定されていないようです。getenv(“PATH”) コマンドでテストして何も値を返さないことを確認してください。 特にphp-fpmを使用する場合は、インストールドキュメント↗でPHP構成に関する注意事項とサーバーのPHP構成を確認してください。
  • データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 “occ db:add-missing-indices"を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。
    • テーブル “oc_mounts"のインデックス “mounts_user_root_path_index"が見つかりません。
  • このインスタンスには推奨されるPHPモジュールがいくつかありません。 パフォーマンスの向上と互換性の向上のために、それらをインストールすることを強くお勧めします。
    • intl
  • PHP モジュール “gmp” および “bcmath” が有効になっていない。WebAuthnパスワードレス認証を利用する場合は、これらのモジュールが必要です。

旧バージョンの時にも見た警告なので対応は同じ

/etc/php/8.2/fpm/php.ini

; Maximum amount of memory a script may consume
; https://php.net/memory-limit
-memory_limit = 128M
+memory_limit = 2048M

/etc/php/8.2/fpm/pool.d/www.conf

-;env[PATH] = /usr/local/bin:/usr/bin:/bin
+env[PATH] = /usr/local/bin:/usr/bin:/bin
sudo apt install php8.2-intl
sudo apt install php8.2-gmp php8.2-bcmath
cd /var/www/nextcloud
sudo -u www-data php occ db:add-missing-indices
sudo systemctl restart php8.2-fpm.service

で無事に警告は全て消えた。

Nextcloud 27

  1. sudo systemctl restart nginx.service再起動ではPHPのバージョンは8.0のままだった。 ↩︎