Rocky Linux に Redmine を PostgreSQL と Apache(Passenger)で導入する手順
重要: 本ガイドは root または sudo 権限を前提としています。事前に PostgreSQL の基本インストールを完了しておいてください。
概要
Redmine はオープンソースのプロジェクト管理・課題追跡ツールです。Ruby on Rails で実装され、マルチプロジェクト、Wiki、フォーラム、時刻管理、複数の SCM サポート(Git/SVN など)や LDAP 認証などを備えています。本ガイドでは Rocky Linux 8 系に Redmine 4.2.3 を PostgreSQL と Apache(Passenger)構成で導入する手順を順を追って説明します。
定義(1行):Redmine — プロジェクト/課題管理用の Rails ベースの Web アプリケーション。
対象環境(例)
- OS: Rocky Linux 8.4
- IP: 192.168.1.10
- ドメイン: redmine.example.com
- root / sudo 権限があること
注意: 以下はサンプル環境です。実運用ではドメイン名、パスワード、TLS 証明書パス等を自組織の値に置き換えてください。
目標(本ガイドで学ぶこと)
- RVM で Ruby 2.7 を導入する
- PostgreSQL に Redmine 用データベースとユーザーを作成する
- Passenger を導入して Apache と統合する
- Apache の仮想ホストを設定(HTTP/HTTPS)して Redmine を公開する
- バックアップ、トラブルシューティング、運用チェックリストを整備する

前提条件
- Rocky Linux 8 系が稼働していること
- ネットワークと DNS が正しく設定されていること
- firewall(firewalld)で HTTP/HTTPS が許可されていること(後述)
- SELinux の設定方針(Enforcing/Permissive)を運用方針に従って決めておくこと
目次(主な手順)
- 依存パッケージのインストール
- Apache(httpd) のインストール・起動確認
- RVM と Ruby 2.7 の導入
- PostgreSQL に Redmine 用 DB とユーザーを作成
- Redmine ソースの配置、bundle インストール、初期設定
- Passenger の導入と Apache モジュール設定
- Apache 仮想ホスト(HTTP/HTTPS)設定
- 動作確認、初期管理者パスワードの変更
- 運用(バックアップ、監視、セキュリティ)
1. 依存パッケージのインストール
まずは EPEL リポジトリと必須パッケージをインストールします。すべて sudo / root で実行してください。
- EPEL の追加
sudo dnf install epel-release -y- ビルドツールとライブラリのインストール
sudo dnf install curl gpg gnupg2 gcc gcc-c++ make patch autoconf automake bison ImageMagick libffi-devel libtool patch redhat-rpm-config readline-devel postgresql-devel zlib-devel openssl-devel -y- Apache 開発ヘッダなど(Passenger の Apache モジュールをビルドする場合に必要)
sudo dnf install libcurl-devel httpd-devel httpd apr-devel apr-util-devel -yhttpd を起動・有効化して稼働を確認します。
sudo systemctl enable --now httpd
sudo systemctl status httpd
注: firewallctl を利用する場合は http と https を許可してください。
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload2. RVM と Ruby 2.7 のインストール
Redmine 4.2.x 系は Ruby 2.7 を利用することが要件です。RVM(Ruby Version Manager)で管理すると複数バージョンの切り替えが容易になります。
- RVM の GPG キーを取り込む
curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import -- RVM をインストールして環境を読み込む
curl -L get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh
- RVM の要件チェックと Ruby 2.7 の導入
rvm reload
rvm requirements run
rvm install 2.7インストール後、利用中の Ruby を確認します。
rvm list
ruby --version
重要: RVM でインストールした Ruby のパス(例: /usr/local/rvm/gems/ruby-2.7.2/)は後続の Passenger 設定で使います。
3. PostgreSQL の準備(Redmine 用 DB)
※ ここでは事前に PostgreSQL がインストール済みであることを前提としています。未インストールの場合は Rocky Linux 向けに PostgreSQL を導入してください。
- postgres ユーザーで psql に接続
sudo -u postgres psql- Redmine 用ロールとデータベースを作成(パスワードは強いものに変更してください)
CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'StrongPasswordRedmine' NOINHERIT VALID UNTIL 'infinity';
CREATE DATABASE redminedb WITH ENCODING='UTF8' OWNER=redmine;
\q
注意: 運用ではパスワード管理を厳格にし、PG ホストを別サーバーにする場合は接続制御(pg_hba.conf)で適切に制限してください。
4. Redmine ソースの配置と設定
Redmine 4.2.3 を /var/www/redmine に配置して設定します。
- ソースのダウンロードと配置
cd /var/www/
wget https://www.redmine.org/releases/redmine-4.2.3.tar.gz
tar -xzvf redmine-4.2.3.tar.gz
mv redmine-*/ redmine- データベース設定を作成
export REDMINE=/var/www/redmine
cd $REDMINE
nano config/database.ymldatabase.yml の例(production):
production:
adapter: postgresql
database: redminedb
host: localhost
username: redmine
password: "StrongPasswordRedmine"
encoding: utf8- bundler と gem 依存関係の導入
gem install bundler
bundle config set --local path 'vendor/bundle'
bundle config set --local without 'development test'
bundle install
- シークレットトークン生成と DB マイグレーション
bundle exec rake generate_secret_token
RAILS_ENV=production bundle exec rake db:migrate
- 所有者を Apache ユーザーに変更
sudo chown -R apache:apache $REDMINE注: SELinux が Enforcing の場合はファイルコンテキストの設定や boolean を調整する必要があります(後述)。
5. Passenger の導入と Apache 連携
Passenger(Phusion Passenger)は Rails アプリケーションを Apache/Nginx 上で動かすためのアプリサーバです。ここでは RubyGems から passenger をインストールし、Apache モジュールをビルドして組み込みます。
- passenger の gem インストール
gem install passenger
- Apache モジュールのインストール
passenger-install-apache2-moduleインストーラがビルドや設定に必要な指示を表示します。表示された設定(LoadModule 等)を Apache に追加します。
- /etc/httpd/conf.d/passenger.conf を作成して以下を配置(例: Ruby 2.7.2 のパスに合わせる)
LoadModule passenger_module /usr/local/rvm/gems/ruby-2.7.2/gems/passenger-6.0.12/buildout/apache2/mod_passenger.so
PassengerRoot /usr/local/rvm/gems/ruby-2.7.2/gems/passenger-6.0.12
PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.7.2/wrappers/ruby
保存後、httpd を再起動します。
sudo systemctl restart httpd
注意: RVM 環境下で gem をインストールした場合、上記のパスは rvm のインストール状況により異なります。passenger-installer が表示する推奨設定を優先してください。
6. Apache 仮想ホスト設定(HTTP と HTTPS)
- HTTP 用仮想ホスト: /etc/httpd/conf.d/redmine.conf
PassengerRuby /usr/local/rvm/gems/ruby-2.7.2/wrappers/ruby
ServerName redmine.example.io
DocumentRoot "/var/www/redmine/public"
ErrorLog logs/redmine_error_log
LogLevel warn
Options Indexes ExecCGI FollowSymLinks
Require all granted
AllowOverride all
- HTTPS(Let’s Encrypt の例を想定)
PassengerRuby /usr/local/rvm/gems/ruby-2.7.2/wrappers/ruby
ServerName redmine.example.io
Redirect permanent / https://redmine.example.io/
ServerName redmine.example.io
Protocols h2 http/1.1
Redirect permanent / https://redmine.example.io/
DocumentRoot "/var/www/redmine/public"
ErrorLog /var/log/httpd/redmine.example.io-error.log
CustomLog /var/log/httpd/redmine.example.io-access.log combined
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/redmine.example.io/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/redmine.example.io/privkey.pem
Options Indexes ExecCGI FollowSymLinks
Require all granted
AllowOverride all
- 設定チェックと再起動
apachectl configtest
sudo systemctl restart httpd注意: mod_ssl を有効にしていない場合はインストールしてください。
sudo dnf install mod_ssl -y7. Redmine へアクセスして初期セットアップ
ブラウザで https://redmine.example.io/login にアクセスしてログインします。初期管理者アカウントはデフォルトで次の通りです。
- ユーザー: admin
- パスワード: admin
最初に admin/admin でログインし、必ず初期パスワードを強いパスワードへ変更してください。
管理画面で言語やデフォルト設定を読み込み、ユーザー情報やメール送信(SMTP)などを設定します。
ユーザー一覧やシステム情報で構成を確認します。


成功すれば Redmine 4.2.3 が稼働しています。
8. 運用時に必ず行う設定と推奨オプション
- SMTP 設定: 管理 > 設定 > メール通知 で SMTP を設定すると課題作成や更新時にメール送信が可能になります。
- バックアップ: DB(pg_dump)と /var/www/redmine/files ディレクトリ(添付ファイル)を定期的にバックアップする。
- プラグインの管理: 公式と互換性のあるプラグインのみを導入し、Redmine バージョンアップ時は互換性検証を行う。
- メンテナンスページ: アップグレードやバックアップ時に表示する簡易メンテ画面を用意する。
バックアップ例(簡易 cron スクリプト)
#!/bin/bash
# /usr/local/bin/redmine_backup.sh
BACKUP_DIR=/var/backups/redmine/$(date +"%F")
mkdir -p "$BACKUP_DIR"
# DB ダンプ
sudo -u postgres pg_dump -Fc -f "$BACKUP_DIR/redminedb.dump" redminedb
# 添付ファイルと設定をアーカイブ
tar -czf "$BACKUP_DIR/redmine_files.tgz" -C /var/www/redmine files public/config
# 古いバックアップのクリーンアップ(14日より古いものを削除)
find /var/backups/redmine -type d -mtime +14 -exec rm -rf {} \;cron 例(毎日深夜 2:30):
30 2 * * * root /usr/local/bin/redmine_backup.sh >/dev/null 2>&19. セキュリティとハードニングのチェックリスト
- TLS を必須化して HSTS を設定する
- 管理 UI へのアクセスを IP 制限や VPN により限定する
- Apache のログローテートを確認する
- Redmine とプラグインを定期的にアップデートする
- ファイル・ディレクトリの所有者と権限を必要最小限にする(例: apache:apache)
- SELinux を使用する場合は httpd_sys_rw_content_t など適切なコンテキストを付与する
SELinux コンテキスト例:
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/redmine(/.*)?"
sudo restorecon -Rv /var/www/redmineApache のセキュリティヘッダ例(conf に追加):
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "strict-origin-when-cross-origin"10. 監視と性能チューニング
- Passenger のプロセス数(PassengerMinInstances / PassengerMaxPoolSize)を負荷に合わせて調整する
- 大規模環境では DB に接続数を増やし、キャッシュ(memcached / Redis)を利用して Rails のキャッシュを有効化する
- ログ監視(fail2ban、ログの集中管理)を導入する
Passenger 設定の例(/etc/httpd/conf.d/passenger.conf に追加):
PassengerMaxPoolSize 6
PassengerPoolIdleTime 300
PassengerMaxRequests 1000注意: 値はサーバーの CPU/メモリに応じて調整してください。
11. トラブルシューティングと復旧手順(ランブック)
重要な障害シナリオ別に基本対応手順を示します。
シナリオ A: Apache が起動しない
sudo systemctl status httpdを確認apachectl configtestで設定ミスを検出- recent な conf の差分を元に戻す
シナリオ B: Redmine へアクセスすると 500 エラー
- Apache error_log (/var/log/httpd/redmine_error_log) と Rails ログ(/var/www/redmine/log/production.log)を確認
- gem 依存関係の問題が疑われる場合は
bundle installを再実行 - database.yml の認証情報や DB の稼働を確認
シナリオ C: DB が壊れた / 最新バックアップに戻したい(ロールバック)
- サービスを停止
sudo systemctl stop httpd- 現在の /var/www/redmine をバックアップ(念のため)
sudo mv /var/www/redmine /var/www/redmine.failed-$(date +"%F-%T")- DB をダンプから復元
sudo -u postgres pg_restore -d redminedb /path/to/redminedb.dump- 添付ファイルを復旧(例)
tar -xzf redmine_files.tgz -C /var/www/redmine
sudo chown -R apache:apache /var/www/redmine- httpd を起動して動作確認
sudo systemctl start httpd注意: 本番環境での復旧は事前に DR(災害復旧)手順を検証しておくことが重要です。
12. テストケースと受け入れ基準
下記は導入後に必ず実施すべき基本テスト例です。
- 管理者 admin のログインに成功し、パスワード変更が行える
- 新規プロジェクトの作成が可能で Wiki・課題が作成できる
- 添付ファイルがアップロード・ダウンロードできる
- メール通知(SMTP 設定後)が課題作成時に送信される
- 負荷をかけて Passenger の稼働状況(プロセス数、レスポンスタイム)を観察
13. プラグイン導入と互換性のコツ
- プラグインは Redmine のバージョン互換情報を必ず確認する
- プラグイン導入前に必ずバックアップを取得する
- プラグイン導入はステージング環境で検証してから本番へ適用する
14. よくある問題と回避策
- Bundler のインストール中にネイティブ拡張のビルドに失敗する場合:開発ヘッダ(postgresql-devel、openssl-devel など)が入っているか確認
- Passenger がロードされない/mod_passenger が見つからない:passenger-installer が出力する LoadModule のパスを httpd に正しく追加
- SELinux によるアクセス拒否:audit.log を確認し、必要なコンテキストを付与
15. アップグレード時のチェックリスト
- Redmine の公式アップグレード手順を確認
- プラグインの互換性確認
- 本番前にステージング環境でマイグレーションをテスト
- DB とファイルのフルバックアップ
16. 役割別チェックリスト
管理者(システム運用):
- OS とパッケージの定期アップデート
- バックアップスケジュールの管理と復旧訓練
- TLS 証明書の更新管理
アプリ管理者(Redmine 管理者):
- ユーザー/権限管理
- プラグイン導入の承認と検証
- メール通知・LDAP の設定管理
プロジェクトマネージャー:
- プロジェクト作成とメンバー割当
- ワークフローとトラッカーの設定
17. 互換性メモと移行のヒント
- Redmine 4.2 系は Ruby 2.7 系を推奨(本ガイドは 2.7 を使用)
- 大きなバージョンアップを行う場合、Rails の互換性や DB マイグレーション時の差分に注意する
- 別サーバーへ移行する場合は DB ダンプと /files の完全コピーを行い、config/database.yml の接続情報を更新する
18. 短い用語集
- Passenger: Ruby/Node などのアプリを Web サーバ上で動かすアプリサーバ
- bundle: Ruby の gem 依存関係を管理するツール
- RVM: Ruby バージョン管理ツール
19. まとめ
このガイドでは Rocky Linux 8 に Redmine 4.2.3 を PostgreSQL と Apache(Passenger)で導入する具体手順を示しました。大事なのは依存関係の整備、適切な権限設定、SSL 化とバックアップ運用です。導入後は監視と定期メンテナンスを行い、プラグインや本体のバージョン互換性を常に確認してください。
重要: 本番環境に適用する前にステージング環境で十分に検証してください。
追加資料(参考):
- Redmine 公式: https://www.redmine.org/
- Phusion Passenger: https://www.phusionpassenger.com/









まとめ: このドキュメントを参照して順に作業すれば、Rocky Linux 上に安全で運用可能な Redmine 環境を構築できます。運用時はバックアップと監視、セキュリティ保守を忘れずに。