プロジェクト

全般

プロフィール

Redmineのバージョンアップ(4.2.x→4.2.y)

バージョン 1 (手動人形, 2023/03/18 08:45) → バージョン 2/2 (手動人形, 2023/03/20 15:14)

{{TOC}}

脆弱性などに対応するため、同一系統のRedmineのバージョンアップ手順を示します。

## 環境

- Ubuntu 20.04 (AWS Lightsailで稼働中)
- 動かしていたRedmine:4.2.9
- Apache 2.4 / mod-passangerでRubyアプリを使用(Ruby 2.7系)
- MySQL 8.0.3

## 作業に備えての前提

- 本手順では「使用するDBの削除」を伴います。作業の際には慎重に行って下さい。
- Webサービスを止める/何も入っていないRedmineが途中でできるため、ユーザアクセスができない状況が発生します。
- また、筆者環境はfiles配下をクラウドストレージにマウントしています。手順は自身の環境に合わせてください。

## さっくりとした手順

1. スナップショットのバックアップ
1. DBのバックアップ
1. redmineのディレクトリを一度mvでリネームしてバックアップ。
1. apache停止
1. redmineのDBを消す。
1. redmineのDBを新たに作る。(ユーザは全て権限があるので問題なし)
1. apache再開
1. ディレクトリを再作成し、新しい空のRedmineを作る。
1. themesとpluginを再配置。filesのシンボリックリンクを貼り替える。
1. themesとpluginを再配置した状態でDBマイグレーション。
1. DBリストア。

### データバックアップ

万一に備え、AWSからインスタンスのスナップショットを取得します。

#### mysqlによるDBバックアップ

```bash
mysqldump -h localhost -u redmine -p --no-tablespaces --single-transaction redmine > redmine_backup.$(date +%Y%m%d).sql
# DB名やDBユーザは自信の環境に合わせます
```

#### データ退避

```bash
cd /var/lib
# Redmineが格納されているディレクトリの親ディレクトリに移動します

ls -ld redmine
# 退避対象のディレクトリがあることを確認します

sudo mv redmine redmine_$(date +%Y%m%d)

ls -ld redmine_$(date +%Y%m%d)
```

#### apache停止

ここでWebサービスを停止するのは、DBを削除するためです。

```bash
systemctl status apache2.service

sudo systemctl stop apache2.service

systemctl status apache2.service
```

#### DB削除

慎重に行って下さい。

```bash
sudo mysql -u root -p
```

```sql
show databases;
/* redmineのDBがあることを確認 */

drop database redmine;

show databases;
/* redmineのDBがないことを確認 */

CREATE DATABASE redmine character set utf8mb4;

show databases;
/* redmineのDBがあることを確認 */

exit
```

### Redmine再インストール

#### ソースダウンロード

```bash
sudo mkdir /var/lib/redmine

sudo chown -R www-data:www-data /var/lib/redmine

sudo -u www-data svn co https://svn.redmine.org/redmine/branches/4.2-stable /var/lib/redmine
# 4.2系の最新安定版をダウンロードします
```

#### 退避させたディレクトリからconfigファイルコピー

```bash
sudo cp -pi /var/lib/redmine_$(date +%Y%m%d)/config/database.yml /var/lib/redmine/config/database.yml

cat /var/lib/redmine/config/database.yml
#中身確認

sudo cp -pi /var/lib/redmine_$(date +%Y%m%d)/config/configuration.yml /var/lib/redmine/config/configuration.yml

cat /var/lib/redmine/config/configuration.yml
#中身確認
```

#### Redmineインストール

```bash
cd /var/lib/redmine

sudo -u www-data bundle install --without development test --path vendor/bundle

sudo -u www-data bundle exec rake generate_secret_token

sudo -u www-data RAILS_ENV=production bundle exec rake db:migrate

sudo -u www-data RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
```

#### apache再開

```bash
systemctl status apache2.service

sudo systemctl start apache2.service

systemctl status apache2.service
```

#### 再開後の仮パスワード作成

対象のRedmineにアクセスします。

IDとパスワードがadmin / admin に戻っている状態のため、仮パスワードを発行します。

#### 退避したディレクトリからデータを再配置

```bash
cd /var/lib/redmine_$(date +%Y%m%d)/plugins

sudo cp -pir ./* /var/lib/redmine/plugins/
# プラグイン一式をコピーします

cd /var/lib/redmine_$(date +%Y%m%d)/public/themes

sudo cp -pir ./* /var/lib/redmine/public/themes/
# テーマ一式をコピーします
```

#### シンボリックリンク貼り替え

これは筆者の環境が

- logディレクトリとfilesディレクトリを別の場所にリンクを張っているための措置です。
- それ以外の場合は上述した `/var/lib/redmine_$(date +%Y%m%d)`からfilesやlogをコピーして下さい。

```bash
cd /var/lib/redmine

sudo rm -rf files

sudo rm -rf log

sudo ln -sf /mnt/wasabi/redmine/files files
# wasabiクラウドストレージを利用しています。

sudo chown -h www-data:www-data files

sudo ln -sf /var/log/redmine log
# ログは/var/log配下で一括管理しています。

sudo chown -h www-data:www-data log
```

### データ再マイグレーション

#### プラグイン再マイグレーション

```bash
cd /var/lib/redmine

sudo -u www-data bundle install

sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production
```

#### apacheリスタート

```bash
systemctl status apache2.service

sudo systemctl restart apache2.service

systemctl status apache2.service
```

#### DBリストア

```bash
cd /hoge
# mysqldumpを行ったディレクトリ

mysql -h localhost -u redmine -p redmine < redmine_backup.$(date +%Y%m%d).sql
# パスワードはredmineインストール時に設定したDBユーザのものです
```

#### apacheリスタート

```bash
systemctl status apache2.service

sudo systemctl restart apache2.service

systemctl status apache2.service
```

### 動作確認

この状態でRedmineに管理者権限でログインします。手順通りなら

- テーマ
- 添付ファイル
- プラグイン
- チケット一覧


などが有効に動いています。
クリップボードから画像を追加 (サイズの上限: 50 MB)