Nextcloudの『セキュリティ&セットアップ警告』を潰していく

久々にNextcloudを更新しようと思ったら、多くの警告が表示されたので潰していきます。

前の記事の続きのような感じのものになります。足りないパッケージとかがありましたら、自分で確認してインストールしてください。

memcacheの設定

メモリキャッシュが設定されていません。可能であれば、パフォーマンスを向上するため、memcacheを設定してください。…

とありますので、直します。速いほうがいいですから。

リンクのドキュメントを見ると、数種類のソフトウェアを利用することが可能らしいです。Apacheで

動かしていた頃はRedisを利用していたので、今回もRedisを使います。

CentOSの場合はredis と php-pecl-redisが必要らしいですが、”dnf install”や”dnf seach”しても見つかりません。

れみを使います。

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

れみではphp7.4が利用できるので、そっちにします。

dnf module reset php
dnf module enable php:remi-7.4

するとこうなります。

# 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

メンテナンスモードを解除して、再読み込みをすると警告がなくなりました!

いかがでしたか?

今までは、大きいサイズのファイルのアップロードの際にエラーが発生していましたが、すべての警告を解消してからファイルのアップロードがスムーズになった気がします。

nextcloudをnginxで動かした直後にphp-fpmの最適化やopcacheの設定は行った気がします。やり方はもう覚えていませんが、多分ドキュメント通りだった気がします。

https://docs.nextcloud.com/server/19/admin_manual/installation/server_tuning.html?highlight=tuning#tune-php-fpm