RedmineをPuma+Apacheで本番環境を構築!再起動後も自動で動く構成を解説

Rubyアプリを本番環境で安定して運用するためには、ApacheなどのWebサーバーと連携させる仕組みが必要です。
その役割を果たすのがアプリケーションサーバーです。

本記事では、ApacheとPumaを使ってRubyアプリケーションの本番環境を構築する方法を解説します。
Pumaはアプリケーションサーバーとして独立して動作し、Apacheとリバースプロキシで連携することで、構成の柔軟性や運用の安定性を高めることができます。

また、記事の後半では、Redmineを使った動作確認も行いますので、構築した環境のテストまでを一通り体験することができます。

目次

前提条件

本記事では、以下の環境が構築済みであることを前提としています。

  • Apacheがインストール済みで、HTTPでアクセス可能な状態であること
  • Ruby環境(rbenv+ruby-buildなど)を構築済みであること
  • Pumaで起動できるRailsアプリが配置されていること(※本記事では確認用にRedmineを使用します)

Apacheのインストールがまだの方は、以下の記事も参考にしてください。

Ruby環境の構築がまだの方は、以下の記事も参考にしてください。

また、動作確認用にRedmineを使う場合は、以下の記事を参考にしてください。

Pumaをインストールしてアプリを起動できるようにする

PumaはRailsのアプリケーションサーバーとして定番の1つです。Redmineのようなアプリでも動作しますし、他のRailsアプリでも同様に使えます。ここではPumaをGemに追加し、インストールからアプリの起動までを行います。

手順

念のためにRuby環境の確認

以降の記事では、Ruby環境が構築できていることを前提に進めます
本記事では、Rubyの環境構築に rbenv を想定しています。他の方法(rvmapt install ruby など)を利用している場合は、各方法に合った初期化やパス設定が必要になる点に注意してください

まずは、Ruby環境が正しく有効になっていることを確認します。

which ruby
ruby -v

両方の出力が ~/.rbenv/versions/... 配下になっていればOKです。

念のため、bundler コマンドも確認しておきましょう。

bundle -v

もしbundleが見つからない場合は、以下でインストールできます。その後に再びbundle -vで確認してください。

gem install bundler

gem install bundlerを実行した際にPermission denied エラーが出る場合は、Rubyの環境がログインユーザー権限で構築されていない可能性があります
gem install bundlerの実行は、sudo を付けてインストールすることは推奨されていません
そのため一時的にディレクトリごとパーミッションをログインユーザーに変更して実行してみてください

Pumaをインストール

すでにRedmineを導入済みで、こちらの記事に沿って構築した方は、Pumaのインストールは不要です

まずはGemfileにPumaを追記します。

gem 'puma'

bundle installを実行しましょう。

bundle install

gem install bundlerを実行した際にPermission denied エラーが出る場合は、Rubyの環境がログインユーザー権限で構築されていない可能性があります
gem install bundlerの実行は、sudo を付けてインストールすることは推奨されていません
そのため一時的にディレクトリごとパーミッションをログインユーザーに変更して実行してみてください

起動確認

以下のコマンドで起動テストしてみましょう。

bundle exec puma -e production -b tcp://0.0.0.0:3000

ブラウザで http://サーバーのIP:3000 にアクセスできればOKです。

もし、アクセスできない場合は、以下の確認をしてみてください。

  • ファイアウォール設定
    ufw などでポート3000が開いているか? sudo ufw allow 3000/tcp
  • ネットワークインタフェース
    0.0.0.0:3000 が本当にListen状態になっているか? → ss -tuln | grep 3000
  • サーバー機側でcurl試行
    Pumaは動いているか?curl http://127.0.0.1:3000

Pumaをsystemdサービスとして常駐させる

Redmineを本番運用するためには、手動で起動するのではなく、OS起動時に自動で起動する構成が必要です。
ここでは、Pumaをsystemdのサービスとして登録し、常駐化します。

Pumaをsystemdでサービス化

OS起動時にPumaが自動起動するための設定をます。

sudo nano /etc/systemd/system/puma.service

以下を記述します。

[Unit]
Description=Puma HTTP Server for Redmine
After=network.target

[Service]
Type=simple
User=LoginUser
WorkingDirectory=/var/www/redmine

Environment=RAILS_ENV=production
Environment=PATH=/home/LoginUser/.rbenv/shims:/home/LoginUser/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

ExecStart=/home/adminsub/.rbenv/bin/rbenv exec bundle exec puma -e production -b tcp://0.0.0.0:9292
Restart=always

[Install]
WantedBy=multi-user.target

LoginUserの部分は、ログインユーザー名に変更してください。

この設定はpumaがポート9292で起動する設定になっています
必要に応じて、tcp://0.0.0.0:92929292部分を変更してください

サービス起動と永続化

サービス起動が自動で実行されるようにします。これにより、サーバーを起動した際に自動的にPumaが起動します

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable puma
sudo systemctl start puma
sudo systemctl status puma

以下の出力があれば成功です。

Listening on http://0.0.0.0:9292

ポート:9292でListenして待機している状態です。

ApacheでRedmineをリバースプロキシで公開する

起動したPumaは、Apacheからリバースプロキシを使用して公開します。

必要モジュールの有効化

Apacheのリバースプロキシ機能を有効化します。

sudo a2enmod proxy proxy_http headers
sudo systemctl restart apache2

Apache仮想ホスト設定ファイルの作成

/etc/apache2/sites-availableに、Redmineのホスト設定ファイルを作成します。

sudo nano /etc/apache2/sites-available/redmine.conf

以下の内容を記述します。

<VirtualHost *:80>
    ServerName redmine.local

    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:9292/
    ProxyPassReverse / http://127.0.0.1:9292/

    RequestHeader set X-Forwarded-Proto http
    RequestHeader set X-Forwarded-Ssl on
</VirtualHost>
  • ServerName redmine.local: http://redmine.local でアクセスすることを設定
  • ProxyPass / http://127.0.0.1:9292/: http://127.0.0.1:9292/ は、起動したPumaにリバースプロキシするための設定
  • ProxyPassReverse / http://127.0.0.1:9292/: Pumaからのリターンされたデータを受け取るための設定

設定を有効化してApache再起動

作成した、redmine.confを有効化して再起動します。

sudo a2ensite redmine.conf
sudo systemctl reload apache2

動作確認(ブラウザからアクセス)

ブラウザで以下のURLにアクセスして、Railsアプリ(今回はRedmine)が表示されれば設定は完了です。

http://redmine.local

アプリが表示されない場合は、以下を確認してみてください。

  • Apacheが起動しているか:sudo systemctl status apache2
  • エラーログの確認:/var/log/apache2/error.log
  • 名前解決できるか(ブラウザを使う機器が、redmine.localを認識できているか)
    ※ Windowsであれば、Hostsを書き換えることで認識できるようになります
  • ブラウザのキャッシュクリア

まとめ

今回は、Redmineを本番運用するための構成として、Puma+Apacheの組み合わせで構築を行いました。

Pumaは単体で起動確認を行ったうえで、systemdによるサービス化を行い、再起動後も自動で起動できるように設定。さらにApacheからリバースプロキシでPumaに接続し、ブラウザからは通常のWebサイトとしてRedmineを公開できるようにしました。

途中、systemdサービスが再起動後にうまく動かない、Apacheの構文エラーなどいくつかの課題に直面しましたが、それぞれ原因を調査しながら解決していくことで、無事に安定した本番環境を構築することができました。

  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次