Nextcloud 18にアップグレード

owner203の世界にはNextcloudを導入しています。Nextcloud 15から使い続けていて、無料のプライベートクラウドとして大変お世話になっています。Nextcloud 18もリリースしてしばらくたっていましたので、今回はNextcloudメジャーバージョンアップのやり方をメモして、今後自分の参考にもなると思います。

旧Nextcloudのルートフォルダを/var/www/nextcloudとします。

アップグレード前の準備

メンテナンスモードON

まず、メンテナンスモードをONにします。

sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on

Apacheを停止

そしてApacheを一旦停止します。

sudo systemctl stop apache2.service

フォルダを改名

旧Nextcloudフォルダを別の名前に改名して、元の名前で新フォルダを作成します。

sudo mv /var/www/nextcloud /var/www/nextcloud-old
sudo mkdir /var/www/nextcloud

これで準備は完了です。

新バージョンを展開

新バージョンをダウンロード

テンポラリフォルダに新バージョンをダウンロードします。

cd /tmp
wget https://download.nextcloud.com/server/releases/nextcloud-18.0.0.tar.bz2 #最新バージョンは公式HPで確認できる
tar -xjf nextcloud-18.0.0.tar.bz2 #ファイルを展開する

展開したすべてのファイルを先ほど作成した新フォルダにコピーします。

sudo cp -a /tmp/nextcloud/. /var/www/nextcloud

設定ファイルをコピー

旧Nextcloudフォルダから設定ファイルとデータフォルダをコピーします。

sudo cp /var/www/nextcloud-old/config/config.php /var/www/nextcloud/config/
sudo mkdir /var/www/nextcloud/data
sudo cp -a /var/www/nextcloud-old/data/. /var/www/nextcloud/data

権限を設定

新Nextcloudフォルダの権限を設定します。

sudo chown -R www-data:www-data /var/www/nextcloud
sudo find /var/www/nextcloud/ -type d -exec chmod 750 {} \;
sudo find /var/www/nextcloud/ -type f -exec chmod 640 {} \;

これで新バージョンのファイル展開は完了です。

ConoHa Object Storageに関する修正

owner203はNextcloudのメインストレージとしてConoHa Object Storageを使っています。このままアップグレードを実行するとInternal Server Errorになってしまうため、予めNextcloudのソースコードを修正する必要があります。ConoHa Object Storageを使っていない場合はこれをやる必要がありません。

この問題の原因は、objectStoreV1関数でConoHa Object Storageを操作する時に、手動でcatalogNameを「Object Storage Service」に指定する必要がありますが、修正しないとNextcloudはデフォルトのcatalogName(デフォルト値は「swift」)しか使わないことです。この文章にもやり方を書いてありますが、要するにobjectStoreV1関数にパラメータ「$this->params」を渡せばいいということです。これはsedコマンドで一発でできます。

sudo -u www-data sed -i 's/objectStoreV1()/objectStoreV1($this->params)/gI' /var/www/nextcloud/lib/private/Files/ObjectStore/SwiftFactory.php

参考としてowner203のオブジェクトストレージ設定をここに載せます。

/var/www/nextcloud/config/config.php

#前略...
'objectstore' =>
array (
  'class' => '\OC\Files\ObjectStore\Swift',
  'arguments' =>
  array (
    'username' => 'gncu00000000',
    'password' => 'API_PASSWORD',
    'container' => 'CONTAINER_NAME',
    'region' => 'tyo2',
    'url' => 'https://identity.tyo2.conoha.io/v2.0',
    'tenantName' => 'gnct00000000',
    'serviceName' => 'Object Storage Service',
    'catalogName' => 'Object Storage Service',
    'urlType' => 'publicURL',
  ),
),
#後略...

アップグレードを実行

アップグレード

OCCでアップグレードを実行します。

sudo -u www-data php /var/www/nextcloud/occ upgrade

画面に従ってアップグレードします。

Apacheを起動

アップグレードが終わったらApacheを起動します。

sudo systemctl start apache2.service

メンテナンスモードOFF

メンテナンスモードをOFFにします。

sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off

設定画面を確認

管理者でNextcloudにログインして、設定画面でアップグレードを確認します。URLは https://サーバードメインまたはIPアドレス/settings/admin/overview になります。場合によって、アップグレード後のデータベースの修正などを行う必要があります。基本的に指示に従えばすぐにできます。修正後はページを再読み込みして確認します。すべてのチェックに合格すればOKです。