コマンドによるNextCloudのアップデート

Docker版のNextCloudでブラウザ経由でのアップデートができず、「コマンドラインアップデーターを使ってアップデートしてください。」と表示されました。ブラウザによるアップデートができない時の対処法がNextCloudとDocker版NextCloudの公式サイトにあったので実際に試してみます。

https://hub.docker.com/_/nextcloud/

docker exec --user www-data CONTAINER_ID php occ

docker exec --user www-data CONTAINER_ID php occ コマンドを使用すると、NextCloudのoccコマンドラインツールを介して様々な操作が可能です。このコマンドを実行すると、使用可能なコマンド一覧が表示されます。これは、NextCloudの管理やメンテナンスを行う際に非常に便利な機能です。

docker exec --user www-data CONTAINER_ID php occ update:check コマンドは、利用可能なアップデートを確認するためのものです。NextCloudに新しいバージョンやセキュリティアップデートがあるかどうかをチェックし、利用可能なアップデートがあればそれを通知します。

occツールは、システムのアップデートだけでなく、ユーザ管理、グループ管理、ファイル操作、データベースの最適化、セキュリティ設定の確認といった多岐にわたる機能を提供します。例えば、以下のようなコマンドが利用可能です:

  • ユーザのリストを表示: php occ user:list
  • 新しいユーザを作成: php occ user:add [username]
  • ファイルのスキャンを実行: php occ files:scan --all
  • データベースの最適化: php occ db:add-missing-indices

これらのコマンドを使用することで、GUIを介さずにNextCloudの管理を行うことができ、特に大規模なインスタンスや複数のインスタンスを管理する場合には非常に便利です。また、スクリプトを用いてこれらのコマンドを自動化することも可能です。

docker exec コマンドを使用する際には、--user www-dataオプションを付けることで、Webサーバのユーザ(通常はwww-data)としてコマンドを実行することが重要です。これにより、ファイルのパーミッション問題を避けることができます。また、CONTAINER_IDは実際に操作したいNextCloudが動作しているDockerコンテナのIDまたは名前のことです。

実際にアップデートがあるか確認しました。

docker exec --user www-data nc php occ update:check

root@instance-20240128-2033:~# docker exec –user www-data nc php occ update:check
Nextcloud 28.0.2 is available. Get more information on how to update at https://docs.nextcloud.com/server/28/admin_manual/maintenance/upgrade.html.
Update for calendar to version 4.6.5 is available.
Update for contacts to version 5.5.2 is available.
Update for mail to version 3.5.6 is available.
Update for spreed to version 18.0.3 is available.
5 updates available

その後、アップグレードコマンドを入力します。

docker exec --user www-data nc php occ upgrade

しかし、以下のように表示されすでに最新だということです。

Nextcloud is already latest version

なお、メンテナンスモードにしてからアップデートしたのですが、期待通りに進みませんでした。「Nextcloud is in maintenance mode, no apps are loaded.」というメッセージは、Nextcloudがメンテナンスモードであることを示していますが、「Nextcloud is already latest version」というメッセージが表示される場合、システムのコアは既に最新の状態であると認識されています。もしかすると、Nextcloudのセットアップに関連するこれらのエラーが原因かもしれません。ブラウザにいくつか問題が表示されていました。

セットアップに関するいくつかのエラーがあります。

  • The reverse proxy header configuration is incorrect. This is a security issue and can allow an attacker to spoof their IP address as visible to the Nextcloud. 詳細については、ドキュメント↗を参照してください。
  • 安全な接続でインスタンスにアクセスしていますが、インスタンスは安全でないURLを生成しています。これは、リバースプロキシの背後にあり、構成設定変数が正しく上書きされていない可能性があります。これについては、ドキュメントページ↗をお読みください。
  • 8 errors in the logs since 2024年2月17日
  • Strict-Transport-Security “HTTP ヘッダーの秒数が少なくとも"15552000" に設定されていません。セキュリティを強化するには、セキュリティのヒント↗で説明されているようにHSTSを有効にすることをお勧めします。
  • Webサーバーで “/.well-known/caldav" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。
  • Webサーバーで “/.well-known/carddav" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。
  • データベースがトランザクションファイルロックに使われています。パフォーマンスをあげるには、可能であればメモリーのキャッシュを設定してください。 詳細については、ドキュメント↗を参照してください。
  • このインスタンスには、いくつかの推奨 PHP モジュールがありません。パフォーマンスと互換性を向上させるために、これらをインストールすることを強くお勧めします: bz2. 詳細については、ドキュメント↗を参照してください。
  • ご使用のシステムには、デフォルトの電話地域が設定されていません。これは、プロフィール設定で国コードなしの電話番号を有効にするために必要です。国コードなしの電話番号を許可するには、"default_phone_region" を地域の ISO 3166-1 コードとともに設定ファイルに追加してください。 詳細については、ドキュメント↗を参照してください。
  • メールサーバーの設定が未設定または未確認です。「基本設定」で設定を行ってください。その後、フォームの下にある「メールを送信」ボタンで設定を確認してください。 詳細については、ドキュメント↗を参照してください。

アップデートの問題が発生する前にこれらの問題を解決する必要があるかもしれません。各エラーメッセージに対する一般的な解決策を要約しておきます。特にリバースプロキシを使用しているので、ここら辺を修正する必要があるかもしれません。

  1. リバースプロキシのヘッダー設定の誤り: trusted_proxiesforwarded_for_headers の設定を config.php に追加することで、Nextcloudがリバースプロキシからの接続を正しく認識できるようにします。詳細はNextcloudのドキュメントで「リバースプロキシ」に関するセクションを参照してください。
  2. セキュアな接続とURL生成の問題: config.php ファイルに overwriteprotocol オプションを設定して、Nextcloudが常にセキュアなURLを生成するようにします。例えば、HTTPSを使用している場合は 'overwriteprotocol' => 'https', を追加します。
  3. Strict-Transport-Security (HSTS) の設定不足: Webサーバーの設定(ApacheやNginxなど)にHSTSヘッダーを追加して、セキュリティを強化します。HSTSヘッダーは、ブラウザに対してWebサイトへのすべての通信をHTTPSで行うよう指示します。
  4. .well-known/caldav および .well-known/carddav の解決: Webサーバーの設定にこれらのパスをNextcloudのDAVエンドポイントにリダイレクトするルールを追加します。これにより、カレンダーや連絡先アプリが正しく機能します。
  5. データベースのパフォーマンス問題: config.php ファイルにキャッシュ設定を追加して、データベースのパフォーマンスを向上させます。例えば、RedisやMemcachedをキャッシングに使用する設定を行います。
  6. 不足しているPHPモジュール: システムにインストールされていないPHPモジュール(この場合はbz2)をインストールします。これにより、パフォーマンスと互換性が向上します。
  7. デフォルトの電話地域が設定されていない: config.phpdefault_phone_region を追加し、ISO 3166-1コードを使用して国を指定します。これにより、国コードなしの電話番号の処理が改善されます。
  8. メールサーバーの設定: Nextcloudの管理画面からメールサーバーの設定を行い、設定が正しいことを確認します。これにより、Nextcloudからのメール送信が正しく機能するようになります。

なお、コンテナに入ってコマンドを入力してもアップデートできるようです。以下は基本的な手順です。

  1. コンテナのバックアップを取る アップデート前には、データの安全のためにNextCloudのデータやデータベースのバックアップを取っておいたほうが無難です。
  2. NextCloudコンテナに入る Dockerで動いているNextCloudのコンテナに入ります。これには以下のコマンドを使用します(your_nextcloud_containerは実際のコンテナ名)。
    docker exec -it your_nextcloud_container /bin/bash
  3. コマンドラインアップデートツールを使用する コンテナ内で、NextCloudのコマンドラインアップデートツール(occコマンド)を使用してアップデートプロセスを実行します。通常、以下のコマンドを使用します。
    sudo -u www-data php occ upgrade
    ここでsudo -u www-dataはWebサーバユーザ(例えばwww-data)の権限でコマンドを実行することを意味します。php occ upgradeはNextCloudのアップデートを実行するコマンドです。
  4. アップデート後の処理 アップデートが完了したら、必要に応じてNextCloudコンテナを再起動するか、またはDockerコンポーズを使用している場合は関連するサービスを再起動します。
  5. 動作確認 最後に、Webブラウザを通じてNextCloudにアクセスし、アップデートが正常に完了し、すべてが正しく機能していることを確認します。

Uncategorized

Posted by mamu