久々にNextcloudを更新しようと思ったら、多くの警告が表示されたので潰していきます。
memcacheの設定
メモリキャッシュが設定されていません。可能であれば、パフォーマンスを向上するため、memcacheを設定してください。…
とありますので、直します。速いほうがいいですから。
リンクのドキュメントを見ると、数種類のソフトウェアを利用することが可能らしいです。Apacheで動かしていた頃はRedisを利用していたので、今回もRedisを使います。 CentOSの場合はredis と php-pecl-redisが必要らしいですが、”dnf install”や”dnf seach”しても見つかりません。 remiを使います。
# dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
# dnf update
PHPモジュールの設定をします。 私の環境の場合は次のように表示されました。
# dnf module list php
CentOS-8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
php 7.3 [e] common [d], devel, minimal PHP scripting language
Remi's Modular repository for Enterprise Linux 8 - x86_64
Name Stream Profiles Summary
php remi-7.2 common [d], devel, minimal PHP scripting language
php remi-7.3 common [d], devel, minimal PHP scripting language
php remi-7.4 common [d], devel, minimal PHP scripting language
ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled
remiではphp7.4が利用できるので、そっちにしてます。
# dnf module reset php
# dnf module enable php:remi-7.4
すると、php remi-7.4
に[e]
が付きます。
# dnf module list php
CentOS-8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
php 7.3 common [d], devel, minimal PHP scripting language
Remi's Modular repository for Enterprise Linux 8 - x86_64
Name Stream Profiles Summary
php remi-7.2 common [d], devel, minimal PHP scripting language
php remi-7.3 common [d], devel, minimal PHP scripting language
php remi-7.4 [e] common [d], devel, minimal PHP scripting language
ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Redisを探してみます。
# dnf search php-pecl-redis5
いろいろなバージョンも表示されますが、モジュールの設定でデフォルトを7.4にしていますので、普通にインストールします。
# dnf install php-pecl-redis5
そうすると、今までのphp-fpmの類も一緒に更新されますので、nginxやphp-fpmをリスタートします。
# systemctl restart nginx
# systemctl restart php-fpm
NextcloudのシステムなどからPHPのバージョンを確認します。
とりあえず、Redisを起動します。
# systemctl start redis
# systemctl enable redis
実行できたかを確認します。
# ps ax | grep redis
/usr/bin/redis-server 127.0.0.1:6379
こんなサービスが動いていると思います。
次に、Nextcloudのconfigファイルを編集してRedisを有効化します。
configファイルはNextcloudをインストールしたディレクトリの中にあるconf/config.php
だと思います。(私の環境ではそうだった)
一応、適当な名前で元のconfigファイルをバックアップしておき、好きなエディタでconfig.php
を編集します。
いろいろ書いてあると思いますが、最後の);
の前に次のように入力します。
'memcache.locking' => '\OC\Memcache\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.local' => '\OC\Memcache\Redis',
'redis' => [
'host' => 'localhost',
'port' => 6379,
'timeout' => 3,
],
保存して、nginxを再起動します。
# systemctl restart nginx
# systemctl restart php-fpm
Nextcloudのページを再度読み込み、概要を表示するとmemcacheに関する警告が消えていると思います。
imagickとbcmathのインストール
このインスタンスには推奨されるPHPモジュールがいくつかありません。パフォーマンスの向上と互換性の向上のために、それらをインストールすることを強くお勧めします。
・imagick
・bcmath
imagick
名前からして、画像プレビューのナニカだと思います。
# dnf install ImageMagick ImageMagick-devel
# dnf install php-devel php-pear make
peclコマンドでビルドします。
# pecl install imagick
ビルドが完了すると、「php.iniに記述しろ」と言われますので、書き込みます。個人的にはphp.iniに直接書き込むのではなく、configファイルをディレクトリで分割するほうが好きです。
# echo "extension=imagick.so" > /etc/php.d/20-imagick.ini
bcmath
# dnf install php-bcmath
おわりです。
occコマンドを利用するもの
occコマンドの使い方
これまではモジュールのインストールなどで解決できました。次はNextcloudに入っているphpアプリケーションのoccを利用して警告を消します。
ちなみに、今までの記事を読んでnginxでNextcloudを動かしている場合は、rootをとってもoccは動かないと思います。occコマンドを実行するには次にようにします。
# sudo -u nginx php ./occ
すると、緑色の文字などでコマンドの説明が出てきます。
データベースの欠けたインデックスを追加する
データベースにいくつかのインデックスがありません。大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。
"occ db:add-missing-indices"を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。
警告メッセージ通りのコマンドを入力すれば問題は解決します。
次のように入力すると、緑色の文字でズラズラ流れます。
# sudo -u nginx php ./occ db:add-missing-indices
Check indices of the share table.
Check indices of the filecache table.
Check indices of the twofactor_providers table.
Check indices of the login_flow_v2 table.
Check indices of the whats_new table.
Check indices of the cards table.
Check indices of the cards_properties table.
Check indices of the calendarobjects_props table.
Adding calendarobject_calid_index index to the calendarobjects_props table, this can take some time...
calendarobjects_props table updated successfully.
Check indices of the schedulingobjects table.
Adding schedulobj_principuri_index index to the schedulingobjects table, this can take some time...
schedulingobjects table updated successfully.
Check indices of the oc_properties table.
Adding properties_path_index index to the oc_properties table, this can take some time...
oc_properties table updated successfully.
不足しているカラムを追加する
データベースにはオプションのカラムがいくつかありません。大きなテーブルにカラムを追加するには時間がかかるため、オプションのカラムは自動的に追加されませんでした。
"occ db:add-missing-columns"を実行することによって、不足しているカラムはインスタンスの実行中に手動で追加することができます。カラムが追加されると、応答性や使い勝手が改善される可能性があります。
# sudo -u nginx php ./occ db:add-missing-columns
Check columns of the comments table.
Adding additional reference_id column to the comments table, this can take some time...
Comments table updated successfully.
データベースの列をbit int型に変換する
データベース内のいくつかの列で、bit intへの変換が行われていません。大きなテーブルでカラムタイプを変更すると時間がかかることがあるため、自動的には変更されませんでした。
'occ db:convert-filecache-bigint'を実行することによって、それらの保留中の変更は手動で適用できます。この操作は、インスタンスがオフラインの間に行う必要があります。
インスタンスをオフラインにしたいので、Nextcloudのドキュメントを読み漁っていると、メンテナンスモードにするだけで良いらしいです。
nextcloudのconfig.phpファイルに次の行を追加します。
"maintenance" => true,
私の環境では、"maintenance" => false
だったので、true
にしただけ。
ブラウザからアクセスするとメンテ中と表示されます。
今のうちにbigint型(64bit)に変換します。
# sudo -u nginx php ./occ db:convert-filecache-bigint
bigintの設定のときに以下のように表示されました。黒いコンソールにいきなり赤いモノが映るのは心臓に悪いと思うので、やめていただきたい。
重たい処理らしいので実行するかどうかを問われます。yes
メンテナンスモードを解除して、再読み込みをすると警告がなくなりました!