PokuG stdio.h

ポクジィと読みます

Apache で Redmine をサブURL /redmine に公開する方法


Redmine を社内や個人環境で運用していると、既存の Web サイトやサービスと同じサーバーで公開したいケースがあります。
そのとき便利なのが Apache のリバースプロキシ機能を使って、Redmine をサブURL(例: /redmine)配下に配置する方法 です。

この記事では、Windows 環境で Apache と Puma を組み合わせ、Redmine を /redmine からアクセスできるようにする具体的な手順を紹介します。

なお、本記事は以下の記事で Redmine を作成した環境を前提としています。
Windows 11 (25H2) に Redmine 6.1.0 をインストール
【Redmine】Puma 設定で同時接続数を調整する(Windows 前提)

1. 環境

1.1 OSやアプリのバージョン

OS Windows 11 (25H2)
Redmine 6.1.0
Ruby RubyInstaller-DevKit 3.4.6-1 (x64)
PostgreSQL 18.0
アプリサーバ Puma (production モード)
Webサーバ Apache 2.4 系 (Win64版) ※XMAPP 8.2.12使用
公開URL http://<パソコン名>/redmine/

1.2 インストール環境

Redmine インストール先 C:\Redmine
PostgreSQL データ保存先 C:\Program Files\PostgreSQL\18\data
Apache 設定ファイル C:\xampp\apache\conf\httpd.conf
C:\xampp\apache\conf\httpd-proxy.conf
プロキシ転送先 http://127.0.0.1:3000/redmine

2. XAMPPのインストール

今回は Apache を XAMPP でインストールします。

XAMPPは、Web開発に必要な「Apache」「MariaDB(またはMySQL)」「PHP」「Perl」といったソフトウェアをひとまとめにし、ローカル環境で簡単にWebアプリケーション開発ができるようにする無料のパッケージソフトウェアです。本来別々にインストールする必要のある複数のツールをまとめて提供することで、初心者でも手軽に開発環境を構築し、Webアプリケーションの作成・テストを行えるようにすることを目的としています。

今回は Apache のみ使用しますが、個人的に別途、他のシステムも使用しますので、XAMPP をインストールし Apache を使用します。

■ ダウンロード
こちらのホームページよりダウンロードします。
XAMPP Installers and Downloads for Apache Friends
Windows向けの 「xampp-windows-x64-8.2.12-0-VS16-installer.exe」をダウンロードしました。

■ インストーラーの起動
「はい」を選択します。

■ 1.3 警告
「OK」を選択します。

■ 1.4 セットアップ
「Next」を選択します。

■ コンポーネントの選択
全てデフォルトのまま「Next」を選択します。

■ インストール先
デフォルトのまま「Next」を選択します。

■ 言語
デフォルトのまま「Next」を選択します。

■ 確認
「Next」を選択します。

■ インストール
アプリがインストールされます。

■ 終了
チェックボックスを外し、「Finish」を選択します。


以上で XMAPP(Apache)のインストールは終了です。


3. Redmine の設定

色々方法はあるみたいですが、今回はRadmine 起動時に読むスクリプトの config.ru を編集し環境変数 RAILS_RELATIVE_URL_ROOT を読み込むように設定し、Redmine の起動前に RAILS_RELATIVE_URL_ROOT の環境変数を設定してから起動する方法をとりました。

3.1 config.ruの編集

C:\redmine\config.ruを以下に編集します。

# This file is used by Rack-based servers to start the application.

# require_relative 'config/environment' ←コメント
# run Rails.application         ←コメント

# 追記
# This file is used by Rack-based servers to start the application.
require ::File.expand_path('../config/environment',  __FILE__)
map ENV['RAILS_RELATIVE_URL_ROOT'] || '/' do
  run RedmineApp::Application
end

3.2 Redmineの起動

Redmine の起動前に RAILS_RELATIVE_URL_ROOT の環境変数を設定して起動します。

cd C:\Redmine
$env:RAILS_RELATIVE_URL_ROOT="/redmine"
bundle exec puma -C config/puma.rb


※上の画像のように Ruby 3.4 の環境では警告がでます。
これは ostruct というモジュールが Ruby 標準添付ライブラリの1つで、Ruby 3.4 ではまだ標準で入っていますが、Ruby 3.5 からは「標準 gem 化」されて同梱されなくなる予定という内容です。
現状 Ruby 3.4 なのでこの警告は無視します。

3.3 接続確認

ブラウザから「http://localhost:3000/redmine/」へアクセスして接続テストします。

ここまでで、アプリケーションサーバのサブURL経由でアクセスできることは確認できました。
次は Apache のリバースプロキシの設定になります。


4. Apache の設定

Apache のリバースプロキシ機能を設定します。

4.1 モジュールの読み込み確認(httpd.conf)

C:\xampp\apache\conf\httpd.conf に以下があるか確認します。
なければ追記&コメント解除してください。

LoadModule proxy_module        modules/mod_proxy.so
LoadModule proxy_http_module   modules/mod_proxy_http.so
LoadModule headers_module      modules/mod_headers.so
LoadModule rewrite_module      modules/mod_rewrite.so

Include "conf/extra/httpd-proxy.conf"

ちなみに、うちの環境では modules/mod_proxy_http.so のみがコメントになっていて、他は読み込まれる設定になっていました。

4.2 httpd-proxy.conf の編集

C:\xampp\apache\conf\extra\httpd-proxy.conf の一番最後の行(2つある</IfModule>の下)に以下を追記します。

# Redmine reverse proxy (/redmine)
<VirtualHost *:80>
    ServerName your.domain.example

    ProxyRequests Off
    ProxyTimeout 300
    LimitRequestBody 0

    ProxyPreserveHost On
    RequestHeader set X-Forwarded-Proto "http"
    RequestHeader set X-Forwarded-Port "80"

    # /redmine だけを転送
    ProxyPass        /redmine http://127.0.0.1:3000/redmine retry=0
    ProxyPassReverse /redmine http://127.0.0.1:3000/redmine

    # /redmine → /redmine/ のリダイレクト(末尾スラッシュ揃え)
    RewriteEngine On
    RewriteRule ^/redmine$ /redmine/ [R=301,L]
</VirtualHost>

4. 動作確認

4.1 XMAPPの起動

「XAMPP Control Panel」を管理者権限で起動します。

4.2 Apache の起動

赤枠をクリックし Apache を起動します。

4.3 ブラウザからアクセス

http://localhost/redmine/」にアクセスします。


以上で完了です。

5. おわり

Redmine を Apache 経由でサブURL /redmine から公開することで、既存のサイトや他のサービスと共存させやすくなります。
最初は設定に少し手間取るかもしれませんが、一度仕組みを作ってしまえば安定して運用できると思います。

ちなみに、Redmine のアプリケーションサーバーでサブURL を作成せずにApache のリバースプロキシ機能のみで、http://your.domain/redmine/ をそのまま http://127.0.0.1:3000/ に転送すれば同じことができますが、ログが見にくくなるので、アプリケーションサーバーでもサブURLを作ったほうがよいと ChatGPT 先生に言われたので、今回のような設定になりました。


おまけ

手順「3.2 Redmineの起動」で警告がでますが、「C:\redmine\Gemfile.local」に以下を追加し、

gem 'ostruct'

パワーシェルで「C:\redmine」へ移動し以下コマンドを実行すると警告が消えると思います。

bundle install --without development test