Phusion Passenger is an Apache and Nginx module for deploying Ruby web applications.(such as those built on the Ruby on Rails web framework). Phusion Passenger works on any POSIX-compliant operating system,which means practically any operating system , except Microsoft Windows.
Here we are not going to discuss much about ruby on rails applications as our aim is creating an ami of an ubuntu aws instance from which we can launch an instance for developing and deploying rails applications pre-built.
Install apache2 web-server
[bash]
sudo apt-get install apache2 ( By default its DocumentRoot is /var/www/ )
[/bash]
Install mysql-server and mysql-client ( To support rails applications that access database )
[bash]sudo apt-get install mysql-server mysql-client[/bash]
Install Ruby from repository
The default ruby1.8 is missing some important files. So install ruby1.8-dev. Otherwise at some stage when using gem install, it may end up with “ Error : Failed to build gem native extensions “.
[bash]sudo apt-get install ruby1.8-dev[/bash]
Install RubyGems
Install rubygems >= 1.3.6
The package can be downloaded from here
wget http://rubyforge.org/frs/download.php/70696/rubygems-1.3.7.tgz
[bash]
tar xvzf rubygems-1.3.7.tgz
cd rubygems-1.3.7
sudo ruby setup.rb
sudo ln -s /usr/bin/gem1.8 /usr/bin/gem
[/bash]
Install Rails via rubygems
Once rubygems is installed use it to install Rails :
[bash]sudo gem install rails[/bash]
Installing Phusion Passenger
There are three ways to install Phusion Passenger :
1. By installing the Phusion Passenger gem.
2. By Downloading the source tarball from the PhusionPassenger website(passenger-x.x.x.tar.gz).
3. By installing the native Linux package (eg: Debian package)
Before installing, you will probably need to switch to the root user first. The Phusion Passenger installer will attempt to automatically detect Apache, and compile Phusion Passenger against that Apache version. It does this by looking for the apxs or apxs2 command in the PATH environment variable.
Apache installed in a non-standard location, prevent the Phusion Passenger installer from detecting Apache.To solve this, become root user and export the path of apxs.
Easiest way to install Passenger is installing via the gem
Please install the rubygems and then run the Phusion Passenger installer, by typing the following commands as root.
1.Open a terminal, and type:
[bash]gem install passenger[/bash]
2.Type:
[bash]passenger-install-apache2-module[/bash]
and follow the instructions from the installer.
The installer will :
1. Install the Apache2 module.
2. instruct how to configure Apache.
3. inform how to deploy a Ruby on Rails application.
If anything goes wrong, this installer will advise you on how to solve any problems.
The installer will ask to add the following lines to the apache2.conf file.
[bash] LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-3.0.0/
ext/apache2/mod_passenger.so PassengerRoot /usr/lib/ruby/gems/1.8/
gems/passenger-3.0.0
PassengerRuby /usr/bin/ruby1.8 [/bash]
Now consider, you have a rails application in directory /var/www/RPF_tool/. Add the following virtualhost entry to your apache configuration file
[bash]
<VirtualHost *:80>
ServerName www.yoursite.com
DocumentRoot /home/RFP_tool/public
<Directory /var/www/RFP_tool/public>
AllowOverride all
Options -MultiViews
</Directory>
</VirtualHost>
[/bash]
Restart your apache server.
Phusion Passenger installation is finished.
Installation via the source tarball
Extract the tarball to whatever location you prefer
[bash]
cd /usr/local/passenger/tar xzvf passenger-x.x.x.tar.gz
/usr/local/passenger/ passenger-x.x.x/bin/passenger-install-apache2-module
[/bash]
Please follow the instructions given by the installer. Do not remove the passenger-x.x.x folder after installation. Furthermore, the passenger-x.x.x folder must be accessible by Apache.
CREATING AN AMI OF AN EC2 INSTANCE
First you will have to install ec2-api-tools.zip from
http://www.amazon.com/gp/redirect.html/ref=aws_rc_ec2tools?location=http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip&token=A80325AA4DAB186C80828ED5138633E3F49160D9
[bash]
unzip ec2-api-tools.zip
mkdir ~/ec2
cp -rf ec2-api-tools/* ~/ec2
[/bash]
Upload your aws certificate and private-key to /mnt of the instance.
Then add the following to ~/.bashrc
[bash]
export EC2_HOME=~/ec2
export PATH=$PATH:$EC2_HOME/bin
export EC2_PRIVATE_KEY=/mnt/pk-xxxxxxxxxxxxxxxxxxx.pem
export EC2_CERT=/mnt/cert-xxxxxxxxxxxxxxxx.pem
export JAVA_HOME=/usr/local/java/ ( your JAVA_HOME here)
export PATH=~/ec2/bin:$PATH
[/bash]
If your EC2 instance is an EBS-backed one, you can use the following command to create an AMI
[bash]ec2-create-image -n your-image-name instance-id[/bash]
If your instance is an s3-backed ( instance store ) one, you will have to install ec2-ami-tools first. It can be downloaded from
http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.zip
[bash]
unzip ec2-ami-tools.zip
cp ec2-ami-tools-x.x-xxxxx/bin/* ~/ec2/bin
[/bash]
vim ~/.bashrc
export EC2_AMITOOL_HOME=~/ec2/ec2-ami-tools-1.3-56066/
Now you can use the following commands to create an AMI of your s3-backed instance
[bash] mkdir /mnt/bundle-vol/
ec2-bundle-vol -u USER-ID -c /mnt/cert-xxxxxxx.pem -k
/mnt/pk-xxxx.pem -d /mnt/bundle-vol [/bash]
( Login to your AWS account; your USER-ID is available from Account–> Security Credentials )
[bash] ec2-upload-bundle -u s3-bucket-name -a aws-access-key -s aws-secret-key -d
/mnt/bundle-vol/ -m
/mnt/bundle-vol/image.manifest.xml
ec2-register -K /mnt/pk-xxxxxx.pem -C/mnt/cert-xxxxxxx.pem s3-bucket-name/image.manifest.xml -n name-of-the-image [/bash]
To see the created images
[bash]ec2-describe-images [/bash]