How to: Digital Ocean + Ruby on Rails

If you haven't already come across them, Digital Ocean are a cloud hosting provider that offer a great product for insanely great prices.

Digital Ocean already have a one-click Ruby on Rails set up option when you create a new droplet but if you like to set things up yourself then follow on.

First up, install the compilation packages:

sudo apt-get install build-essential

Install Apache and MySQL:

sudo apt-get install apache2 apache2-mpm-prefork apache2-prefork-dev
sudo apt-get install mysql-server mysql-client
sudo apt-get install libmysql-ruby libmysqlclient15-dev

Install RVM and Ruby 2:

\curl -L | bash
rvm install 2.0.0-p195
gem install bundler

You might need to add the www-data user to the rvm group in order for them to get bundle access:

usermod -a -G rvm www-data

Install Passenger (including a temporary increase to the memory of the droplet):

apt-get install libcurl4-openssl-dev
gem install passenger
dd if=/dev/zero of=/swap bs=1M count=1024
mkswap /swap
swapon /swap

Add these lines to your /etc/apache2/httpd.conf file (you were probably prompted to do this during the Passenger install):

LoadModule passenger_module /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.20/buildout/apache2/
PassengerRoot /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.20
PassengerDefaultRuby /usr/local/rvm/wrappers/ruby-2.0.0-p195/ruby

Enable mod_rewrite on Apache:

a2enmod rewrite

Set up a Virtual Host (change the details to reflect your project path):

<VirtualHost *:80>
   DocumentRoot /somewhere/public    
   <Directory /somewhere/public>
      # This relaxes Apache security settings.
      AllowOverride all
      # MultiViews must be turned off.
      Options -MultiViews

Restart Apache to let all the new stuff take effect:

service apache2 restart

And now you should have everything you need to deploy a Rails app to your droplet. If I've forgotten something let me know.