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に管理者権限でログインします。手順通りなら
- テーマ
- 添付ファイル
- プラグイン
- チケット一覧
などが有効に動いています。
脆弱性などに対応するため、同一系統の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に管理者権限でログインします。手順通りなら
- テーマ
- 添付ファイル
- プラグイン
- チケット一覧
などが有効に動いています。