UbuntuのRedmineをNginxで動かす (HTTPSとCORSに対応)

はじめに

以前の記事でUbutntuにRedmine 5.1をインストールする手順について紹介しました。その続きとして、WebサーバーにNginxを使った構成を紹介します。HTTPS, CORSにも対応しています。コピー&ペーストで実行できます。

前記事

UbuntuにRedmine 5.1/Ruby 3.2をインストールする
UbuntuにRedmine 5.1をインストールする手順をステップバイステップで紹介します。Ruby 3.2, MySQL 8.0を使っています。CORS対応, HTTPS化についても解説しています。コピー&ペーストで実行可能です。
UbuntuにRedmine 5.1/Ruby 2.7をインストールする
UbuntuにRedmine 5.1をインストールする手順をステップバイステップで紹介します。Ruby 2.7, MySQL 8.0を使っています。CORS対応, HTTPS化についても解説しています。コピー&ペーストで実行可能です。

TrelloとRedmineを比較している方、Redmineの現場展開に悩んでいる方、ぜひご一読を!

TrelloとRedmineを連携してチームの生産性をアップしよう
RedSyncはRedmineをTrelloと連携するツールです。プロジェクトメンバーの日々の作業を助けながら、プロマネによるタイムリーなスケジュールの展開や進捗の把握を可能にします。

環境

ソフトウェアのバージョンは次の通りです。

  • OS: Ubuntu Server 22.04
  • Redmine: 5.1
  • Nginx 1.18
  • Passenger 6.0

セットアップの手順

前記事では、Redmineのインストールと、CORS, HTTPS対応まで行いました。ただしWebサーバー (兼アプリサーバー)にはPumaを使用しました。本記事では、PumaをNginx + Passengerで置き換えます。このため前記事の作業からの続きとなります。

  • NginxとPassengerのインストール
  • NginxとPassengerの稼働確認
  • Nginxの構成
  • Redmineの稼働確認

特に指定しない場合は、作業はホームディレクトリ (/home/redmine) で行うものとします。

サービスの停止

前記事で、Redmineの起動をサービス化している場合は、サービスを停止します。

sudo systemctl stop redmine
sudo systemctl disable redmine

NginxとPassengerのインストール

NginxとRedmineをつなぐアプリケーションサーバーとして、Passengerを使用します。Passengerのサイトに、NginxとPassengerのインストール手順が掲載されているので、それに従ってインストールを行います。

参照資料

Installing Passenger - Passenger Library

以下は上記資料からの抜粋です。

Nginxをインストールします。

sudo apt-get install nginx

この後の作業の前提となるソフトウェアをインストールします。

sudo apt-get install -y dirmngr gnupg apt-transport-https ca-certificates curl

(筆者の環境で実際にインストールが必要だったのは、apt-transport-httpsのみでした。他はインストール済みでした。)

Passengerのレポジトリの解凍に必要なPGPキーを取得しaptに登録します。

curl https://oss-binaries.phusionpassenger.com/auto-software-signing-gpg-key.txt | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/phusion.gpg >/dev/null

Passengerのレポジトリをaptに追加します。

sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger jammy main > /etc/apt/sources.list.d/passenger.list'
sudo apt-get update

Passengerをインストールします。

sudo apt-get install -y libnginx-mod-http-passenger

インストール結果を検証します。

sudo /usr/bin/passenger-config validate-install

検証対象を質問されるので、”Passenger itself”を選択してください。次のように表示されればOKです。

What would you like to validate?
Use <space> to select.
If the menu doesn't display correctly, press '!'

 ‣ ⬢  Passenger itself
   ⬡  Apache

-------------------------------------------------------------------------

 * Checking whether this Passenger install is in PATH... ✓
 * Checking whether there are no other Passenger installations... ✓

Everything looks good. :-)

Nginxの稼働確認

Nginxをサービスとして開始します。

sudo service nginx restart

関連するプロセスの実行状況を確認します。

sudo /usr/sbin/passenger-memory-stats

次のようにNginxとPassengerのプロセスが表示されればOKです。

Version: 6.0.20
Date   : 2024-03-20 12:20:56 +0000
------------- Apache processes -------------
*** WARNING: The Apache executable cannot be found.
Please set the APXS2 environment variable to your 'apxs2' executable's filename, or set the HTTPD environment variable to your 'httpd' or 'apache2' executable's filename.


---------- Nginx processes ----------
PID    PPID   VMSize   Private  Name
-------------------------------------
14927  1      56.6 MB  0.2 MB   nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
14937  14927  57.1 MB  1.1 MB   nginx: worker process
14938  14927  57.1 MB  0.9 MB   nginx: worker process
### Processes: 3
### Total private dirty RSS: 2.13 MB


------ Passenger processes ------
PID    VMSize     Private   Name
---------------------------------
14915  295.1 MB   2.7 MB    Passenger watchdog
14919  1043.1 MB  6.4 MB    Passenger core
15011  499.7 MB   162.2 MB  Passenger RubyApp: /opt/redmine (production)
### Processes: 3
### Total private dirty RSS: 171.34 MB

ブラウザでアクセスしてみます。

http://<サーバーのURL>/

「Welcome to nginx!」とメッセージが表示されます。

Nginxの構成 (Redmine/HTTPS/CORS)

Nginxの構成ファイルを作成して、Redmineへの接続とHTTPSを構成します。Nginxではサイトの構成を/etc/nginx/sites-availableの下に定義します。またそのシンボリックリンクを/etc/nginx/sites-enabledの下に作成することで、その定義を有効にします。

構成ファイルを作成します。

sudo vim /etc/nginx/sites-available/redmine.conf

以下の内容を書き込みます。

server {
        listen 443 ssl;
        server_name example.com;

        ssl_certificate /home/redmine/certificate.crt;
        ssl_certificate_key /home/redmine/private.key;

        root /opt/redmine/public;

        passenger_enabled on;
        passenger_ruby /home/redmine/.rbenv/shims/ruby;
}
  • server_name: サーバーのFQDN (Fully Qualified Domain Name) またはIPアドレスを指定
  • ssl_certificate: 前記事で作成した証明書を指定
  • ssl_certificate_key: 前記事で作成した秘密鍵を指定
  • root: Redmineのpublicディレクトリを指定

構成ファイルを有効にします。

sudo ln -s /etc/nginx/sites-available/redmine.conf /etc/nginx/sites-enabled/redmine.conf

前記事で設定したCORSのサポートはそのまま有効になっています。追加の設定は必要ありません。

Nginxを再起動します。

sudo service nginx restart

PassengerはどのようにしてRedmineの呼び出し方法を知るのでしょうか?

構成ファイルのrootタグにRedmineのpublicディレクトリへのパスが指定されていますが、publicディレクトリには静的なコンテンツのみが格納されており、Redmineの呼び出しには使えません。

実はPassengerはrootの定義から、/home/redmine/config.ruというファイルを探し、その内容からRedmineの呼び出し方法を読み取ります。次の記事にその説明があります。

How Passenger autodetects applications - Passenger Library

前記事ではHTTPS化のための秘密鍵は暗号化せずに作成しました。Nginxの起動時にパスワードの入力が必要になるからです。これはサービス化されたNginxを起動する場合はエラーとなります。暗号化された秘密鍵を使いたい場合は、パスワードをファイルで用意して、Nginxに読み込ませることができます。

Secure Distribution of SSL Private Keys with NGINX - NGINX
We describe three progressively more secure ways to protect SSL private keys when configuring NGINX to handle HTTPS traf...

稼働確認

ブラウザからRedmineにアクセスします。

https://<サーバーのURL>/

自己署名証明書のためブラウザに警告が表示されますが、警告を受け入れてアクセスします。

Redmineのホーム画面が表示されれば稼働中です。

変更履歴

日時内容
2024/03/21初版リリース
NginxRedmine
スポンサーリンク