Redmine3.3.4をRedmine3.4.5へアップグレード

# Redmine3.3.4をRedmine3.4.5へアップグレード

## バージョンアップ環境情報

### 既存環境

**Redmineの管理＞情報より**

```
Environment:
  Redmine version                3.3.4.stable.16840
  Ruby version                   2.3.3-p222 (2016-11-21) [x86_64-linux]
  Rails version                  4.2.7.1
  Environment                    production
  Database adapter               PostgreSQL
SCM:
  Subversion                     1.7.14
  Git                            1.8.3.1
  Filesystem                     
Redmine plugins:
  no plugin installed
```

**その他**

+ Redmineのルートディレクトリ：`/var/lib/redmine` -> `/var/lib/redmine-3.3`

### 新規環境

**Redmineの管理＞情報より**

```
Environment:
  Redmine version                3.4.5.stable.17297
  Ruby version                   2.3.3-p222 (2016-11-21) [x86_64-linux]
  Rails version                  4.2.8
  Environment                    production
  Database adapter               PostgreSQL
SCM:
  Subversion                     1.7.14
  Git                            1.8.3.1
  Filesystem                     
Redmine plugins:
  no plugin installed
```

**その他**

+ Redmineのルートディレクトリ：`/var/lib/redmine` -> `/var/lib/redmine-3.4.5`

## 手順メモ

### 既存環境のデータをバックアップ

万が一アップグレードに失敗した場合、元に戻せるようにバックアップを取得しておきます。

#### PostgreSQLのデータを`pg_dump`でバックアップ

PostgreSQLへの接続情報などは、`/var/lib/redmine/config/database.yml`で確認できます。

```
production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "******"
  encoding: utf8
```

上記内容を参考に、以下のコマンドを発行して、データベースのバックアップを取得します。
バックアップ取得は`/home/work`のディレクトリがある前提で行います。

```shell
# /usr/bin/pg_dump -U <username> -h <hostname> -Fc --file=redmine.sqlc <redmine_database>
cd /home/work
/usr/bin/pg_dump -U redmine -h localhost -Fc --file=redmine.sqlc redmine
```

#### 添付ファイルのバックアップ

Redmineにアップロードされているファイルを丸ごとバックアップします。
ファイルの場所情報は、`/var/lib/redmine/config/configuration.yml`で確認できます。
`attachments_storage_path`の定義がなければ、デフォルトの`files/`配下が格納先です。

```shell
cd /home/work
cp -rp /var/lib/redmine/files ./
```

### Redmine3.3をRedmine3.4へバージョンアップ

バージョンアップの手順はいくかのパターンがあるみたいですが、今回はSVNのリポジトリから取得するやり方でバージョンアップを実施します。

#### 現在のRedmine3.3のSVN情報を念のため確認

```shell
cd /var/lib/redmine
svn info

パス: .
Working Copy Root Path: /var/lib/redmine
URL: http://svn.redmine.org/redmine/branches/3.3-stable
リポジトリのルート: http://svn.redmine.org/redmine
リポジトリ UUID: e93f8b46-1217-0410-a6f0-8f06a7374b81
リビジョン: 16840
ノード種別: ディレクトリ
準備中の処理: 特になし
最終変更者: jplang
最終変更リビジョン: 16746
最終変更日時: 2017-07-02 20:55:40 +0900 (日, 02  7月 2017)
```

#### httpdのサービスを停止しておく

```shell
systemctl stop httpd.service
```

#### Redmine3.3の環境を退避してシンボリックリンクにより`/var/lib/redmine`でアクセスできるようにしておく

今後のバージョンアップも考慮して、容易にバージョンアップできるようにするために、シンボリックリンクでRedmineが動作するように環境を整備しておく。

```shell
cd /var/lib
mv redmine redmine-3.3
ln -s /var/lib/redmine-3.3 /var/lib/redmine
```

シンボリックリンク対応が完了したら、一応httpdを起動して接続できることを確認して、大丈夫だったらまたhttpd停止する。

#### Redmine3.4用のフォルダ準備

Redmine3.4.5のバージョンを利用するため、Redmine3.4.5用のフォルダを準備します。
フォルダは、Redmine3.3の中身含めて全てコピーして利用します。

```shell
cd /var/lib
cp -rp redmine-3.3 redmine-3.4.5
```

#### SVNのリポジトリを`3.3-stable`から`3.4-stable`に切り替える

```shell
cd /var/lib/redmine-3.4.5
svn switch http://svn.redmine.org/redmine/branches/3.4-stable
```

#### `bundle`コマンドを利用してアップグレード

```shell
cd /var/lib/redmine-3.4.5
bundle update
bundle exec rake db:migrate RAILS_ENV=production
bundle exec rake tmp:clear RAILS_ENV=production
```

#### シンボリックリンクの差し替え

```shell
cd /var/lib
unlink ./redmine
ln -s /var/lib/redmine-3.4.5 /var/lib/redmine
```

#### httpdを開始して動作確認

```shell
systemctl start httpd.service
```

以上でアップグレード終了！