私の目標は、Rubyのバージョンが異なる可能性のある異なるサーバーユーザーの下でRubyアプリケーションを実行することです。
だから私は本質的に「ホスティングアカウント」として機能するユーザーを持っているでしょう。ドキュメントのルート/アプリケーションファイルは、RubyバージョンおよびRVMで管理されるgemsetとともにホームディレクトリに存在します。ユーザーは、実行する必要のある1つ以上のWebアプリを使用できます。仮想ホストこのユーザーのサイトは、ユーザーのホームディレクトリのドキュメントルートを指し、Webサーバーもこのuser:group
として効果的に実行されます。
レイアウト例:
/home/theuser
/.rvm
/applications
/railsapp1
/public
[ other Rails dirs ]
/somephpapp (symfony, zf, etc.)
/public
[ other framework dirs ]
/www
/railsapp1.com (ln -s ../applications/railsapp1/public)
/somestaticsite.com
/somephpapp.com (ln -s ../applications/somephpapp/public)
そう...
質問1:これも可能ですか?私は乗客が仮想ホストレベルでRubyバージョンと乗客ユーザー(乗客ユーザーはfcgi、php-fpm、SuExecのuser:groupを指定するのと同等だと思います)をサポートしていることを知っていますが、すべての命令はim特定のRVMユーザーからApacheモジュールをインストールしているように見えますが、それは奇妙に思えます。それとも、モジュールをインストールする汎用ユーザーを作成し、アカウントごとに他のすべてを実行するだけの問題ですか?
質問2:これが可能であっても、設定する正しい方法はありますか?ここでのベストプラクティスは次のとおりです。
(注:私自身はRuby dev/userではありませんが、ここかそこにある奇妙なシェルスクリプトを除いて、またはcompass/zurb-foundationを使用しているので、Passenger以外のオプションを利用できます。このサーバーも実稼働環境としては意図されていません。)
私が最初にこれを投稿したとき、私はセットアップのためにこのパスをたどる時間を節約しようとしていましたが、それは機能しませんでした。数日後、私はそれを試してみましたが、うまくいきました。私がしたことは:
実際に乗客をインストールするユーザーを作成します。これにはroot
を使用できると思いますが、passenger
というスタンドアロンの管理者レベルのユーザーを作成しました。また、このユーザーのすべてのリモートアクセスを無効にしました。
Sudo useradd -m -s /bin/bash passenger
新しいpassenger
ユーザーに切り替えてrvm
をインストールし、それを使用して私の好みのdefaultRuby(1.9.3-stable
):
su - passenger
curl -L https://get.rvm.io | bash
rvm install 1.9.3
パッセンジャーとApacheモジュールをインストールします。
gem install passenger
passenger-install-Apache2-module
passenger
modファイルを/etc/Apache2/mods-available
...に追加します。.load
ファイル:
# /etc/Apache2/mods-available/passenger.load
LoadModule passenger_module /home/passenger/.rvm/gems/Ruby-1.9.3-p429/gems/passenger-4.0.5/libout/Apache2/mod_passenger.so
.conf
ファイル:
# /etc/Apache2/mods-available/passenger.conf
PassengerRoot /home/passenger/.rvm/gems/Ruby-1.9.3-p429/gems/passenger-4.0.5
PassengerDefaultRuby /home/passenger/.rvm/wrappers/Ruby-1.9.3-p429/Ruby
PassengerUserSwitching on
PassengerDefaultUser www-data
PassengerDefaultGroup www-data
# Any other global-only configuration
次に、モジュールを有効にして構成テストを実行し、成功した場合はリロードします
Sudo a2enmod passenger
Sudo Apache2ctl configtest
Sudo service Apache2 graceful # if Syntax Ok from previous command
この後、必要に応じて仮想ホストを構成しました...例:
<VirtualHost *:80>
ServerName appname.yourdomain.com
ServerAdmin [email protected]
DocumentRoot /home/appuser/path/to/doc/root
PassengerSpawnMethod smart
PassengerPoolIdleTime 300
PassengerMaxRequests 500
PassengerStatThrottleRate 5
PassengerMinInstances 2
PassengerRuby /home/appuser/.rvm/rubies/Ruby-1.9.3-p429/bin/Ruby
<Directory "/home/appuser/path/to/doc/root">
Options Indexes -ExecCGI FollowSymLinks -MultiViews
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
PassengerUserSwitching
はon
であり、PassengerRuby
は別のユーザーが所有しているため、乗客はこのuser:group
としてアプリケーションを自動的に実行します。ただし、vhostレベルでユーザーとグループを設定するために使用できる特定のパッセンジャーディレクティブがあります。それらがPassengerRuby
の所有者と一致する必要があるかどうかはわかりません。
役に立った記事/ドキュメント: