Nextcloudをアップグレードする

Nextcloudから新しいバージョンがリリースされ、アップグレードしたのでその際の手順です。管理者ページからウィザード形式で行う方法もありますが、上手くいかないことが多く手動で行いました。

前提として、ウェブサーバーにはNginx、データベースにはPostgreSQLを利用し、HTTPユーザはwww-data、サードパーティのアプリにCalendarContactsをインストールしています。また、Nextcloudのルートディレクトリは/var/www/に、dataディレクトリは/var/www/nextcloud/内に配置しています。その他詳細はひとつ前のポストを確認ください。基本的にはドキュメントの通りに進めます。cf: Manual Nextcloud Upgrade

まず、管理者アカウントでhttps://example.com/settings/appsにアクセスしサードパーティアプリ(Calendar, Contacts)を無効化します。

次にoccコマンドを用いNextcloudをメンテナンスモードに切り替えます。cf: Using the occ Command

$ su
# cd /var/www/nextcloud
# sudo -u www-data php occ maintenance:mode --on

Backing up Nextcloudを参考にバックアップを作成します。データベースのバックアップの際にはデータベース名、サーバー、データベースのユーザ名、パスワードを適宜指定します。ex: [db_name]: nextclouddb, [server]: localhost, [username]: nextcloud

# cd ..
// Nextcloud backup
# rsync -Aax nextcloud/ nextcloud-dirbkp_`date +"%Y%m%d"`/
// Databese backup
# PGPASSWORD="password" pg_dump [db_name] -h [server] -U [username] -f nextcloud-sqlbkp_`date +"%Y%m%d"`.bak

Nextcloudのダウンロードページからアーカイブファイルをダウンロードし、/var/www/以外の場所で展開します。/var/www/には旧バージョンのNextcloudディレクトリが残っており、名前が衝突するためです。

# cd ~
// x.y.z is version number
# wget https://download.nextcloud.com/server/releases/nextcloud-x.y.z.tar.bz2
# tar -xjf nextcloud-x.y.z.tar.bz2

ウェブサーバーを停止します。

# systemctl stop nginx

旧バージョンのNextcloudディレクトリをnextcloud-oldのようにリネームします。

# mv /var/www/nextcloud /var/www/nextcloud-old-`date +"%Y%m%d"`

先ほど展開した新しいNextcloudを配置します。

# mv ~/nextcloud /var/www/

旧Nextcloudディレクトリからconfig.php, data, calendar, contactsを移行します。

# cd /var/www
# cp nextcloud-old-`date +"%Y%m%d"`/config/config.php nextcloud/config/
# cp -r nextcloud-old-`date +"%Y%m%d"`/data/ nextcloud/
# cp -r nextcloud-old-`date +"%Y%m%d"`/apps/calendar/ nextcloud/apps/
# cp -r nextcloud-old-`date +"%Y%m%d"`/apps/contacts/ nextcloud/apps/

ウェブサーバーを起動させます。

# systemctl start nginx

アップグレードはHTTPユーザで行うので、nextcloudディレクトリ以下全ての所有権を一時的にwww-dataに与えます。

# chown -R www-data:www-data /var/www/nextcloud/

occコマンドを用いNextcloudのアップグレードを行います。

# cd nextcloud
# sudo -u www-data php occ upgrade

アップグレードが始まりしばらく待ちます。問題がなければUpdate successfulと表示されます。

Setting Strong Directory Permissionsのスクリプトを実行し、各ファイルの権限を変更します。

# ~/nextcloud_permission.sh

最後にNextcloudのメンテナンスモードを解除します。

# sudo -u www-data php occ maintenance:mode --off

再びhttps://example.com/settings/appsに管理者アカウントでアクセスし、サードパーティアプリ(Calendar, Contacts)を有効にすればアップグレードは完了です。