Phusion Passenger on Amazon EC2
Phusion Passenger has come a long way since its first public release, significantly simplifying the deployment of Ruby web applications on Apache servers, especially since the addition of support for Rack.
You can use this example Capile if you'd like to get started quickly with trying out Passenger deployments on Amazon EC2.
It is assumed that your environment has been previously configured for launching EC2 AMIs. If not, you might want to read the EC2 Getting Started Guide, or refer to the first bits of this article.
By completing the following steps, we will end up with a running Debian AMI, with Ruby 1.8.7, Rubygems 1.2.0, Apache2 and Passenger installed.
First, find the section about AWS credentials in the Capfile and replace the values with yours. These are
:keypair
,
:account_id
,
:access_key_id
,
:secret_access_key
,
:pk
and
:cert
.
Once this is done, invoke:
cap instance:start
Copy the instance id from the output of this command and use it as the value for the
:instance_id
field in the Capfile. Call
ec2-describe-instances
until the AMI has been started. Use the instance URL that comes for the
:instance_url
field in the Capfile. Next invoke:
cap instance:bootstrap
This will install Apache2 and Passenger on the instance. Once this step is complete, you can navigate to the instance URL from a browser and see the default page served by the newly installed, Passenger enabled Apache. At this point - optionally and for demonstration purposes - you can invoke:
cap instance:example_app
This will install the
Merb
gems, create a flat Merb application in the instance's
/var/www/example
directory, set it up for use with Passenger (create
public
,
log
and
tmp
directories and add a
config.ru
Rack configuration file as required by Passenger) and setup an Apache virtual host in order for Passenger to serve the application. Once this step is complete, navigate to the instance's URL and you should see a page served by Merb.
There's another couple of convenient commands in the Capfile,
cap instance:ssh
and
cap instance:stop
.