Created
December 19, 2013 21:31
-
-
Save krames/8046565 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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