ownCloudをoccを使わずにアップデートする

# <i class="fa fa-cubes"></i> 前置き
※よくあることが書いてます。手順を知りたい方はスキップ
## <i class="fa fa-pencil"></i> 前提・背景
- ここで記載する**ownCloud**とはownCloud Serverのことです
- ownCloudを既に利用中でアップデート手順を知りたい
- アップデートにSSHを利用したくない(or利用できない)
- **サーバーサイド暗号化が有効な状態では実践していません。データの破損の可能性などが想定できないため、実施の際はご留意ください**
- [公式ページ(英語)](https://doc.owncloud.org/server/latest/admin_manual/maintenance/manual_upgrade.html)の記載と実践結果に基いて書いてますが、環境によって違う結果もあり得ますので、あくまでも実施は自己責任でお願いします

## <i class="fa fa-pencil"></i> アップデートの必要性について
ownCloudに脆弱性が発見された際、脆弱性に対応した最新バージョンにアップデートすることが求められます
基本的にはownCloud内で自動アップデートを有効にしていれば問題ないはずですが実施されない場合は手動でアップデートが必要になります

## <i class="fa fa-pencil"></i> コンソールコマンドoccを使わずにアップデート
ownCloudをアップデートする際は、コンソールコマンドの**occ**を使う手順が一般的です
しかし、レンタルサーバ等で利用していて、sshが提供されておらずコンソールコマンドの**occ**を使えないケースがあります
ここでは**occ**を使わない手順について記載します

## <i class="fa fa-pencil"></i> 使うもの
- FTPクライアントソフト(FFFTPやFilezillaなど)
- Webブラウザー
- 圧縮解凍ソフト(zip形式が解凍できれば良い)
- エディターソフト(メモ帳など)

## <i class="fa fa-pencil"></i> ownCloudの仕様と注意ポイント
### 複数のメジャーリリースバージョンの存在
ownCloudは複数のメジャーリリースバージョンがあります。
また、各リリースバージョンについてサポート期間がある限り、脆弱性対応バージョンが更新されます
### 複数のメジャーリリースバージョンを飛ばしたアップデートは不可
現在のバージョンからアップデートをする際、この複数のメジャーリリースバージョンを順次適用する必要があります

## <i class="fa fa-list-alt"></i> 簡単な流れ
以下で記載する作業の流れを簡単に書きます

1. アップデート準備
2. ownCloudを利用不可状態に変更
3. データバックアップ
4. アップデート作業
    5. 新バージョンのアーカイブを設置
    6. データを現行パスから新バージョンのパスへ移行
    7. ブラウザからアップデート実行
5. ownCloudを利用可能状態に変更
6. 残処理

# <i class="fa fa-files-o" aria-hidden="true"></i> 手順
## <i class="fa fa-pencil"></i> 手順における前提
|項目|値|
|:--|:--|
|現在のバージョン |8.2.7|
|作業後のバージョン|9.1.4|
|ownCloudインストールパス|/htdocs/owncloud/|

## <i class="fa fa-pencil"></i> アップデート準備
### 現在のownCloudのバージョンの確認
※ 既に把握している場合は次項へ

1. Webブラウザーでowncloudにログイン
2. 「管理」ページの一番下の「バージョン」を確認

### owncloudのアーカイブを取得
https://owncloud.org/changelog/ にアクセス
目的のリリースバージョンの最新版のzipファイルをダウンロードする
現在のバージョンから、目的のバージョンまでにリリースバージョンがある場合はそのzipファイルもダウンロードする
今回は、現在が**8.2.7**で目的のバージョンが**9.1.4**なので、
ダウンロード必要なzipファイルは、
- 9.0.xのzipファイル
- 9.1.4のzipファイル
となります

### アーカイブファイルの準備
1. 一番若いバージョンのzipファイル(今回は9.0.xのzipファイル)を解凍します
2. 解凍後はowncloudというフォルダができます
3. 区別する為、フォルダ名を**oc90**に変更しておきます
4. oc90の中にあるconfigというフォルダは不要なので削除しておきます

## <i class="fa fa-pencil"></i> ownCloudを利用不可状態に変更
おすすめな順に方法を記載します
### アクセス制限をかける場合
ご契約のレンタルサーバーの管理機能などでアクセス制限をする
※ この場合はconfigファイルの編集やディレクトリ名変更が不要です

### ownCloudのメンテナンスモードへの切替えをする場合
1. /htdocs/owncloud/config/config.phpをFTPでダウンロード
2. 記載に'maintenance'行がある場合は、**false**を**true**へ変更し保存
3. 編集後のconfig.phpを元の場所へアップロード

もし元のconfig.phpにmaintenanceの行の記載が無い場合は、

```php
  'maintenance' => true,
```
を他の項目に倣って追記してください

### ownCloudディレクトリの名称を変える場合
FTPソフトでサーバーへ接続し、「owncloud」を「owncloud-old」へ変更

この操作により、従来のURLへアクセスされた場合、**404 Not Found**の状態となりますので利用者へのアナウンスをしておきましょう（びっくりされます）

## <i class="fa fa-pencil"></i> 作業前のバックアップ
ここでは詳細な手順を省略させてもらいます
- データベース(phpmyadminでエクスポート）
- owncloudデータ（サーバー上で圧縮またはPCに丸ごとダウンロード）

## <i class="fa fa-pencil"></i> アップデート作業
### FTPで新バージョンのデータをアップロード
**oc90**を同じ階層にアップロードします
今回の場合はアップロード後「/htdocs/oc90」となります

転送モードは**バイナリモード**がおすすめです。

### 現在のデータを移行する
1. **owncloud/config**を**oc90/config**へ移動させます
2. **owncloud/data**を**oc90/**へ移動させます

#### 補足
3rd partyアプリを利用してる場合は**apps**を差し替え
テーマを変更している場合は**themes**を差し替え

※ 前工程で現バージョンを「owncloud-old」に変更してる場合は読み替えてください

### configファイル内のメンテナンス設定の解除
前工程で**oc90/config/config.php**にメンテナンス設定をした場合は、前工程と同様に、**true**を**false**に変更してください

### 新バージョンのディレクトリ名の変更
現行バージョンのowncloudが**owncloud**として存在している場合は、**owncloud**を**owncloud-old**に名称を変更

**oc90**を**owncloud**に変更
この作業後にWebブラウザにてowncloudへアクセスすると
「ownCloudはバージョンx.x.xにアップデートされます」というメッセージが表示されますので**アップデートを開始**ボタンを押します

### アップデート実施状態の確認
Webブラウザ上でアップデートの進捗が表示されます
データサイズやデータ数などにより長時間かかる場合があるとのことです

正常に完了した場合はF5キーなどで更新をするとログイン画面が表示されます

## <i class="fa fa-pencil"></i> ownCloudを利用可能状態に変更
### 作業前にアクセス制限をかけた場合
アクセス制限設定を解除します

### ownCloudのメンテナンスモードへの切替えた場合
アップデートツールにてメンテナンスモードは解除されてますので作業は不要です

### ownCloudディレクトリの名称を変えた場合
owncloud-oldというディレクトリが残っている状態です
次項の残処理で触れます

# <i class="fa fa-cubes"></i> 残処理
移行元のディレクトリとして**owncloud-old**が残っていますが
データや設定などが無い状態の為、移行後のownCloudの動作で問題がなければ削除しても良いようです。
移行し忘れたテーマ（themes）などがあれば後からコピーが可能のようです。

# <i class="fa fa-cubes"></i> 複数メジャーリリースバージョンの場合
大変ですが上記工程を必要分だけ繰り返すことになります（汗）
（一度にバージョンアップできたらいいのですが）