Hatena::Groupmkdir

作業ログとかをメモする場所。

2012-09-07

Passenger+ApacheでSinatraやRailsで作ったアプリを動かす

| 15:24

なんだかPassengerSinatraRailsで作ったアプリを動かす設定をしたりしてあげたりすることがおおいのだけど、その都度調べ直してることが多かったのでまとめます。

環境はUbuntu 12.04を標準とします。

Passengerインストール

passengergemインストール

$ sudo gem install passenger 

これだけだとApacheで動かせないので、モジュールインストールする。

$ sudo passenger-install-apache2-module 

指示にしたがってEnterを押していくと、「必要なライブラリ類が足りないからインストールしろ」と言われたり*1モジュールビルドが始まったりする。ライブラリ類をインストールしろと言われたら言われた通りのパッケージをaptとかで入れる。きのう新しく立てたUbuntuのホストでやったら以下のパッケージが必要だった。

libcurl4-openssl-dev libssl-dev zlib1g-dev apache2-prefork-dev libapr1-dev libaprutil1-dev

モジュールビルドが終わるとApacheの設定方法が出てくる。DebianUbuntuのお作法では、モジュールのロード用のファイルと設定用のファイルを分けてmods-availableディレクトリにそれぞれ保存して、a2enmodで有効化する(mods-enabledディレクトリからシンボリックリンクを張る)みたいなのでそれに従う。

まずpassenger.load

$ sudo vim /etc/apache2/mods-available/passenger.load
LoadModule passenger_module /var/lib/gems/1.9.1/gems/passenger-3.0.17/ext/apache2/mod_passenger.so

そしてpassenger.conf

$ sudo vim /etc/apache2/mods-available/passenger.conf
PassengerRoot /var/lib/gems/1.9.1/gems/passenger-3.0.17
PassengerRuby /usr/bin/ruby1.9.1

終わったらa2enmodで有効化してapache再起動する。

$ a2enmod passenger
$ sudo service apache2 restart

サイトごとの設定

たとえば、 http://hogehoge.死ぬ.jp/*2アクセスした場合にSinatraRailsで書いた(Rackの)アプリケーションが表示されるようにしたいとする。

アプリケーション本体はどこに置いてもいいのだけど、僕はわりと/var/www/サイト名 みたいなところに置いている。普通 /var/www はdefaultのサイトのDocumentRootとして It Works! みたいなHTMLが置いてあるのだけど、これは /var/www/default に移している。今回は /var/www/hogehoge というディレクトリにいろいろ置く。

var/
  +-- wwww/
  |     +-- default/
  |           +-- index.html
  +-- hogehoge/
  |     +-- public/
  |     +-- tmp/
  |     +-- logs/
  |     +-- vendor/
  |     |     +-- bundle/
  |     ...
  ...

DebianUbuntuの場合、モジュールと同じようにVirtualHostごとに設定ファイルをsites-availableディレクトリに入れてa2ensiteで有効化するという手順を踏むのがお作法っぽい。そこでとりあえず sites-available/hogehoge というファイルに hogehoge.死ぬ.jp での設定を記述する。

$ sudo vim /etc/apache2/sites-available/hogehoge
<VirtualHost *:80>
  ServerAdmin hogehoge@example.com
  ServerName hogehoge.xn--s9j219o.jp
  DocumentRoot /var/www/hogehoge/public
  CustomLog /var/log/apache2/access-hogehoge.log combined
  ErrorLog  /var/log/apache2/error-hogehoge.log
  LogLevel warn
  SetEnv GEM_HOME /var/www/hogehoge/vendor/bundle/ruby/1.9.1
  <Directory /var/www/hogehoge/public>
    Options -Multiviews
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

ここでのポイントは、

$ bundle install --path vendor/bundle
$ GEM_HOME=vendor/bundle gem install your-gem

あと、特定のディレクトリの下で(たとえば http://hogehoge.死ぬ.jp/myapp/)でRackアプリを動かしたい場合は<VirtualHost>内に以下のようにRackBaseURIを追加する。

RackBaseURI /myapp

設定が終わったらapache再起動する。これでちゃんとアプリが動けばOK。bundlerを使っている場合はbundler自身がGemfileに書かれていないとGEM_HOMEにインストールされておらずrequireできなかったりするので注意。

*1:英語で

*2日本語ドメインなので、設定するときは http://hogehoge.xn--s9j219o.jp/ というURLを使う