mystix
3/21/2011 - 2:00 PM

Rackspace Ubuntu -- RVM + PostgreSQL + Passenger + NGiNX setup script

Rackspace Ubuntu -- RVM + PostgreSQL + Passenger + NGiNX setup script

# run this script on a fresh Ubuntu server installation as non-root user


# version numbers for various packages
NGINX_VERSION=1.0.8

# copy public ssh key to server's authorized_keys keychain for simple ssh logins
#mkdir -p ~/.ssh
#echo -e '<your ssh public key here>' > ~/.ssh/authorized_keys


# setup .gemrc
echo -e '---
:verbose: true 
:bulk_threshold: 1000 
:sources:
- http://rubygems.org
- http://gems.github.com
gem: --no-ri --no-rdoc
:benchmark: false
:update_sources: true 
:backtrace: false' > ~/.gemrc


# install aptitude
sudo apt-get install aptitude


# update ubuntu repos
sudo aptitude update
sudo aptitude -y dist-upgrade


# setup rvm / postgresql / nginx pre-requisites + useful libraries
sudo aptitude -y install build-essential git curl vim rdate htop python-software-properties


# install recommended dependencies as suggested by `rvm notes`
sudo aptitude -y install bison openssl libreadline6 libreadline6-dev zlib1g zlib1g-dev libssl-dev libyaml-dev sqlite3 libsqlite3-0 libxml2-dev libxslt-dev autoconf subversion libcurl4-openssl-dev


# install + configure sshguard
sudo aptitude install sshguard
sudo iptables -N sshguard # for regular IPv4 support
sudo ip6tables -N sshguard # for IPv6 support as well
sudo iptables -A INPUT -j sshguard # block any IPv4 traffic from abusers
sudo ip6tables -A INPUT -j sshguard # block any IPv6 traffic from abusers
sudo iptables-save # save updated iptables configuration


# install PostgreSQL
sudo add-apt-repository ppa:pitti/postgresql # install PostgreSQL PPA ((P)ersonal (P)ackage (A)rchive)
sudo aptitude update
sudo aptitude -y install postgresql libpq-dev


# download + unzip nginx source
wget http://nginx.org/download/nginx-$NGINX_VERSION.tar.gz -O- | tar xz


# setup new group "wheel" for sudo users
echo Refer to http://articles.slicehost.com/2010/10/18/ubuntu-maverick-setup-part-1#newuser
echo to setup new "wheel" group + sudo users.
# install rvm
bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)


# install ruby 1.9.2 + some global gems
rvm install 1.9.2
rvm use 1.9.2@global
gem install awesome_print map_by_method wirble bundler builder pg cheat
gem install -v2.1.2 builder


# install Rails
rvm gemset create rails3
rvm use 1.9.2@rails3 --default
gem install rails


# install passenger + nginx
gem install passenger
passenger-install-nginx-module # press Enter to accept, then choose option 2 in order to compile nginx with ssl support


# configure nginx startup script
sudo mkdir /opt/nginx/init.d
sudo wget --no-check-certificate http://github.com/ascarter/nginx-ubuntu-rvm/raw/master/nginx -O /opt/nginx/init.d/nginx
sudo chmod +x /opt/nginx/init.d/nginx
sudo ln -s /opt/nginx/init.d/nginx /etc/init.d/nginx
sudo /etc/init.d/nginx start
sudo /etc/init.d/nginx status
sudo /etc/init.d/nginx stop
sudo /usr/sbin/update-rc.d -f nginx defaults


# remind user to setup rvm group -- run "rvm requirements" for more info
echo Remember to add new sudo user to "rvm" group as well.