それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

nextcloud のdataディレクトリの移動をする。

データ・ディレクトリを変更する。

データの場所だけの変更なら割と楽

occ 初期チェックが不安定なのでちょっと壊れたりするけど概ね問題なく移動できる。

nextcloud のデータ・ディレクトリを別空間にすることで、phpソースコードときれいに分離するので管理が楽になる。nextcloudの動作チェック時にphpソースコードgrep で検索しやすくなる。

手順

  1. メンテナンス・モードをON
  2. データベースのバックアップ
  3. ディレクトリを移動(またはコピー)
  4. 設定の書き換え
  5. メンテナンス・モードOFF

最初にメンテナンス・モードをONにしておく

php nextcloud/occ  maintenance:mode --on

バージョン。私の現在のバージョンは次の通り。

php nextcloud/occ -V
Nextcloud is in maintenance mode - no apps have been loaded

Nextcloud 22.2.3

念の為にデータベースをバックアップ

## mysql の場合
mysqldump nextcloud
## sqlite3 の場合
cp nextcloud.sqlite3{,back}

ディレクトリを移動 わたしは、マウントしてるだけなので変更は楽ちん。

sudo umount nextcloud/data
sudo mount /dev/sdx /opt/nextcloud/data
sudo chown -R www-data. /opt/nextcloud
sudo -u www-data /opt/nextcloud/data/.ocdata

occの起動時のディレクトリ・チェックのプログラムが不安定で、上位ディレクトリへのパーミッション・チェックが走るので、nextcloud/data のように階層構造を作ってあげないと、うまくいかないとおもう。

設定の変更

nextcloud/occ  config:system:set  datadirectory --value="/opt/nextcloud/data/"

最後にメンテナンスモードをオフにする。

php nextcloud/occ  maintenance:mode --off

コレで終わり

うまくいかないとき

初期チェックが走って、データベースがぶっ壊れてる可能性がある。

ちいとばかり、初期チェック動作が不安定だったので注意する。

ディレクトリを消すと初期チェックが走るのだが、設定を替えてるのが反映されないので、データベースにゴミデータが書かれて困った。

データベースの修正。

ストレージ指定が、local::/ だとか local::/var/www/nextcloud/dataとかやばい感じなることがあったので修正した。

select * from oc_storages;
alter table oc_storages auto_increment = 0 ;
delete from oc_storages where numeric_id = 1 limit 1;
update oc_storages set numeric_id = 1 where numeric_id=12;

階層を1段深くしなかったとき。

takuya@:nextcloud$ sudo sudo -u www-data php /opt/nextcloud-data
データディレクトリは、絶対パスにする必要があります
設定ファイル内の "datadirectory" の値を確認してください。

データディレクトリが無効です
データディレクトリの直下に ".ocdata" ファイルがあるのを確認してください。

"data" ディレクトリを作成できません
多くの場合、Webサーバーのルートディレクトリに書き込み権限を与えることで直ります。https://docs.nextcloud.com/server/22/go.php?to=admin-dir_permissions を見てください。

参考資料

https://matoken.org/blog/2019/12/03/move-nextcloud-data-directory/