Debian 9上でApache+PassengerでRoRの公開環境をつくる

Debian 9 "Stretch" を用いたサーバ設定メモ - 発声練習Debian 9上でrbenvをシステムワイドにインストールする - 発声練習の続き。

目的

  • 複数のRuby on Railsアプリの公開できるようにする
  • Apache + Passengerで構築する
  • iptableで不要なポートを閉じる

iptableで不要なポートを閉じる

Debian 9 "Stretch" を用いたサーバ設定メモ - 発声練習にてすでに閉じている。40080, 400081をアプリ用に公開する。/etc/iptables/rule.v4に以下を追加する。

-A INPUT -p tcp -m tcp --dport 40080 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 40081 -j ACCEPT

反映させる。

% sudo iptables-restore < /etc/rules.v4

確認する。

% sudo iptables -L | grep 400

ApacheとPassengerのインストール

Installing Passenger + Apache on Debian 9 (with APT) - Passenger LibraryにしたがってPassengerをインストールする。

Passengerをaptでインストールできるように設定する。GPG鍵の登録。

% sudo apt-get install -y dirmngr gnupg
% sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
% sudo apt-get install -y apt-transport-https ca-certificates

/etc/apt/source.listに追加する。

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

PassengerおよびApacheモジュールのインストール。

% sudo apt-get install -y libapache2-mod-passenger

Apacheにモジュールを付け加える。

% sudo a2enmod passenger
% sudo apache2ctl restart

正しくインストールできているかどうかを確かめる。Apacheを使う方を選ぶ。

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

PassengerInstanceRegistryDirを設定する。

% sudo mkdir -p /var/run/passenger-instreg

railsのソースファイルが/home/hogehoge/rails-serverとし、http://hogehoge.net/rails/でアクセスできるようにするとき、シンボリックリンクをはる。Debian8からはApacheのデフォルトが/var/www/htmlになっているのでその下に置く。

% sudo ln -s  /home/hogehoge/rails-server/public /var/www/html/rails

Apacheの設定

/etc/apache2/ports.conf に新しく開けたポートの記述を追加する。

Listen 40080
Listen 40081

ポート番号40080でアクセスする設定を/etc/apache2/sites-available/001-vhost1.confとして設定する。以下の設定ファイルでSECRET_KEY_BASEの環境変数を定義しているのは、passenger経由だとユーザディレクトリの設定ファイル(.bash_profileなど)で設定した環境変数が反映されないため(参考→tail -f pinzo.log: 本番環境での secret_key_base 設定)。

<VirtualHost *:40080>
	ServerName サーバのFQDN

	ServerAdmin 連絡先メールアドレス
	DocumentRoot /var/www/html

	ErrorLog ${APACHE_LOG_DIR}/vhost1_error.log
	CustomLog ${APACHE_LOG_DIR}/vhost2_access.log combined

	PassengerRuby /usr/local/rbenv/versions/2.4.2/bin/ruby # rbenvで導入したrubyを指定する
	PassengerInstanceRegistryDir /var/run/passenger-instreg #上述のディレクトリ
	PassengerFriendlyErrorPages off  #onにするとエラー時にログが表示される。
	
	SetEnv SECRET_KEY_BASE 「秘密鍵につかう文字列 bundle exec rails secret で生成」
	RackEnv production
	RackBaseURI /rails

</VirtualHost>

設定を反映させる。

% sudo a2ensite vhost1
% sudo systemctl reload apache2

Railsアプリを修正したとき

passengerを再起動する(参考:Restarting applications)。

% sudo passenger-config restart-app