Skip to content

Instantly share code, notes, and snippets.

@krames
Created December 19, 2013 21:31
Show Gist options
  • Select an option

  • Save krames/8046565 to your computer and use it in GitHub Desktop.

Select an option

Save krames/8046565 to your computer and use it in GitHub Desktop.
require 'fog'
config = {}
config[:rackspace] = {
:provider => 'rackspace',
:version => :v2,
:rackspace_username => USERNAME,
:rackspace_api_key => API_KEY,
:rackspace_region => :ord,
}
@service = Fog::Compute.new config[:rackspace]
@flavor = @service.flavors.find {|flavor| flavor.name =~ /1 GB Performance/ }
@image = @service.images.find {|image| image.name =~ /Ubuntu 12.04 LTS/}
def create_server(name)
print "Creating '#{name}'......."
server = @service.servers.bootstrap :name => name,
:flavor_id => @flavor.id,
:image_id => @image.id,
:public_key_path => '~/.ssh/fog_rsa.pub',
:private_key_path => '~/.ssh/fog_rsa'
puts "[DONE]"
server
end
def setup_webhead(web_server, db_server)
puts "BUILDING Web Head"
web_server.ssh "apt-get update"
web_server.ssh "apt-get upgrade -y"
web_server.ssh "apt-get -y install build-essential ruby1.9.1 ruby1.9.1-dev libopenssl-ruby1.9.1 git libpq-dev"
web_server.ssh "apt-get -y install libmysqlclient18 libmysqlclient-dev libmagickwand-dev libmagickcore-dev libmagickcore4-extra libgraphviz-dev libgvc5"
web_server.ssh "gem install bundler"
web_server.ssh "git clone https://github.com/krames/sxsw-demo-app"
web_server.ssh "cd sxsw-demo-app; bundle install"
web_server.ssh "echo '#{database_yml(db_server)}' > sxsw-demo-app/config/database.yml"
web_server.ssh "cd sxsw-demo-app; RAILS_ENV=production bundle exec rake db:migrate"
web_server.ssh "cd sxsw-demo-app; bundle exec rails s -d -e production; sleep 1"
end
def setup_db_server(server)
puts "BUILDING DB Server"
server.ssh "apt-get update"
server.ssh "apt-get upgrade -y"
server.ssh "debconf-set-selections <<< 'mysql-server mysql-server/root_password password junk123'"
server.ssh "debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password junk123'"
server.ssh "apt-get -y install mysql-server"
# change the bind address /etc/mysql/my.cnf
server.ssh %Q[sed -ie 's/bind-address.*/bind-address = #{server.private_ip_address}/' /etc/mysql/my.cnf]
# restart server
server.ssh "service mysql restart"
# create user
server.ssh %q[mysql -pjunk123 -e "CREATE USER 'sxsw'@'10.%' IDENTIFIED BY 'austin123'"]
# create database
server.ssh "mysql -pjunk123 -e 'CREATE DATABASE sxsw_demo'"
# grant rights
server.ssh %q[mysql -pjunk123 -e "grant all privileges on sxsw_demo.* to 'sxsw'@'10.%' identified by 'austin123'"]
end
def setup_haproxy(server, web_server)
puts "BUILDING HAProxy Server"
server.ssh "apt-get update"
server.ssh "apt-get upgrade -y"
server.ssh "apt-get -y install haproxy"
server.ssh %q[sed -ie 's/ENABLED=0/ENABLED=1/' /etc/default/haproxy]
server.ssh "echo '#{haproxy_config(web_server)}' > /etc/haproxy/haproxy.cfg"
server.ssh "service haproxy restart"
end
def database_yml(db_server)
%Q[
production:
adapter: mysql2
encoding: utf8
database: sxsw_demo
pool: 5
username: sxsw
password: austin123
host: #{db_server.private_ip_address}
port: 3306
]
end
def haproxy_config(server)
%Q[
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
#chroot /usr/share/haproxy
user haproxy
group haproxy
daemon
#debug
#quiet
stats socket /tmp/haproxy
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen web-proxy 0.0.0.0:80
mode http
balance roundrobin
server sxsw-web #{server.private_ip_address}:3000
]
end
db_server = create_server('sxsw-db')
setup_db_server(db_server)
web_server = create_server('sxsw-web')
setup_webhead(web_server, db_server)
haproxy_server = create_server('sxsw-haproxy')
setup_haproxy(haproxy_server, web_server)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment