目次
はじめに
以前の記事でUbutntuにRedmine 5.1をインストールする手順について紹介しました。その続きとして、WebサーバーにNginxを使った構成を紹介します。HTTPS, CORSにも対応しています。コピー&ペーストで実行できます。
前記事
TrelloとRedmineを比較している方、Redmineの現場展開に悩んでいる方、ぜひご一読を!
環境
ソフトウェアのバージョンは次の通りです。
- 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のインストール手順が掲載されているので、それに従ってインストールを行います。
参照資料
以下は上記資料からの抜粋です。
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の呼び出し方法を読み取ります。次の記事にその説明があります。
前記事ではHTTPS化のための秘密鍵は暗号化せずに作成しました。Nginxの起動時にパスワードの入力が必要になるからです。これはサービス化されたNginxを起動する場合はエラーとなります。暗号化された秘密鍵を使いたい場合は、パスワードをファイルで用意して、Nginxに読み込ませることができます。
稼働確認
ブラウザからRedmineにアクセスします。
https://<サーバーのURL>/
自己署名証明書のためブラウザに警告が表示されますが、警告を受け入れてアクセスします。
Redmineのホーム画面が表示されれば稼働中です。
変更履歴
日時 | 内容 |
2024/03/21 | 初版リリース |