脆弱性などに対応するため、同一系統のRedmineのバージョンアップ手順を示します。
4.1.x→4.1.yの時と異なり、DBの削除を伴わない比較的安全な手段です。
環境¶
- Ubuntu 24.04
- 動かしていたRedmine:5.1.4
- アップデートしたRedmie:5.1.8
- Apache 2.4 / mod-passangerでRubyアプリを使用(Ruby 3.2系)
- MySQL 8.0.3
作業に備えての前提¶
- Webサービスを止めるため、ユーザアクセスができない状況が発生します。
- 利害関係者への事前周知・作業時間の確保は十分に行ってください。(慣れれば20分程度で完了しますが、1時間は取っておいた方が無難です)
- また、筆者環境はfiles配下をクラウドストレージにマウントしています。手順は自身の環境に合わせてください。
さっくりとはいかない手順¶
- (強く推奨)システム全体のバックアップ
- DBのバックアップ
- redmineのディレクトリを一度mvでリネームしてバックアップ。
- apache停止
- ディレクトリを再作成し、新しい空のRedmineを作る。
- themesとpluginを再配置。filesのシンボリックリンクを貼り替える。
- themesとpluginを再配置した状態でDBマイグレーション。
- apache再開
- バージョンアップ確認
システム全体のバックアップ(スナップショット)¶
- AWS
- 仮想サーバ
などで動かしている場合は、この段階でシステム全体のバックアップ(スナップショット)を取ることを強く推奨します。
mysqlによるDBバックアップ¶
- バックアップディレクトリに移動
cd /hoge && pwd
任意のディレクトリを指定します。
- mysqldump
mysqldump -h localhost -u redmine -p --no-tablespaces --single-transaction redmine > redmine_backup.$(date +%Y%m%d).sql
DB名やDBユーザは自分の環境に合わせます。
- mysqldump確認
view redmine_backup.$(date +%Y%m%d).sql
DBが平文で読めることを確認します。
データ退避¶
- ディレクトリ移動
cd /var/lib && pwd
Redmineが格納されているディレクトリの親ディレクトリに移動します。(筆者環境は/home/www-data
)
- Redmine全体ディレクトリ確認
ls -ld redmine
退避対象のディレクトリがあることを確認します。ディレクトリ名は自分の環境に合わせます。
- Redmine待避
sudo mv redmine redmine_$(date +%Y%m%d)
- Redmine待避確認
ls -ld redmine_$(date +%Y%m%d)
ディレクトリがあることを確認します。
apache停止¶
念のため、apacheを停止します。
- apache停止前確認
systemctl status apache2.service
active(running)
を確認します。
- apache停止
sudo systemctl stop apache2.service
- apache停止確認
systemctl status apache2.service
inactive(dead)
を確認します。
Redmineプログラムの配置¶
- Redmineのディレクトリ作成
sudo mkdir /var/lib/redmine
- Redmineディレクトリの権限変更
sudo chown -R www-data:www-data /var/lib/redmine
- Redmineディレクトリの作成確認
ls -ld redmine
ディレクトリがあることと、所有者がwww-dataであることを確認します。
- ソースダウンロード
sudo -u www-data svn co https://svn.redmine.org/redmine/branches/5.1-stable /var/lib/redmine
5.1系の最新安定版をダウンロードします。
退避させたディレクトリからconfigファイルコピー¶
- database.ymlコピー
sudo -u www-data cp -pi /var/lib/redmine_$(date +%Y%m%d)/config/database.yml /var/lib/redmine/config/database.yml
- database.ymlコピー確認
cat /var/lib/redmine/config/database.yml
待避したファイルの内容であることを確認します。
- configuration.yml コピー
sudo -u www-data cp -pi /var/lib/redmine_$(date +%Y%m%d)/config/configuration.yml /var/lib/redmine/config/configuration.yml
- configuration.ymlコピー確認
cat /var/lib/redmine/config/configuration.yml
待避したファイルの内容であることを確認します。
退避したディレクトリからデータを再配置¶
- プラグイン一式のコピー
sudo -u www-data cp -pir /var/lib/redmine_$(date +%Y%m%d)/plugins/* /var/lib/redmine/plugins/
移行元・移行先は自分の環境に合わせます。
- テーマ一式のコピー
sudo -u www-data cp -pir /var/lib/redmine_$(date +%Y%m%d)/public/themes/* /var/lib/redmine/public/themes/
シンボリックリンク貼り替え¶
これは筆者の環境がlogディレクトリとfilesディレクトリを別の場所(wasabiクラウドストレージ)にリンクを張っているための措置です。
それ以外の場合は上述した /var/lib/redmine_$(date +%Y%m%d)
からfilesやlogをコピーして下さい。
- Redmineルートディレクトリに移動
cd /var/lib/redmine && pwd
自分の環境に合わせます。
- filesディレクトリ削除
sudo rm -rf files
- ログディレクトリ削除
sudo rm -rf log
- filesディレクトリにシンボリックリンクを張る
sudo ln -sf /mnt/wasabi/redmine/files files
自分の環境に合わせます。
- filesシンボリックリンクの所有者変更
sudo chown -h www-data:www-data files
- filesシンボリックリンク確認
ls -l files
- filesがシンボリックリンクになっていること
- 所有者がwww-dataであること
を確認します。
- logディレクトリにシンボリックリンクを張る
sudo ln -sf /var/log/redmine log
- logシンボリックリンクの所有者変更
sudo chown -h www-data:www-data log
- logシンボリックリンク確認
ls -l log
- logがシンボリックリンクになっていること
- 所有者がwww-dataであること
を確認します。
DBマイグレーション¶
- Redmineルートディレクトリに移動
cd /var/lib/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
- DBマイグレーション(プラグイン)
sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production
- キャッシュクリア
sudo -u www-data RAILS_ENV=production bundle exec rake tmp:cache:clear
- セッションクリア
sudo -u www-data RAILS_ENV=production bundle exec rake tmp:sessions:clear
apache再起動¶
- apache再起動前確認
systemctl status apache2.service
inactive(dead)
を確認します。
- apache再起動
sudo systemctl start apache2.service
- apache再起動確認
systemctl status apache2.service
active(running)
を確認します。
動作確認¶
この状態でRedmineに管理者権限でログインします。手順通りなら
- テーマ
- 添付ファイル
- プラグイン
- チケット一覧
などが有効に動いていて、正常に稼働します。
バージョンアップ後の作業¶
- 待避したファイルの削除/バックアップ
/var/lib/redmine_$(date +%Y%m%d)
一式を削除、または任意の方法でバックアップします。
トラブルシューティング¶
bundle install
が終わらない
Installing...
の表示で止まっているように見えても、実際にはCPUを消費して動作していることがある(ネイティブ拡張機能のコンパイル)。top
コマンドでcc1plus
などのプロセスが動いていないか確認する。
"Something went wrong" エラー¶
Redmineのアプリケーション起動エラー。原因はログに記録されている。
- まず
/var/lib/redmine/log/production.log
を確認する。 - 上記にログがなければ、
/var/log/apache2/error.log
を確認する。
ログから見る主な原因の例¶
-
プラグインの非互換: Redmine本体の機能とプラグインが競合している場合がある (
Overwriting existing method
警告など)。 -
gemのバージョン競合: Ruby本体に付属のgemと、プラグインが要求するgemのバージョンが異なると起動に失敗することがある (
base64
の競合など)。この場合は、Gemfile
でバージョンを明示的に指定するなどの対策が必要。