データ・ディレクトリを変更する。
データの場所だけの変更なら割と楽
occ 初期チェックが不安定なのでちょっと壊れたりするけど概ね問題なく移動できる。
nextcloud のデータ・ディレクトリを別空間にすることで、phpのソースコードときれいに分離するので管理が楽になる。nextcloudの動作チェック時にphpのソースコードをgrep で検索しやすくなる。
手順
- メンテナンス・モードをON
- データベースのバックアップ
- ディレクトリを移動(またはコピー)
- 設定の書き換え
- メンテナンス・モード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/