Redmine 6.xへの移行を見据え、現在運用しているRedmine 5.1とは別に、同一サーバー上へRedmine 6.1の検証環境(redmine-v6)を構築しました。
「同じサーバーなら、そのまま新しいRedmineを入れればいい」と考えがちですが、不用意にシステム全体のRuby環境やWebサーバー設定を書き換えると、既存の稼働中サービスを巻き込んで停止(500エラー等)させるリスクがあります。
今回の構築では、「Redmine 6.1を動かすこと」以上に「現在動いている既存環境(5.1)に一切影響を与えないこと」を最優先に設計しました。そのための設計思想と具体的な構築手順をまとめます。
既存環境を壊さないための3つの原則
RedmineはRubyやGem、Webサーバー(Apache)など多くの基盤を利用するRailsアプリケーションです。既存環境との共存にあたり、特に以下の3点を徹底しました。
sudo gem installを安易に使わず、ライブラリをプロジェクト内に隔離する
システム全体にGemをインストールすると、既存Redmineが依存するGemバージョンと競合する恐れがあります。Bundlerを利用し、依存ライブラリはすべて検証環境のディレクトリ配下(vendor/bundle)へ閉じ込めます。- Bundlerの設定をローカル(プロジェクト単位)に限定する
グローバル設定(~/.bundle/config)への書き込みを避け、bundle config set --localを使用して対象ディレクトリ内でのみ設定を完結させます。 - Apacheの既存設定には触れず、新しいVirtualHostを追加するのみにとどめる
既存のサイト設定(000-default.confや既存Redmine用設定)の無効化(a2dissite)は行わず、新規VirtualHostの作成と有効化(a2ensite)だけで対応します。
検証環境・前提条件
- OS: Ubuntu 24.04 LTS
- Ruby: 3.2.x系(Ubuntu標準パッケージ / 5.1系と6.1系の両方に対応)
- DB: MySQL 8.x
- Web: Apache 2.4 + Passenger
- Redmine: 6.1-stable(新規検証用)
- パッケージ管理:
aptitude(※aptでも同様に実行可能です) - 名前解決: 検証用ドメイン/サブドメインのDNS名前解決が完了していること
多分さっくりとはしていない手順
- Redmine-v6用のDBを作成します。
- Redmine 6.1を配置します。
- データベース接続設定を行います。
- Gemの初期化と設定を行います。 (※既存環境を壊さないように注意!!!)
- Apacheのvirtualhostを設定します。
- 設定を反映します。
- 動作確認を行います。
1. データベースと専用ユーザーの作成
既存のデータベースと完全に分離するため、redmine_v6 専用のDBおよびユーザーを作成します。
sudo mysql -u root -p
-- データベース作成
CREATE DATABASE redmine_v6 CHARACTER SET utf8mb4;
-- 専用ユーザー作成(パスワードは任意のものに変更してください)
CREATE USER 'redmine_v6'@'localhost' IDENTIFIED BY 'your_secure_password';
-- 権限付与
GRANT ALL ON redmine_v6.* TO 'redmine_v6'@'localhost';
FLUSH PRIVILEGES;
EXIT;
作成したユーザーで接続できるか確認します。
mysql -u redmine_v6 -p -e "SHOW DATABASES;"
2. Redmine 6.1 の配置
配置ディレクトリを既存環境と分けて作成し、ソースコードを取得します。
- ディレクトリ作成
sudo mkdir -p /home/www-data/redmine-v6
※自分の環境に合わせます。
- ディレクトリの所有者変更
sudo chown -R www-data:www-data /home/www-data/redmine-v6
- Redmine 6.1-stable の取得
sudo -u www-data svn co https://svn.redmine.org/redmine/branches/6.1-stable /home/www-data/redmine-v6
3. データベース接続設定
設定ファイルのサンプルをコピーし、先ほど作成した redmine_v6 の情報を設定します。
sudo -u www-data cp -pi /home/www-data/redmine-v6/config/database.yml.example /home/www-data/redmine-v6/config/database.yml
/home/www-data/redmine-v6/config/database.yml を編集します。
production:
adapter: mysql2
database: redmine_v6
host: localhost
username: redmine_v6
password: "your_secure_password"
encoding: utf8mb4
4. Gemのローカルインストールと初期化
Gemの競合を防ぐため、必ずローカル設定で vendor/bundle 配下にインストールします。
- Redmine(v6)のルートディレクトリに移動
cd /home/www-data/redmine-v6 && pwd
旧環境に移動すると偉い目に遭います。(遭いました
- Bundlerの設定をローカルに限定
sudo -u www-data bundle config set --local path 'vendor/bundle'
sudo -u www-data bundle config set --local without 'development test'
- 依存関係の調整とインストール
sudo -u www-data bundle update stringio
sudo -u www-data bundle install
- シークレットトークンの生成
sudo -u www-data bundle exec rake generate_secret_token RAILS_ENV=production
- DBマイグレーション
sudo -u www-data bundle exec rake db:migrate RAILS_ENV=production
- デフォルトデータのロード(日本語)
sudo -u www-data RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
- アセットのプリコンパイル
sudo -u www-data bundle exec rake assets:precompile RAILS_ENV=production
5. Apache VirtualHost の設定
既存の稼働中サイトには一切触れず、Redmine 6.1用の設定ファイルのみを新規作成・有効化します。
cat <<- __EOF__ | sudo tee /etc/apache2/sites-available/redmine-v6.conf
<VirtualHost *:80>
ServerName 【v6.example.com】
DocumentRoot /home/www-data/redmine-v6/public
<Directory /home/www-data/redmine-v6/public>
Options -MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
__EOF__
※ 【v6.example.com】 はご自身の検証用ドメインに書き換えてください。
※ これはあくまでもhttpd専用であり、ログもありません。適宜、セキュリティポリシーに沿って運用します。
6. 設定の反映
- 新規サイト設定のみ有効化
sudo a2ensite redmine-v6.conf
- 構文チェック(Syntax OK を確認)
sudo apache2ctl configtest
- Apacheの再読み込み
sudo systemctl restart apache2.service
7. 動作確認
ブラウザから http://設定した検証用ドメイン にアクセスし、Redmine 6.1 のトップページが表示されれば構築完了です。
重要: 初期管理者アカウント(
admin/admin)で即座にログインし、パスワードを強固なものへ変更してください。
おわりに
今回の検証環境構築では、Redmine 5.1(Rails 6.1系)とRedmine 6.1(Rails 7.2系)が共にRuby 3.2系をサポートしていたため、Ruby本体を共用しながらディレクトリ・Gem・DB・VirtualHostのレベルで環境を安全に分離できました。
サーバー運用においては、「新しい環境を動かすこと」以上に「稼働中の資産を壊さない境界線を引くこと」が重要になります。