ダメ元でやってみようと思ってやってみたらできた。笑
(当初は、【STEP1】マイナー更新(3.4.x)【STEP2】メジャーの一番古いのに更新(4.0.x)【STEP3】メジャー最新(4.2.x)に順次更新していけるところまでいってみようと考えてましたが、Redmine、Ruby、Railsの関係とかややこしかったので面倒になりました。幸運でした。)
環境(移行元、移行先)
# | 移行元 | 移行先 |
---|---|---|
Redmine | 3.1.0 | 4.2.2 |
Ruby | 2.0.0 | 2.7.4 |
Rails | 4.2.3 | 5.2.6 |
Webサーバ | Apache2.4 | Apache2.4 |
Appサーバ | passenger 5.0.30 | Unicorn 6.0.0 |
OS | Amazon Linux2(x86_64) | Amazon Linux2(ARM64) |
DB | RDS/MySQL8.0 | RDS/MySQL8.0 |
※プラグインは、view_customizeのみ
※Themeは、bleuclair
※【追記】さほど期待してなかったのですが、かなり高速になって喜んでもらってます。(体感では、チケット更新の時間が3秒から0.5秒くらい)。PassengerとUnicornはそんな違いが出るものではない(マイクロ秒の世界)といいますし、Rubyの性能向上はRailsのような巨大フレームワークでは体感できるレベルではないといいますし、システム(CPUがIntelからARM/Gravion)の性能向上はAWSの説明では40%といいますし、データベースは同じです。するとRedmineの実装が最適化された?
謝辞
以下の記事にとてもお世話になりました。感謝です
一部読み替え(サブディレクトリアクセスでなくドメインルートでアクセス)がありましたが、ほぼコピペでできました。
Amazon Linux 2でRedmineを立ち上げる方法 | 森林ソフト
手順
Apacheインストール
省略
MySQLインストール
省略
データベースバックアップ(複製)
当方は、ダンプ取得して、それを同じDBサーバ上の違うデータベースにリストアしました。
rbenvとruby-buildをインストール
準備
yum -y install git gcc openssl-devel mysql-devel
rbenvインストール
git clone https://github.com/rbenv/rbenv.git /var/lib/rbenv
cd /var/lib/rbenv && src/configure && make -C src
echo 'export RBENV_ROOT=/var/lib/rbenv' >> ~/.bash_profile
echo 'export PATH="$RBENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
# いったんExitしてbash_profile設定読み込み
exit
sudo su -
ruby-buildインストール
mkdir -p "$(rbenv root)"/plugins
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
rbenv-doctorを実行してrbenvのインストール完了
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-doctor | bash
Rubyインストール
現時点(2021年9月20日)では、RedmineはRuby3.x系に対応していないので2系の最新を利用することとする。
Redmineと対応Rubyバージョン — Redmine.JP
インストール可能なRubyを確認
rbenv install --list-all | grep 2.7.
2.7.4があったのでインストール
rbenv install 2.7.4
rbenv global 2.7.4
ruby -v
Redmineインストール/設定
ダウンロード
公式サイトから圧縮されたRedmineファイル一式をダウンロードします。ruby2.7.4はRedmineの現時点の最新版(4.2.2)にしました。
なお、rubyとredmineの互換性はRuby and Ruby on Rails version compatibilityで確認しました。
配置(/var/lib/redmine
)
移行の設定の記述はダウンロードしたファイルを解凍してルートディレクトリ名をredmine
にリネームして、/var/lib/
の下に配置した前提の記述です。
データベース接続設定(/config/database.yml
)
cd /var/lib/redmine/config
cp database.yml.example database.yml
vi database.yml
Unicornインストール
cd /var/lib/redmine
echo 'gem "unicorn"' >> Gemfile.local
gem install bundler
bundle install --without development test
gem list | grep unicorn
ImageMagickインストール
yum -y install ImageMagick
セッションCookie用のトークンを作成する/Session store secret generation
bundle exec rake generate_secret_token
データベースMigration
以下のコマンドを実行します。3.1と4.2.2はかなりスキーマに差分があるので、多くのSQLが実行されました。
RAILS_ENV=production bundle exec rake db:migrate
アップロードファイル用のディレクトリ等のパーミッションを変更/File system permissions
cd /var/lib/redmine
mkdir -p tmp tmp/pdf public/plugin_assets
chown -R apache:apache files log tmp public/plugin_assets
chmod -R 755 files log tmp public/plugin_assets
動作確認/Test the installation
bundle exec rails server webrick -e production
上記を実行するとポート3000で待受けされるので、curlでリクエストして応答(301リダイレクトでした)があればOKです
curl localhost:3000
RedmineをUnicornで動かせるようにする。
Unicornの設定ファイルを作成
cd /var/lib/redmine
vi config/unicorn.rb
listen 3000
worker_processes 2
pid "/var/lib/redmine/log/unicorn.pid"
stderr_path "/var/lib/redmine/log/unicorn.log"
stdout_path "/var/lib/redmine/log/unicorn.log"
Redmineをサービス化する
vi /etc/systemd/system/redmine.service
```conf:redmine.service
[Unit]
Description=Redmine
After=mysqld.service
[Service]
WorkingDirectory=/var/lib/redmine
Environment=RAILS_ENV=production
SyslogIdentifier=redmine
PIDFile=/var/lib/redmine/tmp/pids/unicorn.pid
ExecStart=/var/lib/rbenv/shims/bundle exec "unicorn_rails -c config/unicorn.rb -E production --path=/★"
ExecStop=/usr/bin/kill -QUIT $MAINPID
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
開始
systemctl start redmine
永続化
systemctl enable redmine
Apache設定
httpアクセスはhttpsにリダイレクトしています。
LetsEncrypt使っているので以下のような感じになります。
<IfModule mod_ssl.c>
<VirtualHost *:80>
ServerName ドメイン
RewriteEngine on
RewriteCond %{SERVER_NAME} =ドメイン
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<VirtualHost *:443>
ServerName ドメイン
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
SSLCertificateFile /etc/letsencrypt/live/ドメイン/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>```
## view_customize プラグインのインストール
[GitHub - onozaty/redmine-view-customize: View customize plugin for Redmine](https://github.com/onozaty/redmine-view-customize)
cd /var/lib/redmine/plugins
git clone https://github.com/onozaty/redmine-view-customize.git view_customize
cd ../
bundle install --without development test
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
## Themeファイルのインストール
Redmine4.2の場合
```bash
git clone -b redmine4.2 https://github.com/farend/redmine_theme_farend_bleuclair.git public/themes/bleuclair
※Redmineにログインして「管理」>「設定」>「表示」画面内の項目「テーマ」で「Bleuclair」を選択して「保存」
移行元のファイルをコピー
Redmineルートディレクトリ直下のfiles
ディレクトリを移行先に全て移動します。
ファイルのパーミッション変更
Webサーバ(この場合はApache)に権限を付与します。
chown -R apache:apache /var/lib/redmine
HTTPサーバ再起動
apachectl configtest
systemctl restart httpd
トラブルシューティング
「ARM版だと足りないパッケージがあるのでは?」「データベースマイグレーションでエラーでるだろうな。」
と心配していましたが、何事もありませんでした。
唯一デザイン崩れがありましたが、Chromeの開発者ツールをひらいて「Disable Cache」にチェックしてページをリロードしたら修正されました。
付録
Rubyのバージョンアップ(2.7.4->2.7.7)
リストの最新化
# cd /var/lib/rbenv/plugins/ruby-build/
# git pull
# rbenv install --list-all | grep 2.7.7
2.7.7
インストール
# ruby -v
2.7.4
# rbenv install 2.7.7
# rbenv global 2.7.7
# ruby -v
2.7.7
RedmineのGemアップデート
# cd /var/lib/redmine
# bundle install --without development test
再起動
# systemctl restart redmine httpd