Nextcloudのデータディレクトリは既定値ではNextcloudのすぐ下の data
ディレクトリになります.しかしここはウェブサーバのドキュメントルート以下になってしまい設定をミスするとデータディレクトリが一般公開されてしまう可能性があり少し怖いです.
そこでNextcloud導入時に設定ファイルの config/config.php
で datadirectory
にウェブサーバドキュメントルートの外にNextcloudデータを設定します.
今回デフォルトのウェブサーバドキュメントルート内のまま運用されているNextcloudがあったのでそれをウェブサーバドキュメントルート外に移動してみました.
ディスクを増設してそちらにデータを移すなどの際にも同じ手順でデータ移行できると思います.
今回の例でのパスはこんな感じです.
- Nextcloud導入ディレクトリ : /var/www/nextcloud
- 旧Nextcloud データディレクトリ : /var/www/nextcloud/data
- 新Nextcloud データディレクトリ : /var/data/nextcloud/data
Important
|
インストール後のデータディレクトリの移動は公式ではサポートされていません. |
ファイルのコピー
同一のファイルシステム間であれば mv
commandで一瞬ですが,今回はファイルシステムを跨いでいるので時間がかかります.
ダウンタイムを短くしたいのでNextcloud動作状態で一度データをコピーしてその後rsyncで差分のみコピーすることにします.
1度目のコピー
$ sudo cp -a /var/www/nextcloud/data /var/www/nextcloud/
rsyncでデータ同期
1度目のデータコピーに時間がかかったのでrsyncで同期
$ sudo rsync -avc /var/www/nextcloud/data /var/www/nextcloud/
バックグラウンドジョブを停止(恐らくこの手順は不要)
次の手順でメンテナンスモードに移行するので不要だと思うけど念の為バックグラウンドジョブをcrontabで設定しているのを停止(コメントアウト)しておく.(Webcronの場合も止めたほうがいいかも.AJAXの場合は恐らく不要)
$ sudo -u www-data crontab -e
メンテナンスモードに移行
ここからNextcloudは利用できなくなります.
$ sudo -u www-data php ./occ maintenance:mode --on
データ同期
-c
オプションも付けたほうがいいけどデータが大きいと時間がかかるので今回はなしであとでチェックすることにする.
$ sudo rsync -av /var/www/nextcloud/data /var/www/nextcloud/
データベース書き換え
Nextcludのデータベース内のファイルディレクトリ情報を書き換えます.書き換え前に念の為データベースのバックアップも取っておきます.
$ sh -c "umask 266 ; mysqldump -uroot -p --opt --all-databases --events | xz > mysqlbackup-`date +\%F_\%T_\%s_$`.sql.xz"
$ mysql -unextcloud -p mysql> use nextcloud; mysql> update oc_storages set id='local::/var/data/nextcloud/data/' where id='local::/var/www/nextcloud/data/'; mysql> quit;
設定ファイル書き換え
Nextcloudの設定ファイルの config/config.php
の中の datadirectory
を新しいパスに書き換えます.
'datadirectory' => '/var/data/nextcloud/data',
メンテナンスモードをoffにする
$ sudo -u www-data php ./occ maintenance:mode --off
動作確認
Nextcloudにログインしてファイルディレクトリが閲覧できることを確認する.
バックグラウンドジョブを設定
バックグラウンドジョブをcrontabで再設定
$ sudo -u www-data crontab -e
旧データの削除
しばらく運用して問題ないようなら旧データを削除する.
$ sudo rm -rf /var/www/nextcloud/data
生ディスクなんかだと secure-delete
とか使うと少し安心.でも確実じゃないし時間かかるので暗号化fsを推奨.
$ sudo nice -20 ionice -c1 -n0 srm -r /var/www/nextcloud/data
環境
$ sudo -u www-data php ./occ -V Nextcloud 17.0.1 $ dpkg-query -W php7.2-common mysql-server mysql-server 5.7.28-0ubuntu0.18.04.4 php7.2-common 7.2.24-0ubuntu0.18.04.1 $ lsb_release -dr Description: Ubuntu 18.04.3 LTS Release: 18.04 $ uname -m x86_64