Skip to content

Instantly share code, notes, and snippets.

@KushalP
Forked from kylebragger/new_server.sh
Created June 14, 2010 18:16
Show Gist options
  • Save KushalP/438052 to your computer and use it in GitHub Desktop.
Save KushalP/438052 to your computer and use it in GitHub Desktop.
after running:
- sudo gem install rails --no-ri --no-rdoc
- mkdir -p /var/www
- set up nginx and virtual host
#!/bin/sh
#
# new_server.sh
# Author: Sam Soffes
# Created: 02/25/2010
# Updated: 05/26/2010
#
# This script installs everything needed to run a Ruby on Rails application on
# Nginx (with Passenger) and PostgreSQL on CentOS 5.4 and 5.5. init.d scripts are installed
# for Ngnix and PostgreSQL as well. Git and Bundler are also installed as many
# applications use Bundler for gem dependencies and git is often used in Gemfiles.
# ImageMagick is also installed. Port 80 and 443 are also opened in IPTables.
#
# The install takes about 20 minutes on average.
#
# All of the versions are the latest as of 05/25/2010 (with the exception of Nginx due
# to an incompatibility with Passenger). The lastest patch level for Ruby 1.8.7 is used.
# This is due to some applications having incompatibilities with Ruby 1.9.1.
#
# To easily add a new virtual host, add a file with `.conf` as its extension to
# `/usr/local/nginx/conf/virtual_hosts/`.
#
# Example virtual host: http://gist.github.com/314883#file_example.conf
#
# To run this script, simply run the following commands as root:
# $ wget http://gist.github.com/raw/314865/new_server.sh
# $ chmod +x new_server.sh
# $ ./new_server.sh
#
# You will need to press "y" and enter twice when yum prompts you to install updates and
# necessary packages at the beginning. You can leave it and let it do its thing after that.
#
# General
set -e
# Note: changing prefix doesn't quite work due to my lack of shell scripting knowledge,
# so don't change it :)
export PREFIX=/usr/local
cd ~
# Install necessary dependencies all at once
yum update
yum install gcc gcc-c++ make zlib-devel pcre-devel.x86_64 openssl-devel.x86_64 readline-devel libpng-devel libjpeg-devel libtiff-devel libwmf-devel lcms-devel freetype-devel ghostscript-devel curl-devel libxslt-devel
# Git
wget http://kernel.org/pub/software/scm/git/git-1.7.1.tar.gz -O- | tar xz
cd git-1.7.1
./configure --prefix=$PREFIX
make
make install
cd ..
# Ruby
wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p249.tar.gz -O- | tar xz
cd ruby-1.8.7-p249
./configure --prefix=$PREFIX
make
make install
cd ..
# RubyGems
wget http://production.cf.rubygems.org/rubygems/rubygems-1.3.6.tgz -O- | tar xz
cd rubygems-1.3.6
ruby setup.rb
cd ..
# Nginx with SSL and Passenger
gem install passenger --version=2.2.11 --no-ri --no-rdoc
wget http://nginx.org/download/nginx-0.8.37.tar.gz -O- | tar xz
cd nginx-0.8.37
./configure --with-http_ssl_module --add-module=/usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.11/ext/nginx
make
make install
cd ..
wget -d http://gist.github.com/raw/143136/nginx
mv nginx /etc/init.d/nginx
chmod +x /etc/init.d/nginx
chkconfig --add nginx
groupadd nginx
useradd nginx -g nginx
rm -f $PREFIX/nginx/conf/nginx.conf
wget -d http://gist.github.com/raw/314883/nginx.conf
mv nginx.conf $PREFIX/nginx/conf/nginx.conf
mkdir $PREFIX/nginx/conf/virtual_hosts
# PostgreSQL
wget http://wwwmaster.postgresql.org/redir/198/h/source/v8.4.4/postgresql-8.4.4.tar.gz -O- | tar xz
cd postgresql-8.4.4
./configure --prefix=$PREFIX/pgsql --with-openssl
gmake
gmake install
cd contrib
gmake all
gmake install
cd ..
cp contrib/start-scripts/linux /etc/init.d/postgresql
chmod +x /etc/init.d/postgresql
chkconfig --add postgresql
cd ..
adduser postgres
echo 'PATH=$PATH:/usr/local/pgsql/bin' > /etc/profile.d/postgresql.sh
echo 'export PATH;' >> /etc/profile.d/postgresql.sh
chmod +x /etc/profile.d/postgresql.sh
mkdir -p /var/log/pgsql
touch /var/log/pgsql/pgsql.log
chown -R postgres:postgres /var/log/pgsql/
mkdir -p $PREFIX/pgsql/data
chown -R postgres:postgres $PREFIX/pgsql/data
sudo -u postgres $PREFIX/pgsql/bin/initdb -U postgres -E=UTF8 $PREFIX/pgsql/data
# ImageMagick
wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.6.2-4.tar.gz -O- | tar xz
wget http://sourceforge.net/projects/gs-fonts/files/gs-fonts/8.11%20%28base%2035%2C%20GPL%29/ghostscript-fonts-std-8.11.tar.gz/download -O- | tar xz
mv -f fonts $PREFIX/share/ghostscript
cd ImageMagick-6.6.2-4
./configure --prefix=$PREFIX --disable-static --with-modules --without-perl --without-magick-plus-plus --with-quantum-depth=8 --with-gs-font-dir=$PREFIX/share/ghostscript/fonts
make
make install
cd ..
# Bundler
gem install bundler --no-ri --no-rdoc
# Clean up
rm -rf git-1.7.1 ruby-1.8.7-p249 rubygems-1.3.6 nginx-0.8.37 postgresql-8.4.4 ImageMagick-6.6.2-0
# TODO but what about fonts/ ?
# Open ports
/sbin/iptables -I INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/iptables -I OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/iptables -I OUTPUT -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
service iptables save
# Start everything up
service postgresql start
service nginx start
#!/bin/sh
#
# z_after.sh
# Author: Sam Soffes
# Created: 02/25/2010
# Updated: 05/26/2010
#
# This script is more specific to my needs. I run it after new_server.sh.
# To get the pg gem to install, I generally have to restart my shell so
# the path to pg_config works.
#
useradd deploy -g nginx
mkdir -p /var/www
chown -R deploy /var/www
chgrp -R nginx /var/www
chmod -R 775 /var/www
yum install sqlite-devel
gem install pg --no-ri --no-rdoc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment