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 % sudo apt-get install -y apache2-dev (passengerで使うapxs2のインストール)
Apacheにモジュールを付け加える。
% sudo a2enmod passenger % sudo apache2ctl restart
正しくインストールできているかどうかを確かめる。Apacheを使う方を選ぶ。
sudo /usr/bin/passenger-config validate-install
PassengerInstanceRegistryDirを設定する。
% sudo mkdir -p /var/run/passenger-instreg
Debian 9では /var/runは tmpfsとして設定されているため、そのままだと再起動の度に削除されてしまう(参考:/var/run の中身が再起動すると消えてしまうので・・・やお前らもさっさとハマって泣くべきCentOS7の落とし穴4つ - Qiita)。そこで、 /etc/tmpfiles.d に設定を記載する。
% sudo touch /etc/tmpfiles.d/passenger.conf
/etc/tmpfiles.d/passenger.confの中見は以下のとおりにする。
d /var/run/passenger-instreg 0755 root root
rootのホームディレクトリ(/root)のシェルの設定ファイルに上記の添付ファイルに関する設定を記述する。たとえば、.bash_profileに以下を記述する。以下の例では合わせてRailsの実行モードについても記載する。
export PASSENGER_INSTANCE_REGISTRY_DIR=/var/run/passenger-instreg export RAILS_ENV=production
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 設定)。
PassengerInstanceRegistryDir /var/run/passenger-instreg #上述のディレクトリ <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を指定する PassengerFriendlyErrorPages off #onにするとエラー時にログが表示される。 SetEnv SECRET_KEY_BASE 「秘密鍵につかう文字列 bundle exec rails secret で生成」 RackEnv production RackBaseURI /rails </VirtualHost>
設定を反映させる。
% sudo a2ensite vhost1 % sudo systemctl reload apache2