脆弱性などに対応するため、同一系統のRedmineのバージョンアップ手順、その5.1版での書き直しです。
環境
- Ubuntu 22.04
- 動かしていたRedmine:5.1.1
- Apache 2.4 / mod-passangerでRubyアプリを使用(Ruby 3.0系)
- MySQL 8.0.3
作業に備えての前提
- 本手順では「使用するDBの削除」を伴います。作業の際には慎重に行って下さい。
- Webサービスを止める/何も入っていないRedmineが途中でできるため、ユーザアクセスができない状況が発生します。
作業前のチェック
以下が必須です。
- [ ] 作業影響について、利害関係者に周知している。
- [ ] MySQLの管理者アカウントを所持している。
- [ ] サーバに十分な空き容量がある。
- [ ] 「一度DBを削除する」ことについて、作業者/確認者が重要度を理解している。
さっくりとはならない手順
- スナップショットのバックアップ (推奨)
- DBのバックアップ
- redmineのディレクトリを一度mvでリネームしてバックアップ。
- apache停止
- redmineのDBを消す。
- redmineのDBを新たに作る。(ユーザは全て権限があるので問題なし)
- apache再開
- ディレクトリを再作成し、マイナーバージョンが上がったRedmineを作る。
- themesとpluginを再配置。
- themesとpluginを再配置した状態でDBマイグレーション。
- DBリストア。
- 動作確認。
システム全体のバックアップ(推奨)
万一に備え、システム全体のバックアップを取ることを推奨します。AWSや仮想サーバ等の場合は、インスタンスをまるごとバックアップしておくと良いでしょう。
mysqldumpによるDBバックアップ
- 保存ディレクトリに移動
cd /hoge
任意のバックアップディレクトリを指定します。
mysqldump -h localhost -u redmine -p --no-tablespaces --single-transaction redmine > redmine_backup.$(date +%Y%m%d).sql
DB名やDBユーザは自分の環境に合わせます。
データ退避
- Redmineのルートディレクトリの上に移動
cd /home/www-data && pwd
Redmineが格納されているディレクトリの親ディレクトリに移動します。筆者環境は/home/www-dataなので、自分の環境に合わせます。
- ディレクトリがあることを確認
ls -ld redmine
退避対象のディレクトリがあることを確認します。
- リネームして退避
sudo mv redmine redmine_$(date +%Y%m%d)
- 退避確認
ls -ld redmine_$(date +%Y%m%d)
ファイルがあることを確認します。
apache停止
ここでWebサービスを停止するのは、DBを削除するためです。
- apache停止前確認
systemctl status apache2.service
active(running)を確認します
- apache停止
sudo systemctl stop apache2.service
- apache停止後確認
systemctl status apache2.service
inactive(dead)を確認します
DB削除と再作成
この作業は慎重に行って下さい。
- 管理者権限でmysqlにログイン
sudo mysql -u root -p
- DB確認
SHOW DATABASES;
redmineのDBがあることを確認します。
- RedmineのDBを削除
DROP DATABASE redmine;
DB名は再確認してください。
- RedmineのDB削除確認
SHOW DATABASES;
RedmineのDBがないことを確認します。
- 空のDB再作成
CREATE DATABASE redmine character set utf8mb4;
同じDBを作り直します。
- 空のDB再作成確認
SHOW DATABASES;
作成したDBがあることを確認します。
EXIT
ソースダウンロード
- ディレクトリ作成
sudo mkdir /home/www-data/redmine
自分の環境に合わせます。
- ディレクトリの所有者変更
sudo chown -R www-data:www-data /home/www-data/redmine
- svnダウンロード
sudo -u www-data svn co https://svn.redmine.org/redmine/branches/5.1-stable /home/www-data/redmine
5.1系の最新安定版をダウンロードします
退避させたディレクトリからconfigファイルコピー
- 退避させたRedmine→ 新規に作成したRedmineにコンフィグをコピー
sudo cp -pi /home/www-data/redmine_$(date +%Y%m%d)/config/database.yml /home/www-data/redmine/config/database.yml
コピー元・コピー先は自分の環境に合わせます。
- コンフィグの中身確認
cat /home/www-data/redmine/config/database.yml
コピーされていることを確認します。
- 退避させたRedmine→ 新規に作成したRedmineにメール設定情報などをコピー
sudo cp -pi /home/www-data/redmine_$(date +%Y%m%d)/config/configuration.yml /home/www-data/redmine/config/configuration.yml
コピー元・コピー先は自分の環境に合わせます。
- 設定情報の中身確認
cat /home/www-data/redmine/config/configuration.yml
Redmineインストール
- ディレクトリ移動
cd /home/www-data/redmine
- bundle
sudo -u www-data bundle install --without development test --path vendor/bundle
- シークレットトークン発行
sudo -u www-data bundle exec rake generate_secret_token
- DBマイグレーション
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再開
- apache再開前確認
systemctl status apache2.service
inactive(dead)を確認します
- apache再開
sudo systemctl start apache2.service
- apache再開確認
systemctl status apache2.service
active(runnning)を確認します
再作成後の仮パスワード作成
対象のRedmineにアクセスします。
IDとパスワードがadmin / admin に戻っている状態のため、ログイン後、仮パスワードを発行します。
退避したディレクトリからデータを再配置
- 退避したRedmineのプラグインディレクトリに移動
cd /home/www-data/redmine_$(date +%Y%m%d)/plugins
- プラグイン一式のコピー
sudo cp -pir ./* /home/www-data/redmine/plugins/
- 退避したRedmineのテーマディレクトリに移動
cd /home/www-data/redmine_$(date +%Y%m%d)/public/themes
- テーマ一式のコピー
sudo cp -pir ./* /home/www-data/redmine/public/themes/
いくつかのファイルを上書きするか求められるので、yで返します。
- 退避したRedmineの添付ファイル格納ディレクトリに移動
cd /home/www-data/redmine_$(date +%Y%m%d)/files
- 添付ファイル一式のコピー
sudo cp -pir ./* /home/www-data/redmine/files/
- 退避したRedmineのログディレクトリに移動
cd /home/www-data/redmine_$(date +%Y%m%d)/log
- ログ一式のコピー
sudo cp -pir ./* /home/www-data/redmine/log/
プラグイン再マイグレーション
- Redmineのルートディレクトリに移動
cd /home/www-data/redmine
- bundle
sudo -u www-data bundle install
- プラグインのDBマイグレーション
sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production
apacheリスタート
- apache再開前確認
systemctl status apache2.service
active(running)を確認します
- apache再開
sudo systemctl restart apache2.service
- apache再開確認
systemctl status apache2.service
active(runnning)を確認します
DBリストア
- mysqldumpを行ったディレクトリに移動
cd /hoge && pwd
- DBリストア
mysql -h localhost -u redmine -p redmine < redmine_backup.$(date +%Y%m%d).sql
パスワードはredmineインストール時に設定したDBユーザのパスワードです。
apacheリスタート
- apache再開前確認
systemctl status apache2.service
active(running)を確認します
- apache再開
sudo systemctl restart apache2.service
- apache再開確認
systemctl status apache2.service
active(runnning)を確認します
動作確認
この状態でRedmineに管理者権限でログインします。手順通りなら
- テーマ
- 添付ファイル
- プラグイン
- チケット一覧
などが有効に動いています。
また、管理>情報へと進み、バージョンが上がっていることを確認します。
作業後-退避前のディレクトリ一式を削除-
- 退避させたディレクトリの直上に移動
cd /home/www-data
自分の環境に合わせます。
- 退避ディレクトリ確認
ls -ld redmine_$(date +%Y%m%d)
ディレクトリがあることを確認します。
- 退避ディレクトリ削除
sudo rm -rf redmine_$(date +%Y%m%d)
- 退避ディレクトリ確認
ls -ld redmine_$(date +%Y%m%d)
ディレクトリが無いことを確認します。
作業後-MySQLのダンプファイルを削除-
- mysqldumpを行ったディレクトリに移動
cd /hoge && pwd
- ダンプファイル確認
ls -l redmine_backup.$(date +%Y%m%d).sql
ファイルがあることを確認します。
- ダンプファイル削除
rm redmine_backup.$(date +%Y%m%d).sql
- ダンプファイル削除確認
ls -l redmine_backup.$(date +%Y%m%d).sql
ファイルが無いことを確認します。
備考
Redmineはバージョンさえ合っていれば
- DB
- 設定ファイル
- 添付ファイル
- プラグイン
- テーマ
- ログ
を移行することで、別のサーバへの引っ越しが可能になります。