Nextcloudを動かしている自宅サーバでPHPをアップグレード。
ちょっとだけハマったのでメモを残します。
環境
以下の環境でNextcloudを動かしています。
- Ubuntu 20.04
- Apache
- MySQL
- PHP 7.4
さっくりとした手順
- PHP7.4をアンインストールします。
- PHP8.1をインストールします。
- 追加モジュールを有効化します。
- NextCloudの追加設定を行います。
手順
- 今回は全て通常ユーザで作業をします。
- また、viを使わずコマンドを用いて設定を置き換えています。
- 設定をするのはPHPのみです。他は設定の変更をしていません。
- パッケージ/モジュールのインストールにaptitudeを用いています。好みに合わせてaptをご利用ください。
PHPの削除を行います。
sudo apt-get --purge autoremove php*
PHP8.1をインストールします。
sudo aptitude install php8.1
sudo aptitude install php8.1-{opcache,pdo,bcmath,calendar,ctype,fileinfo,ftp,gd,intl,json,ldap,mbstring,mysql,posix,readline,sockets,bz2,tokenizer,zip,curl,iconv,phar,xml}
sudo aptitude install php8.1-apcu
sudo aptitude install php8.1-memcached
php -v
# PHP 8.1.14 (cli)を確認しました。(2023/01/19)
apache再起動を行います。
sudo systemctl restart apache2.service
アップグレード後にエラー。
PHPアップグレード後、Nextcloudにアクセスするとこうなりました。
前の設定が全て消えたので、エラーが発生しました。
こちらを解消していきます。
エラーチェック
cd /var/www/html/nextcloud/
# Nextcloudの格納ディレクトリに移動します。自分の環境に置き換えてください。
sudo -u www-data php ./occ
# NextcloudのCLIインタフェースです
エラー内容
An unhandled exception has been thrown:
OCP\HintException: [0]: Memcache \OC\Memcache\APCu not available for local cache (Is the matching PHP module installed and enabled?)
memcacheとAPCuが読み込まれていないと怒られましたので、有効化していきます。
memcacheとAPCuの有効化
cd /etc/php/8.1/cli/conf.d
cat <<- __EOF__ | sudo tee -a /etc/php/8.1/cli/conf.d/10-opcache.ini
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
__EOF__
cat <<- __EOF__ | sudo tee -a /etc/php/8.1/cli/conf.d/20-apcu.ini
[apcu]
apc.enabled=1
apc.shm_size=32M
apc.ttl=7200
apc.enable_cli=1
apc.serializer=php
__EOF__
sudo systemctl restart apache2.service
再設定後の確認
cd /var/www/html/nextcloud/
# nextcloudの格納ディレクトリに移動します
sudo -u www-data php ./occ
# エラーが出ず、occのオプションが表示されることを確認しました。
この後、Nextcloudにアクセスし、画面が表示されることを確認しました。
管理者画面確認
Nextcloudに管理者アカウントでログインし、管理者設定を確認すると
- PHPのメモリ制限が推奨値の512MB以下です。
- テーマ別アプリは有効ですが、PHPモジュール「imagick」が有効ではありません。ファビコン生成を正しく行うには、このモジュールをインストールし、有効化する必要があります。
- PHP モジュール "gmp" および "bcmath" が有効になっていない。WebAuthnパスワードレス認証を利用する場合は、これらのモジュールが必要です。
が出てきました。これを修正していきます。
php.ini修正
sudo cp -pi /etc/php/8.1/apache2/php.ini /etc/old/php.ini.$(date +%Y%m%d)
# /etc/oldがなければディレクトリを作成するか、任意のバックアップパスを指定してください
diff -u /etc/php/8.1/apache2/php.ini /etc/old/php.ini.$(date +%Y%m%d)
# 差分が存在しないことにより、バックアップが取れていることを確認します。
sudo sed -i 's/memory_limit = 128M/memory_limit = 512M/g' /etc/php/8.1/apache2/php.ini
# memory_limitを推奨値の512Mに置き換えます。
差分確認
diff -u /etc/old/php.ini.$(date +%Y%m%d) /etc/php/8.1/apache2/php.ini
# 取得したバックアップと置き換えたファイルの差分を確認します
- 差分
-memory_limit = 128M
+memory_limit = 512M
不足モジュールのインストール
sudo aptitude install php8.1-{imagick,gmp}
設定反映と確認
sudo systemctl restart apache2.service
Nextcloudに管理者アカウントでログインし、管理者設定を確認。
「すべてのチェックに合格しました」
と出たので設定完了です。