ec2_setup 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .idea/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in ec2_setup.gemspec
4
+ gemspec
data/README ADDED
@@ -0,0 +1,6 @@
1
+ http://railscasts.com/episodes/245-new-gem-with-bundler
2
+
3
+
4
+ To make a gem:
5
+
6
+ gem build ec2_setup.gemspec
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "ec2_setup/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "ec2_setup"
7
+ s.version = Ec2Setup::VERSION
8
+ s.authors = ["Lee Atchison"]
9
+ s.email = ["lee@leeatchison.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Setup an EC2 instance running Amazon Linux to be a Rails webserver.}
12
+ s.description = %q{Setup an EC2 instance running Amazon Linux to be a Rails webserver.}
13
+
14
+ s.rubyforge_project = "ec2_setup"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ s.add_runtime_dependency "vlad"
24
+ end
@@ -0,0 +1,11 @@
1
+ require "ec2_setup/version"
2
+ require 'vlad'
3
+
4
+ class Ec2SetupTask < Rails::Railtie
5
+ rake_tasks do
6
+ Dir[File.join(File.dirname(__FILE__),'tasks/*.rake')].each { |f| load f }
7
+ end
8
+ end
9
+
10
+ module Ec2Setup
11
+ end
@@ -0,0 +1,3 @@
1
+ module Ec2Setup
2
+ VERSION = "0.1.1"
3
+ end
@@ -0,0 +1,138 @@
1
+ #
2
+ #
3
+ # EC2 Setup
4
+ #
5
+ #
6
+ namespace :setup do
7
+ desc "Setup a new app server on EC2 without the app. Useful for creating an EBS image. Usage: HOSTS=<ec2_server> PROMPTNAME=<promptname> [DNSNAME=<desired_name>]."
8
+ remote_task :ec2_core do
9
+ ENV["DNSNAME"] ||= ENV["HOSTS"]
10
+ if ENV["HOSTS"].nil? or ENV["HOSTS"]=="" or ENV["PROMPTNAME"].nil? or ENV["PROMPTNAME"]=="" then
11
+ puts "Usage:"
12
+ puts "rake setup:ec2_core HOSTS=<ec2_server> PROMPTNAME=<promptname> [DNSNAME=<desired_name>]"
13
+ puts "Where:"
14
+ puts " HOSTS - hostname of the EC2 instance to setup."
15
+ puts " DNSNAME - The ultimate hostname that the EC2 instance will use."
16
+ exit
17
+ end
18
+ break unless target_host == ENV["HOSTS"]
19
+ puts "Setup EC2 instance #{target_host} for application #{application}..."
20
+
21
+ #
22
+ # Yum Packages
23
+ #
24
+ packages=[
25
+ "gcc", "gcc-c++", "make",
26
+ "openssl-devel","libcurl-devel",
27
+ "libxml2","libxml2-devel",
28
+ "libxslt","libxslt-devel",
29
+ "mysql","mysql-devel",
30
+ "openssl","zlib",
31
+ "pcre","pcre-devel",
32
+ "git",
33
+ "rubygems","ruby-devel"
34
+ ]
35
+
36
+ #
37
+ # Core Gems
38
+ #
39
+ core_gems=[
40
+ "bundler",
41
+ "bluepill",
42
+ "unicorn"
43
+ ]
44
+
45
+
46
+ #
47
+ # Setup ~ec2-user and ~root
48
+ #
49
+ rsync "#{ENV['HOME']}/.ssh/id_rsa","~/.ssh/id_rsa"
50
+ rsync "config/templates/known_hosts","~/.ssh/known_hosts"
51
+ put "~/.bashrc" do
52
+ File.read("config/templates/bashrc.tmpl").gsub("%%%PROMPTNAME%%%",ENV["PROMPTNAME"])
53
+ end
54
+ run "chmod 600 ~/.bashrc ~/.ssh/known_hosts"
55
+ run "chmod 400 ~/.ssh/id_rsa"
56
+ sudo "cp ~ec2-user/.bashrc ~root/.bashrc"
57
+ sudo "cp ~ec2-user/.ssh/known_hosts ~root/.ssh/known_hosts"
58
+ sudo "cp ~ec2-user/.ssh/id_rsa ~root/.ssh/id_rsa"
59
+ sudo "chmod 600 ~root/.bashrc ~root/.ssh/known_hosts"
60
+ sudo "chmod 400 ~root/.ssh/id_rsa"
61
+ sudo "hostname #{ENV["DNSNAME"]}" if ENV["DNSNAME"]!=ENV["HOSTS"]
62
+
63
+ #
64
+ # Yum Packages
65
+ #
66
+ sudo "yum -y remove ruby"
67
+ sudo "yum -y install "+packages.join(' ')
68
+ sudo "yum -y update"
69
+
70
+
71
+ #
72
+ # Setup Users
73
+ #
74
+ sudo "groupadd -f apps"
75
+ sudo "useradd -g apps -c \"Nginx Webserver\" nginx"
76
+ sudo "useradd -g apps -c \"Unicorn Appserver\" unicorn"
77
+ sudo "useradd -g apps -c \"Resque Background Tasks\" resque"
78
+ sudo "useradd -g apps -c \"Bluepill Process Monitoring\" bluepill"
79
+ sudo "usermod -a -G apps ec2-user"
80
+
81
+ #
82
+ # Log directory setup
83
+ #
84
+ sudo "chgrp apps /var/log"
85
+ sudo "chmod 775 /var/log"
86
+
87
+ #
88
+ # Ruby & Core Gems
89
+ #
90
+ ruby_version="ruby-1.9.2-p290"
91
+ run "rm -f /tmp/#{ruby_version}.tz"
92
+ run "rm -rf /tmp/#{ruby_version}"
93
+ run "wget -O /tmp/#{ruby_version}.tz http://ftp.ruby-lang.org/pub/ruby/1.9/#{ruby_version}.tar.gz"
94
+ run "(cd /tmp;tar xzf #{ruby_version}.tz)"
95
+ run "(cd /tmp/#{ruby_version};./configure --prefix=/usr)"
96
+ run "(cd /tmp/#{ruby_version};make)"
97
+ run "(cd /tmp/#{ruby_version};sudo make install)"
98
+ sudo "gem install "+core_gems.join(' ')
99
+
100
+ #
101
+ # Nginx
102
+ #
103
+ nginx_version="nginx-1.0.8"
104
+ run "rm -f /tmp/#{nginx_version}.tz"
105
+ run "rm -rf /tmp/#{nginx_version}"
106
+ run "wget -O /tmp/#{nginx_version}.tz http://nginx.org/download/#{nginx_version}.tar.gz"
107
+ run "(cd /tmp;tar xzf #{nginx_version}.tz)"
108
+ run "(cd /tmp/#{nginx_version};./configure --prefix=/opt/nginx --with-http_ssl_module --with-http_realip_module)"
109
+ run "(cd /tmp/#{nginx_version};make)"
110
+ run "(cd /tmp/#{nginx_version};sudo make install)"
111
+ sudo "chown nginx /opt/nginx/conf/"
112
+ sudo "chgrp apps /opt/nginx/conf/"
113
+ sudo "chmod 771 /opt/nginx/conf/"
114
+ sudo "mkdir -p /var/log/nginx"
115
+ sudo "chown nginx /var/log/nginx"
116
+ sudo "chgrp apps /var/log/nginx"
117
+ sudo "chmod 771 /var/log/nginx"
118
+ sudo "rm -f /opt/nginx/conf/nginx.conf" # Don't leave the default one lying around
119
+
120
+ #
121
+ # Unicorn: Setup Application Base
122
+ #
123
+ sudo "mkdir -p /var/server"
124
+ sudo "chown unicorn /var/server"
125
+ sudo "chgrp apps /var/server"
126
+ sudo "chmod 771 /var/server"
127
+
128
+ #
129
+ # Setup Bluepill
130
+ #
131
+ sudo "mkdir -p /etc/bluepill"
132
+ sudo "chown bluepill /etc/bluepill"
133
+ sudo "chgrp apps /etc/bluepill"
134
+ sudo "chmod 771 /etc/bluepill"
135
+
136
+ puts "Setup EC2 instance #{target_host}...done"
137
+ end
138
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ec2_setup
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Lee Atchison
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-10-23 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: vlad
16
+ requirement: &70318560138920 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70318560138920
25
+ description: Setup an EC2 instance running Amazon Linux to be a Rails webserver.
26
+ email:
27
+ - lee@leeatchison.com
28
+ executables: []
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - .gitignore
33
+ - Gemfile
34
+ - README
35
+ - Rakefile
36
+ - ec2_setup.gemspec
37
+ - lib/ec2_setup.rb
38
+ - lib/ec2_setup/version.rb
39
+ - lib/tasks/ec2setup.rake
40
+ homepage: ''
41
+ licenses: []
42
+ post_install_message:
43
+ rdoc_options: []
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ! '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ! '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ requirements: []
59
+ rubyforge_project: ec2_setup
60
+ rubygems_version: 1.8.10
61
+ signing_key:
62
+ specification_version: 3
63
+ summary: Setup an EC2 instance running Amazon Linux to be a Rails webserver.
64
+ test_files: []