カテゴリー: nextcloud Page 1 of 4

Nextcloud・アプリログのローテーション。

apache/nginxなどと連携した場合のアクセスログではなく、アプリそのもののログローテーションです。

ログの位置

/path/to/nextcloud/directory/data

例えば、 `/var/www/html/nextloud/data`などを示します。

ローテーションファイル

  • /etc/logrotate.d/nextcloud2

を、協議・進行に沿ったエディタを用いて以下のように作成します。

/var/www/html/nextcloud/data/*.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
}

ログの位置やローテーションサイクルなどは自分の環境に合わせてください。

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

でエラーがなければ、アプロログのローテーションは完了です。

NextcloudのExternal StorageサービスでのArray to string conversionエラーに対処。

エラー概要

Nextcloud 28.x以降にバージョンアップしてから、ログで以下が大量に出力され続けていました。

Array to string conversion at /var/www/html/nextcloud/lib/private/Files/Cache/Scanner.php#224

こちらの対処を行います。

エラーが出る要件

  1. Nextcloud 28.x以降を利用している。
  2. External Storageプラグインを利用している。
  3. このプラグインで、S3(乃至はS3互換のオンラインストレージ)をマウントしている。
  4. マウントしたストレージにファイルやフォルダを保存した。

詳細:Nextcloud Hub 8, copying files to an External Storage configured as primary storage isn't reliable

環境

  • Ubuntu 20.04
  • Nextcloud 29.0.0
  • PHP 8.1
  • Apache 2.4
  • オンラインストレージサービスとしてwasabiを利用

解決策

上記issueに

Pretty sure this would be fixed by #43794. At least in my limited testing using the merge request as a patch: https://patch-diff.githubusercontent.com/raw/nextcloud/server/pull/43794.diff

とあったので、この通りに実施します。

さっくりとした手順

  1. rootに昇格します。
  2. パッチファイルを入手します。
  3. ファイルを適用します。
  4. Apacheを再起動します。

root昇格

sudo su -

Nextcloudはwww-dataユーザーのみアクセス可能と、厳しめのアクセス権が設定されているので、ここで昇格させます。

ディレクトリ移動

  • Nextcloudのルートディレクトリに移動
cd /var/www/html/nextcloud && pwd

自分の環境に合わせます。

cd lib/private/Files/Cache

ファイルバックアップ

  • Scanner.phpファイルのバックアップ
cp -pi Scanner.php /path/to/backup/directory/Scanner.php.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

  • バックアップ確認
diff -u Scanner.php /path/to/backup/directory/Scanner.php.$(date +%Y%m%d)

差分がなければバックアップは成功です。

パッチ適用

  • wgetでパッチ入手
sudo -u www-data https://patch-diff.githubusercontent.com/raw/nextcloud/server/pull/43794.diff
  • パッチ適用
sudo -u www-data patch < 43794.diff 

patching file Scanner.phpと返ってくればOKです。

パッチ適用確認

  • 差分確認
diff -u /path/to/backup/directory/Scanner.php.$(date +%Y%m%d) Scanner.php
  • 差分結果
                                                }

                                                // Only update metadata that has changed
-                                               $newData = array_diff_assoc($data, $cacheData->getData());
-
+                                               // i.e. get all the values in $data that are not present in the cache already
+                                               // NOTE: we serialize then unserialize here because array_diff_assoc() doesn't 
+                                               // support multidimensional arrays on its own (and otherwise internally casts any 
+                                               // embedded array elements to attempt to compare them - not only generating warnings 
+                                               // like "Array to string conversion" but also, as a resut, overlooking real differences)
+                                               $newData = array_diff_assoc(
+                                                       array_map('serialize', $data), 
+                                                       array_map('serialize', $cacheData->getData())
+                                                       );
+                                               $newData = array_map('unserialize', $newData);
+                                        
                                                // make it known to the caller that etag has been changed and needs propagation
                                                if (isset($newData['etag'])) {
                                                        $data['etag_changed'] = true;
  • Apache再起動
systemctl restart apache2.service

既にrootに昇格しているので、sudoは不要のはずです。

  • パッチファイルを削除
rm 43794.diff 

エラー解消確認

  1. ブラウザでNextcloudサイトに管理者権限でログインします。
  2. 管理メニュー→ログへと進み、適用時刻以降に冒頭のログが出力されていないことを確認します。

Nextcloud 29.0アップグレード後の処理。(テーブルインデックス追加)

概要

Nextcloudを29.0にアップデート後、管理画面で以下のエラーが出てきました。

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

この問題に対処していきます。

Nextcloudが実行されているサーバにSSHログインして作業を行います。

環境

  • Ubuntu 20.04 または Ubuntu 22.04
  • PHP 8.1
  • Apache 2.4
  • MySQL
  • Nextcloud 28.x→29.0にアップグレード

ディレクトリ移動

cd /var/www/html/nextcloud/ && pwd

自分の環境に合わせます。

occ実行

  • 管理画面で出てきたコマンドを実行
sudo -u www-data php occ db:add-missing-indices
  • 実行結果
Adding additional oc_npushhash_di index to the oc_notifications_pushhash table, this can take some time...
oc_notifications_pushhash table updated successfully.

エラー解消確認

  1. 上記対処を行ったNextcloudサイトに管理者権限でログインします。
  2. 管理画面で、このエラーが解消されていれば完了です。

Nextcloud、PHPのアップロードファイルサイズを変更。

概要

Nextcloudの管理画面から出てくるPHPの最大アップロードファイルサイズを変更します。

環境

2024/03/26現在

  • Ubuntu 20.04
  • Apache 2.4.58
  • Nextcloud 28.0.3
  • PHP 8.1.27

手順

現在のファイルサイズを確認

  • upload_max_filesize
cat /etc/php/8.1/apache2/php.ini |grep max_filesize
upload_max_filesize = 2M
  • post_max_size
cat /etc/php/8.1/apache2/php.ini |grep max_size
post_max_size = 8M

それぞれ、筆者の環境です。

バックアップ取得

  • バックアップ
sudo cp -pi /etc/php/8.1/apache2/php.ini /path/to/backup/directory/php.ini.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

  • バックアップ取得確認
diff -u /etc/php/8.1/apache2/php.ini /path/to/backup/directory/php.ini.$(date +%Y%m%d)

エラーが出なければ(差分がなければ)バックアップはできています。

ファイル書き換え

  • ファイル書き換え
sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 100M/; s/post_max_size = 8M/post_max_size = 120M/' /etc/php/8.1/apache2/php.ini

※upload_max_filesize = 2Mとpost_max_size = 8Mは、自分の設定を入れてください。

  • ファイル書き換えの差分表示
diff -u /path/to/backup/directory/php.ini.$(date +%Y%m%d) /etc/php/8.1/apache2/php.ini

先ほどバックアップしたファイルを指定します。

 ; https://php.net/post-max-size
-post_max_size = 8M
+post_max_size = 120M

 ; Automatically add files before PHP document.
 ; https://php.net/auto-prepend-file
@@ -847,7 +847,7 @@

 ; Maximum allowed size for uploaded files.
 ; https://php.net/upload-max-filesize
-upload_max_filesize = 2M
+upload_max_filesize = 100M

設定反映

  • apacheのステータス確認
systemctl status apache2.service

active(running)を確認します

  • apache再起動
sudo systemctl restart apache2.service
  • apacheのステータス確認
systemctl status apache2.service

active(running)を確認します

設定反映確認

先ほど修正を行ったNextcloudに管理者権限でアクセスします。

管理>システムに進みます。

最大アップロードファイルサイズが修正した値になっていれば設定完了です。

Nextcloud、Recognizeのエラー解消。(機械学習モデルのダウンロード)

環境

  • Ubuntu 22.04
  • Nextcloud 28.03

の環境で、画像の自動タグ付けアプリ『Recognize』を利用しています。

Nextcloudを28.03にアップデート後、以下のエラーが出たので対処を行います。

エラー内容

管理者権限でログイン後、管理>Recognizeと進むと以下が出てきました。

The machine learning models still need to be downloaded.

対処

こちらのサイトに出てきた方法をそのまま使いました。

https://help.nextcloud.com/t/machine-learning-models-still-need-to-be-downloaded/151566

ディレクトリ移動

cd /home/www-data/nextcloud/ && pwd

Nextcloudがインストールされているディレクトリに移動します。

occ実行

sudo -u www-data php occ  recognize:download-models

※5~10分ぐらい時間がかかりました。

エラー解消確認

上記コマンド終了後、再びNextcloudにログインして管理>Recognizeと進みます。

機械学習モデルのダウンロードが正常に終了しました。

と出たのでエラーは解消です。

Ubuntu 22.04に構築したNextcloudとClamAVを連携させる。

概要

NextcloudとClamAVを連携させます。

環境

  • Ubuntu 22.04
  • Nextcloud 28.02
  • ClamAV 0.103

さっくりとした手順

  1. clamav-daemonを有効化します。
  2. ウイルス定義ファイル(freshclam)を定期的に実行させます。
  3. NextcloudにAntivirusを導入します。
  4. NextcloudのAntivirusを連携させます。

参考にした手順:
https://rair.dev/nextcloud-clamav-antivirus/

前提

  • 性質上、かなりリソースを消費します。ある程度のマシンスペックを覚悟してください。
  • ClamAVをインストールしていることが条件です。

ClamAVを有効化します。

  • ClamAV daemon 状況確認
sudo systemctl status clamav-daemon.service

実行結果

○ clamav-daemon.service - Clam AntiVirus userspace daemon
     Loaded: loaded (/lib/systemd/system/clamav-daemon.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/clamav-daemon.service.d
             └─extend.conf
     Active: inactive (dead)
  Condition: start condition failed at Tue 2024-02-20 16:09:56 JST; 19h ago
             └─ ConditionPathExistsGlob=/var/lib/clamav/daily.{c[vl]d,inc} was not met
       Docs: man:clamd(8)
             man:clamd.conf(5)
             https://docs.clamav.net/

最初はエラーになったので、再起動をします。

  • ClamAV daemon 再起動
sudo systemctl restart clamav-daemon.service
  • 再起動後の状況確認
sudo systemctl status clamav-daemon.service
● clamav-daemon.service - Clam AntiVirus userspace daemon
     Loaded: loaded (/lib/systemd/system/clamav-daemon.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/clamav-daemon.service.d
             └─extend.conf
     Active: active (running) since Wed 2024-02-21 11:44:33 JST; 4s ago
       Docs: man:clamd(8)
             man:clamd.conf(5)
             https://docs.clamav.net/
    Process: 54279 ExecStartPre=/bin/mkdir -p /run/clamav (code=exited, status=0/SUCCESS)
    Process: 54280 ExecStartPre=/bin/chown clamav /run/clamav (code=exited, status=0/SUCCESS)
   Main PID: 54281 (clamd)
      Tasks: 1 (limit: 18920)
     Memory: 955.7M
        CPU: 4.215s
     CGroup: /system.slice/clamav-daemon.service
             └─54281 /usr/sbin/clamd --foreground=true

今度はOKです。この結果を見てもわかるように、消費メモリが1GBほど。

  • ソケットがリッスンされていることを確認
netstat -a|grep clam
unix  2      [ ACC ]     STREAM     LISTENING     1516341  /var/run/clamav/clamd.ctl

freshclamを定期実行させます。

  • サービススクリプトを作成
cat <<- __EOF__ | sudo tee -a /etc/systemd/system/freshclam.service
[Unit]
Description=Freshclam virus database updater

[Service]
Type=simple
ExecStart=/usr/bin/freshclam -d -c 4
# -c 数字で 頻度を指定します。ここでは日に4回(6時間おき)に更新します

[Install]
WantedBy=multi-user.target
__EOF__
  • 実行権付与
sudo chmod +x /etc/systemd/system/freshclam.service
  • サービス反映
sudo systemctl daemon-reload
  • サービス開始
sudo systemctl start freshclam.service
  • 自動起動有効化
sudo systemctl enable freshclam.service
  • サービス開始確認
systemctl status freshclam.service

Active :inactive (dead)と表示されますが、 freshclam.service: Deactivated successfully.と出ていれば動作に問題はありません。

NextcloudでAntiVirusをインストール

  1. Nextcloudに管理者権限でログインします。
  2. アプリから「Antivirus for files」を検索してインストールします。

Nextcloud Antivirus for files設定

  1. 管理者メニューの「セキュリティ」に進みます。
  2. ファイルのウイルス対策で、以下の通り設定します。
  • モード: ClamAV Daemon (Socket)
  • ソケット: /var/run/clamav/clamd.ctl
  • ストリームの長さ: 262144000 (アップロードできるファイルの容量に合わせます)
  • File size limit for periodic background scans and chunked uploads, -1 means no limit:-1
  • Check only first bytes of the file, -1 means no limit :-1
  • バックグラウンドスキャン中に感染ファイルが見つかった場合: ログのみ (運用に合わせます)

設定後、「保存」をクリックして、設定完了です。

Nextcloud 28.02のエラー「メンテナンス

概要

Ubuntu 22.04でも稼働を始めたNextcloud。28.02にアップグレード後、管理者画面から以下の警告が出てきました。

サーバーにはメンテナンスウィンドウの開始時間が設定されていません。これは、リソースを多く使用する日常のバックグラウンドジョブが、メインの利用時間中にも実行されることを意味します。利用者がこれらの重いタスクによる負荷の影響を受けにくくするために、低い利用時間に設定することをおすすめします。 詳細については、ドキュメント↗を参照してください。

対処

https://docs.nextcloud.com/server/28/admin_manual/configuration_server/background_jobs_configuration.html

上記の通りに行うこととします。

以下、NextcloudがインストールされているサーバにSSHログイン(または直接コンソール接続)での操作です。

環境

  • Ubuntu 22.04
  • php 8.1
  • Apache 2.4

手順

root昇格

Nextcloudは、コンフィグ系が全てWeb実行ユーザ(www-data)等に統一されているため、

sudo su -

での操作を行います。

バックアップ取得

  • ディレクトリ移動
cd /home/www-data/nextcloud/config && pwd
  • バックアップ
cp -pi config.php /path/to/backup/directory/config.php.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

  • バックアップ確認
diff -u config.php /path/to/backup/directory/config.php.$(date +%Y%m%d)

エラーが出なければ(差分がなければ)バックアップ成功です。

config.php修正

以下のファイルを、以下の通り追記します。

/home/www-data/nextcloud/config/config.php

  • 追記内容
  'default_timezone' => 'Asia/Tokyo',
  'maintenance_window_start' => 1,
  • 差分
+  'default_timezone' => 'Asia/Tokyo',
+  'maintenance_window_start' => 1,

config.phpでタイムゾーンを指定済みであれば、追記は下の行だけで大丈夫です。

修正反映

  • Apache再起動
systemctl restart apache2.service
  • rootから抜ける
exit

解消確認

ブラウザから上記の処置を施したNextcloudにアクセス。管理者画面で「サーバーにはメンテナンスウィンドウの開始時間が設定されていません~」が出なければOKです。

2023年の主な出来事-サーバ編-

概要

2023年もじきに終わるということで、今年のまとめ。趣味のサーバ運用という点では大きなものがいくつかありました。

新たにインターネット上に構築したサイト

公開用Redmine作成

これが一番大きいです。

推しの名前でドメインが取得できたことにより、「これでWebを公開しよう」と思い立ち、正月休みから行動スタート。

ゲーム『ライザのアトリエ3』リリースに間に合わせ、様々な攻略情報を載せることができました。

Redmine自身の各種情報も掲載できたのも満足です。

アクセス解析システム:matomo作成

  • 非公開

公開用サイトのアクセス状況を知りたくて、このシステムをインストール。

Redmineとの連携はView_Customize_Pluginでなんとかなりましたし、その際、本邦のRedmineメンテナ様自身直々のアドバイスをいただけたことが印象に残っています。

フォトアルバムサイト:piwigo作成

フォトアルバムもついでに作成。

写真の拡充を図っていくのが来年度の目標になりそうです。

ドキュメント保存システム:BookStack作成

Redmineのプラグイン「knowlegebase」に代わるシステムを探していたら見つけました。

  • 本棚や本という概念
  • Markdownフレンドリー
  • 見出しに合わせたスクロール

など、おおよその欲しかった機能が備わっていて、今後のメインウェポンとなる予感です。

ローカルに構築したサイト

Nextcloud

2022年から継続利用。

Growi

2022年から利用しているマークダウンエディタ、growi。

2023年はmermaid.jsにようやく対応したので、デジタルでのメモ残しに大きく貢献しました。

firefly-iii

つい先日ではありますが、この財務管理システムを知ったおかげで「お金関係のロギング」を始められるようになりました。

来年度の目標

Ubuntu 20.04リプレース。

LTSのEOL2025年に備えます。そのためのボトルネックとなっている

  • Redmineのメジャーバージョンアップ
  • およびknoledgebaseの代替システム(現状候補はBookStack)

と検証を進めます。

サーバのスペックアップ

これに関しては予算と相談しながら。

Nextcloud、ブルートフォースの誤検知対応(occ実行)

エラー内容

Nextcloudで以下のエラーが出たので対応を行います。

あなたのIPアドレスは、 "xxx.xxx.xxx.xxx" として認識されており、現在ブルートフォース対策機能により様々なリクエストのパフォーマンスが低下しています。IPアドレスがあなたのアドレスでない場合、プロキシが正しく設定されていない可能性があります。詳細はドキュメントをご覧ください

エラーとなった原因

ファイル共有機能の検証を行っており、その際に共有/非共有の設定を繰り返していたなどの不審な動きがあったからだと思います。(現に、通常に使用している限りではエラーは発生しませんでした)

エラー解消

エラーが出たNextcloudサーバにSSH接続して対応します。

ディレクトリ移動

cd /home/www-data/nextcloud && pwd

occ実行

sudo -u www-data php occ security:bruteforce:reset [IPアドレス]

上記エラーで出てきたIPアドレスを指定します。

エラー解消確認

  1. Nextcloudに管理者権限でログインします。
  2. 管理画面を開きます。
  3. 以下のように、エラーが解消されていることを確認します。

ChromebookでNextcloudのファイルを参照。

使う機会があったので調べてみました。

背景

出先(宿泊先)にChromebookしか持っていない状態でNextcloudのファイルを参照したい状況が発生しました。

Chrome拡張Nextcloud (unofficial)

https://chrome.google.com/webstore/detail/nextcloud-unofficial/kkbmcejbjlhkmljcafiaofajcbgkobcd/related

こちらをChromebookに入れてみます。

導入後、Chromebookのファイルの縦メニューを開くと

Nextcloud(unofficial)というリンクが出てきます。

接続

※予めNextcloudにログインします。

  • Name:任意の名前
  • Server domain:Nextcloudのドメイン名

を入れて「Login」をクリックします。そうすると、Nextcloudにログインしているブラウザが表示され、アクセス権の確認が出ます。

その後、接続。

接続後の挙動

エクスプローラーのように、ファイルが表示されます。プレビューはでないものの、ファイルをダウンロードすることなく閲覧が可能になりました。

ブラウザからファイルを保存する際、このNextcloudのディレクトリを指定することはできませんが、

  1. 一度ダウンロードディレクトリに保存
  2. その後、ファイルアプリからNextcloudの任意のディレクトリに保存

の手順でOKとなりました。

Page 1 of 4

Powered by WordPress & Theme by Anders Norén