Nextcloudは多層的なWebアプリスイートであるため、ログがたちまち肥大化します。

そのため、設定後、ログローテーションの設定を行います。

動作確認環境

  • Ubuntu 20.04
  • Nextcloud 27.02
  • Apache2.4経由で稼働
  • PHP 8.1

さっくりとした手順

  1. logrotate.dにファイルを追加します。
  2. 動作を確認します。
  3. logrotateサービスを再起動します。

ファイルの追加

以下の通り、ファイルを追加します。【】内は設定したログファイルの格納ディレクトリにしてください。

cat <<- __EOF__ | sudo tee -a /etc/logrotate.d/nextcloud
【/var/log/nextcloud/】*.log {
    daily
    dateext
    dateformat -%Y%m%d
    rotate 10
    missingok
    notifempty
    su www-data www-data
    create 640 www-data www-data
    sharedscripts
    compress
    delaycompress
        postrotate
                if invoke-rc.d apache2 status > /dev/null 2>&1; then \
                    invoke-rc.d apache2 reload > /dev/null 2>&1; \
                fi;
        endscript
}
__EOF__
それぞれの内容
  1. /var/log/nextcloud/*.log: /var/log/nextcloud/ ディレクトリ内の全ての .log ファイルを対象にしてログローテーションが行われます。
  2. daily: 日ごとにログをローテートします。
  3. dateext: ログファイル名に日付が追加されます。
  4. dateformat -%Y%m%d: 日付のフォーマットが "年4桁月2桁日2桁" の形式で指定されます。
  5. rotate 10: ログファイルは10世代まで保持され、古いファイルは削除されます。
  6. missingok: ログファイルが存在しない場合でもエラーを出さずに処理を続行します。
  7. notifempty: ログファイルが空の場合、ローテーションを行わずにスキップします。
  8. su www-data www-data: ローテーション操作時にログファイルの所有者とグループを www-data ユーザーに変更します。
  9. create 640 www-data www-data: 新しいログファイルが作成される際、所有者 www-data とグループ www-data、パーミッション 640 で作成されます。
  10. sharedscripts: ローテーションの前後に prerotate および postrotate セクション内のコマンドを共有します。
  11. compress および delaycompress: ローテート後にログファイルを圧縮し、以前のファイルを圧縮しないようにします。
  12. postrotate: ローテーションが完了した後、Apache2サーバーが起動している場合にApache2をリロードします。

設定確認

sudo logrotate -v /etc/logrotate.d/nextcloud

エラーがないことを確認します。

設定反映

sudo systemctl restart logrotate.service

これで設定は完了です。後日、アクセスログが圧縮されていることを確認します。

すぐ確認したい場合は

sudo logrotate -f /etc/logrotate.d/nextcloud

で、強制的にローテートさせます。