NextCloudのインストール



●インストール前準備

 参考URL:CentOS7にNextCloudを導入する
 参考URL:Nextcloud18.0.4+Apache+MariaDB+RedisをCentOS7にセットアップ
 参考URL:【VPS活用】 Nextcloud でクラウドストレージをつくってみた ~ サーバー構築編 ~
 参考URL:Example installation on CentOS 7 server

 ApacheMySQL(MariaDB)php74はインストール済み及び設定完了済みとして作業を進めます。
 インストール作業に必要なパッケージをインストールします。
# yum install -y epel-release yum-utils unzip curl wget bash-completion 
 システムを最新状態にアップデートします。
# yum -y update
 上記のphp74をインストールする方法で不足するパッケージをインストールします。
# yum install php74-php-pecl-zip
# systemctl start php74-php-fpm


●インストール

 Nextcloudの最新パッケージのダウンロードURL(https://nextcloud.com/)を確認します。
 今回はZIP版をダウンロードします。
# cd /tmp
# wget https://download.nextcloud.com/server/releases/nextcloud-20.0.4.zip
# wget https://download.nextcloud.com/server/releases/nextcloud-20.0.4.zip.sha256
# sha256sum -c nextcloud-20.0.4.zip.sha256 
nextcloud-20.0.4.zip: 完了
 「完了」と表示されればダウンロードしたパッケージに問題はありません。
 phpのバージョン74についてのApache用のDocumentRootを/var/www/phpdir/php74に設定していますので、その配下にNextCloudをインストールします。
# cd /var/www/phpdir/php74
# unzip /tmp/nextcloud-20.0.4.zip
# mkdir /var/www/phpdir/php74/nextcloud/data
# chown -R apache:apache /var/www/phpdir/php74/nextcloud/
# systemctl restart httpd
 MariaDB にログインし、NextCloud用のデータベースを作成します。
MariaDB [(none)]> CREATE DATABASE nextcloud;
MariaDB [(none)]> GRANT ALL ON nextcloud.* to nextcloud@'localhost' identified by 'password';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit
 ※ここでは、例として以下の情報でデータベースを作成しています。
 データベース名 : nextcloud
 データベースユーザー名 : nextcloud
 データベースパスワード : password
 ※安全なパスワードを設定してください。

 ブラウザで http://(サイト名)/nextcloud にアクセスします。

 管理者用アカウントのを作成します。
 「Nextcloud」の管理アカウントを設定しますので、設定したい「ユーザ名」と「パスワード」を入力してください。

 ストレージとデータベースを設定します。
 「ストレージとデータベース」をクリックすると設定欄が表示されるますので下記項目を設定してください。

設定項目 内容
データフォルダ Nextcloudディレクトリ/data
例:/var/www/phpdir/php74/nextcloud/data
データベースの指定 MySQL/MariaDBを選択
データベースのユーザ名 Nextcloud用データベース管理ユーザ名
例:nextcloud
データベースのパスワード Nextcloud用データベース管理ユーザのパスワード
例:password
データベース名 Nextcloud用に作成したデータベース名
例:nextcloud
データベースサーバ localhost:5432

 各項目の設定が完了しましたら「セットアップを完了します」をクリックします。

●SSLへの対応

 Let's Encryptを設置方法は「Let's Encrypt証明書の設定」を参照してください。
 「PHPを複数バージョンインストールする」の設定を維持した状態で、PHPのバージョン7.4を使用できるようにSSLを設定します。
 上記の作業でNextCloudは/var/www/phpdir/php74/nextcloud/にインストールされています。
 リンクを作成します。
# ln -s /var/www/phpdir/php74/nextcloud /var/www/html/nextcloud
 作成したリンクに対してhttpd.confに設定を追加します。
# vi /etc/httpd/conf/httpd.conf

# .htaccessを利用できるようにするための設定
<Directory "/var/www/html/nextcloud">
    AllowOverride All
</Directory>
 作成したリンクに対してssl.confに設定を追加します。
# vi /etc/httpd/conf.d/ssl.conf
<Directory "/var/www/html/nextcloud">
  <FilesMatch \.php$>
    SetHandler "proxy:fcgi://127.0.0.1:9074"
  </FilesMatch>
  <IfModule dir_module>
    DirectoryIndex index.php
  </IfModule>
    Options Includes FollowSymLinks
</Directory>
 Apacheを再起動します。
# systemctl restart httpd
 ブラウザで https://(サイト名)/nextcloud にアクセスします。アクセスできればSSL化の対応は終了です。

●同期中に「・・・接続が閉じられました」と表示される

 Windows 10からCentOS Stream 8上で動作しているNextCloud(以下、「サーバ側」という。)に大きなファイル(1.5GB位)をアップロードすると、同期中に「・・・接続が閉じられました」と警告表示されます。
 Windows 10のNextCloudクライアントで同期状態を確認すると、ファイルサイズが大きすぎて同期が途中で終了していることが分かりました。
 サーバ側では、10分毎にそれなりのファイル数と(合計で)それなりファイルサイズとなるデータをダウンロードしていましたので、それを一時的に停止させ様子を見ることにしました。
 すると、途中で同期が終了していた大きなファイルは同期を中断した箇所より再度同期するようになり、最終的に同期を完了することができました。
 サーバ側の環境(ネットワーク・CPU性能等)にもよりますが、同期が途中で終わった警告メッセージ(「・・・接続が閉じられました」)が頻繁に表示される場合、上記のように対応することにより時間はかかるものの同期を完了させることができます。

●NextCloudで大きなファイルをアップロードできない

 Windows10上で利用しているNextCloudクライアントからサーバへ同期しようとすると同期に失敗しエラーが表示されます(同期対象ファイルサイズは1.9GB)。
 サーバ側で下記のようなログが記録されていました。

# less /var/log/httpd/modsec_audit.log

[Fri Jul 22 22:44:12.692726 2022] [:error] [pid 1212106:tid 140183034918656] [client 192.168.0.1:51180] [client 192.168.0.1] ModSecurity: Request body (Content-Length) is larger than the configured limit (536870912). [hostname "www.bigbang.mydns.jp"] [uri "/nextcloud/remote.php/dav/uploads/hogehoge/1003468202/0000000000000013"] [unique_id "YtqprB0f@-ZsMprN-MAgIAAAAEc"]


 このため、ModSecurity(Web Application Firewall)の設定を2箇所変更しました。
# vi /etc/httpd/conf.d/mod_security.conf

SecRequestBodyLimit 536870912
 ↓
SecRequestBodyLimit 2147483648

SecRequestBodyNoFilesLimit 536870912
 ↓
SecRequestBodyNoFilesLimit 2147483648

# systemctl restart httpd
 以上により、正常にアップロード出来るようになりました。

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

 NextCloud(26.0.2)をインストール後、管理者権限でログインすると下記のようなメッセージが表示されました。

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

サーバーのセキュリティとパフォーマンスにとって重要なことは、すべてが正確に設定されていることです。あなたの助けとなるよう、Nextcloudでは一部の自動チェックを行っています。 /
詳細な情報は、リンク先のドキュメントを参照してください。
セットアップに関して警告がいくつかあります。
    最後のバックグラウンドジョブの実行は○日前を実行しました。何かがおかしいようです。 バックグラウンドジョブの設定を確認してください↗。
    Webサーバーで "/.well-known/webfinger" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。
    Webサーバーで "/.well-known/nodeinfo" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。
    Webサーバーで "/.well-known/caldav" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。
    Webサーバーで "/.well-known/carddav" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。
    メールサーバーの設定が未設定または未確認です。基本設定で設定を行ってください。その後、フォームの下にある「メールを送信」ボタンで設定を確認してください。
    ご使用のシステムには、デフォルトの電話地域が設定されていません。これは、国コードなしでプロファイル設定の電話番号を検証するために必要です。 /
    国コードなしで番号を許可するには、地域のそれぞれの ISO3166-1コード↗とともに "default_phone_region" を設定ファイルに追加してください。
    メモリーキャッシュが構成されていません。パフォーマンスを向上させるために、可能な場合はmemcacheを構成してください。詳細については、ドキュメント↗をご覧ください。
    PHP OPcacheモジュールが正しく設定されていません。詳細は ドキュメント を参照してください。
        PHP OPcacheモジュールがロードされていません。パフォーマンスを向上させるには、OPcacheモジュールをPHPインストールにロードすることをお勧めします。
    このインスタンスには推奨されるPHPモジュールがいくつかありません。 パフォーマンスの向上と互換性の向上のために、それらをインストールすることを強くお勧めします。
        sodium
    テーマ別アプリは有効ですが、PHPモジュール「imagick」が有効ではありません。ファビコン生成を正しく行うには、このモジュールをインストールし、有効化する必要があります。

インストールガイド ↗を再確認して、 ログ にあるすべてのエラーや警告を確認してください。

Nextcloudのセキュリティは、セキュリティスキャン ↗でチェックしてください。


 最後のバックグラウンドジョブの実行は○日前を実行しました。何かがおかしいようです。

 参考URL:Nextcloud バックグラウンドジョブの設定を解決する方法

    最後のバックグラウンドジョブの実行は○日前を実行しました。何かがおかしいようです。 バックグラウンドジョブの設定を確認してください↗。

 の対処は下記のとおりです、
# crontab -u apache -e
*/5 * * * * php -f /var/www/nextcloud/cron.php

※内容を確認
# crontab -u apache -l
 これで表示されなくなりました。
 しかし、cronが動作するたびに下記のようなメールが送信されるようになりました。
PHP Deprecated:  PHP Startup: Use of mbstring.http_input is deprecated in Unknown on line 0
PHP Deprecated:  PHP Startup: Use of mbstring.http_output is deprecated in Unknown on line 0
PHP Deprecated:  PHP Startup: Use of mbstring.internal_encoding is deprecated in Unknown on line 0


 Webサーバーで "・・・" が解決されるように正しく設定されていません。

    Webサーバーで "/.well-known/webfinger" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。
    Webサーバーで "/.well-known/nodeinfo" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。
    Webサーバーで "/.well-known/caldav" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。
    Webサーバーで "/.well-known/carddav" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。

 の対処は下記のとおりです、
# vi /etc/httpd/conf.d/nextcloud.conf"
※下記行を追加
<IfModule mod_rewrite.c>
       Redirect 301 /.well-known/carddav /nextcloud/remote.php/dav
       Redirect 301 /.well-known/caldav /nextcloud/remote.php/dav
       Redirect 301 /.well-known/webfinger /nextcloud/index.php/.well-known/webfinger
       Redirect 301 /.well-known/nodeinfo /nextcloud/index.php/.well-known/nodeinfo
</IfModule>

# systemctl restart httpd
 これで表示されなくなりました。

 メールサーバーの設定が未設定または未確認です。基本設定で設定を行ってください。

 参考URL:5.1.2. メール通知にSendmailを利用する

   メールサーバーの設定が未設定または未確認です。基本設定で設定を行ってください。その後、フォームの下にある「メールを送信」ボタンで設定を確認してください。

 の対処は下記のとおりです、
 メールサーバがNextcloudと同じマシン上にある場合、Sendmailコマンドを使用してメールを送信することができます。
「基本設定」をクリック。

「メールサーバ」の項目で下記のように設定
送信モード:Sendmail
Sendmailモード:smtp(-bs)
送信元アドレス:Nextcloudのメール通知で使用する差出人アドレスを設定
 これで表示されなくなりました。

 ご使用のシステムには、デフォルトの電話地域が設定されていません。

    ご使用のシステムには、デフォルトの電話地域が設定されていません。これは、国コードなしでプロファイル設定の電話番号を検証するために必要です。 /
    国コードなしで番号を許可するには、地域のそれぞれの ISO3166-1コード↗とともに "default_phone_region" を設定ファイルに追加してください。

 の対処は下記のとおりです、
# vi config/config.php
※下記行を追加
'default_phone_region' => 'JP',
 これで表示されなくなりました。

 メモリーキャッシュが構成されていません。

    メモリーキャッシュが構成されていません。パフォーマンスを向上させるために、可能な場合はmemcacheを構成してください。詳細については、ドキュメント↗をご覧ください。

 の対処は下記のとおりです、
# dnf install memcached libmemcached -y

コードやオブジェクトをキャッシュできる「OPcache」、「APCu」もインストール
# dnf install php-opcache php-pecl-apcu -y
 これで表示されなくなりました。

 PHP OPcacheモジュールの対処

    PHP OPcacheモジュールが正しく設定されていません。詳細は ドキュメント を参照してください。
        PHP OPcacheモジュールがロードされていません。パフォーマンスを向上させるには、OPcacheモジュールをPHPインストールにロードすることをお勧めします。

 の対処は下記のとおりです、
# dnf install php-opcache php-pecl-apcu -y

※必要に応じて、下記のように設定
# vi /etc/php.d/10-opcache.ini
opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

※APCuの設定が必要な場合
# vi /etc/php.d/40-apcu.ini
[apcu]
apc.enabled=1
apc.shm_size=32M
apc.ttl=7200
apc.enable_cli=1
apc.serializer=php
# apcuが有効になっているか確認します、「APCu Support」が「Enabled」になっていると確認します
$ php -i | grep -i apcu
/etc/php.d/40-apcu.ini
apcu
APCu Support => Enabled
APCu Debugging => Disabled

# systemctl restart php-fpm
# systemctl restart httpd
 これで表示されなくなりました。

 データベースは取引ファイルを見ることに使われています。

 参考URL:Rocky Linux 9.0 (Alma Linux) にRedis7.0を入れる
 参考URL:Nextcloud 27.0.0

  データベースは取引ファイルを見ることに使われています。パフォーマンスをあげるには、可能であればメモリーのキャッシュを設定してください。詳しくは こちらの文書↗をご覧ください。

 の対処は下記のとおりです、

 「パフォーマンスをあげるには、可能であればメモリーのキャッシュを設定してください。」とのこと。

 これで表示されなくなりました。

 データベースにいくつかのインデックスがありません。

 参考URL:データベースにいくつかのインデックスがありません。

  データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 \
  "occ db:add-missing-indices"を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 \
  インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。
    テーブル "oc_mounts"のインデックス "mounts_user_root_path_index"が見つかりません。

 の対処は下記のとおりです、
# su -m apache -c "php /var/www/nextcloud/occ db:add-missing-indices"
PHP Deprecated:  PHP Startup: Use of mbstring.http_input is deprecated in Unknown on line 0
PHP Deprecated:  PHP Startup: Use of mbstring.http_output is deprecated in Unknown on line 0
PHP Deprecated:  PHP Startup: Use of mbstring.internal_encoding is deprecated in Unknown on line 0
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.
Check indices of the schedulingobjects table.
Check indices of the oc_properties table.
Check indices of the oc_jobs table.
Check indices of the oc_direct_edit table.
Check indices of the oc_preferences table.
Check indices of the oc_mounts table.
Adding mounts_user_root_path_index index to the oc_mounts table, this can take some time...
oc_mounts table updated successfully.
 これで表示されなくなりました。

 このインスタンスには推奨されるPHPモジュールがいくつかありません。sodium

 参考URL:このインスタンスには推奨されるPHPモジュールがいくつかありません。(sodium)

  このインスタンスには推奨されるPHPモジュールがいくつかありません。 パフォーマンスの向上と互換性の向上のために、それらをインストールすることを強くお勧めします。
    sodium

 の対処は下記のとおりです、
まだ、作業中
 これで表示されなくなりました。

●NextCloudのアップデート失敗時の対処方法

 参考URL:Nextcloud でアップデートに失敗して再開できなくなったときの対処

 GUIでアップデート作業中にエラーが表示(…in progress.)されました。
 対応方法を調査したいところインターネットにありましたので、同じことを実行(CLIでの実行)しました。
$ su -
# cd /path/to/nextcloud
# sudo -u apache php ./occ upgrade

アップデート完了後、メンテナンスモードを無効化
# sudo -u apache php ./occ maintenance:mode --off
 以上の作業でアップグレードが正常に完了し、利用できるようになりました。