I’ve been working on a Rails application for the better part of a year (which I plan to talk about in detail in a future post), and I’ve come to the point where I really must put the thing up on a live server in order to work out the last few details. My initial plan is to deploy my application to two virtual machines. One will host the rails application itself, while the other will host the application’s Postgres database. Eventually (hopefully) if I need to scale the application I can simply deploy additional app (easy) and/or database (less easy) VMs and set up yet another VM with something like HAProxy to route requests.
I’ve decided upon 6sync as my hosting provider, due to their good performance, decent prices, and linux distro options. I’ve also decided to use Debian 6 for all of my VMs (because I rather don’t like CentOS/RHEL). For my rails app server, I plan to use Passenger Standalone. The steps I followed were as follows:
1. Spin up a new VM from 6sync’s control panel with the following options: 64-bit, Debian 6, 256MB nano instance (when I’m done testing I will bump this up, and continue to upgrade it as needed). This will create a VM with a bare-bones Debian install.
2. login as root, open up a terminal and enter the following commands:
apt-get update apt-get install sudo apt-get install ruby1.9.1 #Note: This actually installs Ruby 1.9.2 on Debian, which is what I want apt-get install buildessentials #Needed for passenger apt-get install ruby1.9.1-dev apt-get install ri1.9.1 apt-get install graphviz
3. Now, for some reason installing these packages does not cause the proper symlinks to be created in /usr/bin, so to fix that:
ln -s /usr/bin/ruby1.9.1 /usr/bin/ruby ln -s /usr/bin/gem1.9.1 /usr/bin/gem
4. Also, it would be nice to have the rubygems bin directory in my PATH — it’s actually kind of annoying that installing ruby didn’t do this automatically. So, open up the file /etc/profile and append the following to both PATH entries:
5. For the gems I’m using, I required a few prerequisites — you may or may not need these, though I’m guessing you probably do, as the gems that require them are fairly common:
#The first 3 are required for Passenger apt-get install libcurl4-openssl-dev apt-get install libssl-dev apt-get install zlib1g-dev #The nokogiri gem requires the following: apt-get install libxml2 libxml2-dev apt-get install libxslt-dev #And the postgresql driver needs this: apt-get install libpg-dev
6. Finally, install the passenger gem:
gem install passenger
Well, that wasn’t that hard… “passenger start -e production” will fire up passenger standalone on port 3000, which is ok for testing, but you’ll need to do something like “sudo passenger start -p 80 –user=non-root-user-name” to start it on port 80 when you’re ready to go live. I would plan to write a few scripts to automate things 🙂