mdh-ec2onrails 0.9.10

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.
Files changed (163) hide show
  1. data/CHANGELOG +180 -0
  2. data/COPYING +339 -0
  3. data/Manifest +162 -0
  4. data/README.textile +214 -0
  5. data/Rakefile +36 -0
  6. data/TODO +102 -0
  7. data/ec2onrails.gemspec +42 -0
  8. data/examples/Capfile +3 -0
  9. data/examples/deploy.rb +101 -0
  10. data/examples/s3.yml +9 -0
  11. data/lib/ec2onrails.rb +20 -0
  12. data/lib/ec2onrails/capistrano_utils.rb +43 -0
  13. data/lib/ec2onrails/recipes.rb +844 -0
  14. data/lib/ec2onrails/version.rb +31 -0
  15. data/server/build-ec2onrails.sh +44 -0
  16. data/server/files/etc/aliases +5 -0
  17. data/server/files/etc/aliases.db +0 -0
  18. data/server/files/etc/apache2/apache2.conf +295 -0
  19. data/server/files/etc/apache2/conf.d/app.proxy_cluster.conf +7 -0
  20. data/server/files/etc/apache2/conf.d/app.proxy_frontend.conf +10 -0
  21. data/server/files/etc/apache2/mods-available/proxy.conf +18 -0
  22. data/server/files/etc/apache2/sites-available/app.common +56 -0
  23. data/server/files/etc/apache2/sites-available/app.custom +0 -0
  24. data/server/files/etc/apache2/sites-available/default +14 -0
  25. data/server/files/etc/apache2/sites-available/default-ssl +19 -0
  26. data/server/files/etc/cron.d/backup_app_db_to_s3 +16 -0
  27. data/server/files/etc/cron.daily/app +9 -0
  28. data/server/files/etc/cron.daily/logrotate_post +19 -0
  29. data/server/files/etc/cron.hourly/app +10 -0
  30. data/server/files/etc/cron.monthly/app +10 -0
  31. data/server/files/etc/cron.weekly/app +10 -0
  32. data/server/files/etc/denyhosts.conf +628 -0
  33. data/server/files/etc/dpkg/dpkg.cfg +13 -0
  34. data/server/files/etc/ec2onrails/README +32 -0
  35. data/server/files/etc/ec2onrails/balancer_members +6 -0
  36. data/server/files/etc/ec2onrails/roles.yml +5 -0
  37. data/server/files/etc/environment +2 -0
  38. data/server/files/etc/god/app.god +35 -0
  39. data/server/files/etc/god/db.god +17 -0
  40. data/server/files/etc/god/examples/have_god_daemonize.god +18 -0
  41. data/server/files/etc/god/master.conf +35 -0
  42. data/server/files/etc/god/memcache.god +15 -0
  43. data/server/files/etc/god/notifications.god +14 -0
  44. data/server/files/etc/god/system.god +34 -0
  45. data/server/files/etc/god/web.god +36 -0
  46. data/server/files/etc/init.d/ec2-every-startup +29 -0
  47. data/server/files/etc/init.d/ec2-first-startup +36 -0
  48. data/server/files/etc/init.d/god +42 -0
  49. data/server/files/etc/init.d/nginx +78 -0
  50. data/server/files/etc/init.d/set_roles +3 -0
  51. data/server/files/etc/logrotate.d/apache2 +16 -0
  52. data/server/files/etc/logrotate.d/mongrel +11 -0
  53. data/server/files/etc/logrotate.d/nginx +11 -0
  54. data/server/files/etc/memcached.conf +47 -0
  55. data/server/files/etc/mongrel_cluster/app.yml +9 -0
  56. data/server/files/etc/motd.tail +13 -0
  57. data/server/files/etc/mysql/my.cnf +152 -0
  58. data/server/files/etc/nginx/nginx.conf +296 -0
  59. data/server/files/etc/postfix/main.cf +4 -0
  60. data/server/files/etc/rcS.d/S91ec2-first-startup +1 -0
  61. data/server/files/etc/rcS.d/S92ec2-every-startup +1 -0
  62. data/server/files/etc/rcS.d/S99set_roles +1 -0
  63. data/server/files/etc/ssh/sshd_config +94 -0
  64. data/server/files/etc/sudoers +1 -0
  65. data/server/files/etc/sudoers.full_access +26 -0
  66. data/server/files/etc/sudoers.restricted_access +28 -0
  67. data/server/files/etc/syslog.conf +69 -0
  68. data/server/files/usr/bin/god +26 -0
  69. data/server/files/usr/local/ec2onrails/COPYING +339 -0
  70. data/server/files/usr/local/ec2onrails/bin/archive_file.rb +44 -0
  71. data/server/files/usr/local/ec2onrails/bin/backup_app_db.rb +159 -0
  72. data/server/files/usr/local/ec2onrails/bin/ec2_meta_data.rb +80 -0
  73. data/server/files/usr/local/ec2onrails/bin/exec_runner +73 -0
  74. data/server/files/usr/local/ec2onrails/bin/init_services.rb +64 -0
  75. data/server/files/usr/local/ec2onrails/bin/optimize_mysql.rb +348 -0
  76. data/server/files/usr/local/ec2onrails/bin/rails_env +35 -0
  77. data/server/files/usr/local/ec2onrails/bin/rebundle.sh +70 -0
  78. data/server/files/usr/local/ec2onrails/bin/restore_app_db.rb +58 -0
  79. data/server/files/usr/local/ec2onrails/bin/set_rails_env +40 -0
  80. data/server/files/usr/local/ec2onrails/bin/set_roles.rb +87 -0
  81. data/server/files/usr/local/ec2onrails/bin/setup_web_proxy.rb +109 -0
  82. data/server/files/usr/local/ec2onrails/config +30 -0
  83. data/server/files/usr/local/ec2onrails/lib/aws_helper.rb +76 -0
  84. data/server/files/usr/local/ec2onrails/lib/god_helper.rb +129 -0
  85. data/server/files/usr/local/ec2onrails/lib/god_patch.rb +43 -0
  86. data/server/files/usr/local/ec2onrails/lib/mysql_helper.rb +101 -0
  87. data/server/files/usr/local/ec2onrails/lib/roles_helper.rb +151 -0
  88. data/server/files/usr/local/ec2onrails/lib/s3_helper.rb +99 -0
  89. data/server/files/usr/local/ec2onrails/lib/utils.rb +16 -0
  90. data/server/files/usr/local/ec2onrails/lib/vendor/ini.rb +268 -0
  91. data/server/files/usr/local/ec2onrails/startup-scripts/every-startup/get-hostname.sh +25 -0
  92. data/server/files/usr/local/ec2onrails/startup-scripts/first-startup/README +5 -0
  93. data/server/files/usr/local/ec2onrails/startup-scripts/first-startup/create-dirs.sh +39 -0
  94. data/server/files/usr/local/ec2onrails/startup-scripts/first-startup/generate-default-web-cert-and-key.sh +49 -0
  95. data/server/files/usr/local/ec2onrails/startup-scripts/first-startup/misc.sh +27 -0
  96. data/server/files/usr/local/ec2onrails/startup-scripts/first-startup/prepare-mysql-data-dir.sh +24 -0
  97. data/server/files/usr/local/ec2onrails/startup-scripts/first-startup/setup-credentials.sh +29 -0
  98. data/server/files/usr/local/ec2onrails/startup-scripts/first-startup/setup-file-permissions.sh +30 -0
  99. data/server/rakefile.rb +248 -0
  100. data/setup.rb +1585 -0
  101. data/test/autobench.conf +60 -0
  102. data/test/spec/lib/s3_helper_spec.rb +134 -0
  103. data/test/spec/lib/s3_old.yml +3 -0
  104. data/test/spec/test_files/test1 +0 -0
  105. data/test/spec/test_files/test2 +0 -0
  106. data/test/test_app/Capfile +3 -0
  107. data/test/test_app/README +182 -0
  108. data/test/test_app/Rakefile +10 -0
  109. data/test/test_app/app/controllers/application.rb +7 -0
  110. data/test/test_app/app/controllers/db_fast_controller.rb +6 -0
  111. data/test/test_app/app/controllers/fast_controller.rb +5 -0
  112. data/test/test_app/app/controllers/slow_controller.rb +6 -0
  113. data/test/test_app/app/controllers/very_slow_controller.rb +6 -0
  114. data/test/test_app/app/helpers/application_helper.rb +3 -0
  115. data/test/test_app/app/helpers/db_fast_helper.rb +2 -0
  116. data/test/test_app/app/helpers/fast_helper.rb +2 -0
  117. data/test/test_app/app/helpers/slow_helper.rb +2 -0
  118. data/test/test_app/app/helpers/very_slow_helper.rb +2 -0
  119. data/test/test_app/config/boot.rb +109 -0
  120. data/test/test_app/config/database.yml +19 -0
  121. data/test/test_app/config/deploy.rb +21 -0
  122. data/test/test_app/config/environment.rb +60 -0
  123. data/test/test_app/config/environments/development.rb +21 -0
  124. data/test/test_app/config/environments/production.rb +18 -0
  125. data/test/test_app/config/environments/test.rb +19 -0
  126. data/test/test_app/config/routes.rb +27 -0
  127. data/test/test_app/db/schema.rb +7 -0
  128. data/test/test_app/doc/README_FOR_APP +2 -0
  129. data/test/test_app/public/404.html +30 -0
  130. data/test/test_app/public/500.html +30 -0
  131. data/test/test_app/public/dispatch.cgi +10 -0
  132. data/test/test_app/public/dispatch.fcgi +24 -0
  133. data/test/test_app/public/dispatch.rb +10 -0
  134. data/test/test_app/public/favicon.ico +0 -0
  135. data/test/test_app/public/images/rails.png +0 -0
  136. data/test/test_app/public/javascripts/application.js +2 -0
  137. data/test/test_app/public/javascripts/controls.js +963 -0
  138. data/test/test_app/public/javascripts/dragdrop.js +972 -0
  139. data/test/test_app/public/javascripts/effects.js +1120 -0
  140. data/test/test_app/public/javascripts/prototype.js +4225 -0
  141. data/test/test_app/public/robots.txt +1 -0
  142. data/test/test_app/script/about +3 -0
  143. data/test/test_app/script/breakpointer +3 -0
  144. data/test/test_app/script/console +3 -0
  145. data/test/test_app/script/destroy +3 -0
  146. data/test/test_app/script/generate +3 -0
  147. data/test/test_app/script/performance/benchmarker +3 -0
  148. data/test/test_app/script/performance/profiler +3 -0
  149. data/test/test_app/script/performance/request +3 -0
  150. data/test/test_app/script/plugin +3 -0
  151. data/test/test_app/script/process/inspector +3 -0
  152. data/test/test_app/script/process/reaper +3 -0
  153. data/test/test_app/script/process/spawner +3 -0
  154. data/test/test_app/script/runner +3 -0
  155. data/test/test_app/script/server +3 -0
  156. data/test/test_app/test/functional/db_fast_controller_test.rb +18 -0
  157. data/test/test_app/test/functional/fast_controller_test.rb +18 -0
  158. data/test/test_app/test/functional/slow_controller_test.rb +18 -0
  159. data/test/test_app/test/functional/very_slow_controller_test.rb +18 -0
  160. data/test/test_app/test/test_helper.rb +28 -0
  161. data/test/test_ec2onrails.rb +11 -0
  162. data/test/test_helper.rb +2 -0
  163. metadata +274 -0
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # This file is part of EC2 on Rails.
4
+ # http://rubyforge.org/projects/ec2onrails/
5
+ #
6
+ # Copyright 2007 Paul Dowman, http://pauldowman.com/
7
+ #
8
+ # EC2 on Rails is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # EC2 on Rails is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+
22
+ # This script runs a command with RAILS_ENV set to the value that's specified
23
+ # in the the mongrel_cluster config file. If a command isn't given as an
24
+ # argument it simply prints the value of RAILS_ENV
25
+
26
+ require "yaml"
27
+
28
+ @rails_env = YAML::load_file("/etc/mongrel_cluster/app.yml")["environment"]
29
+
30
+ if ARGV.any?
31
+ result = system "env RAILS_ENV=#{@rails_env} #{ARGV.join(' ')}"
32
+ raise("error: #{$?}") unless result
33
+ else
34
+ puts @rails_env
35
+ end
@@ -0,0 +1,70 @@
1
+ #!/bin/bash
2
+
3
+ # This file is part of EC2 on Rails.
4
+ # http://rubyforge.org/projects/ec2onrails/
5
+ #
6
+ # Copyright 2007 Paul Dowman, http://pauldowman.com/
7
+ #
8
+ # EC2 on Rails is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # EC2 on Rails is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+
22
+ cleanup() {
23
+ rm -f /ec2onrails-first-boot
24
+ }
25
+
26
+ fail() {
27
+ echo "`basename $0`: ERROR: $1"
28
+ cleanup
29
+ exit 1
30
+ }
31
+
32
+ if [ `whoami` != 'root' ] ; then
33
+ fail "This script must be run as root, use 'sudo $0'".
34
+ fi
35
+
36
+ . "/usr/local/ec2onrails/config"
37
+
38
+ TIMESTAMP="`date '+%Y-%m-%d--%H-%M-%S'`"
39
+ NEW_BUCKET_NAME="$BUCKET_BASE_NAME-image-$TIMESTAMP"
40
+
41
+ if [ ! -e /usr/local/ec2-api-tools ] ; then
42
+ echo "The EC2 api command-line tools don't seem to be installed."
43
+ echo "To install them (and Java, which they require), press enter..."
44
+ read
45
+ curl http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip > /tmp/ec2-api-tools.zip || fail "couldn't download ec2-api-tools.zip"
46
+ unzip /tmp/ec2-api-tools.zip -d /usr/local || fail "couldn't unzip ec2-api-tools.zip"
47
+ chmod -R go-w /usr/local/ec2-api-tools*
48
+ ln -sf /usr/local/ec2-api-tools-* /usr/local/ec2-api-tools
49
+ aptitude install -y sun-java6-jre || fail "couldn't install Java package"
50
+ fi
51
+
52
+ echo "--> Clearing apt cache..."
53
+ aptitude clean
54
+
55
+ touch /ec2onrails-first-boot || fail
56
+
57
+ echo "--> Clearing sensitive files..."
58
+ rm -f /root/{.bash_history,.lesshst}
59
+
60
+ echo "--> Creating image..."
61
+ ec2-bundle-vol -e "/root/.ssh,/home/app/.ssh,/tmp,/mnt" -d /mnt -k "$EC2_PRIVATE_KEY" -c "$EC2_CERT" -u "$AWS_ACCOUNT_ID" || fail "ec2-bundle-vol failed"
62
+
63
+ echo "--> Uploading image to $NEW_BUCKET_NAME"
64
+ ec2-upload-bundle -b "$NEW_BUCKET_NAME" -m /mnt/image.manifest.xml -a "$AWS_ACCESS_KEY_ID" -s "$AWS_SECRET_ACCESS_KEY" || fail "ec2-upload-bundle failed"
65
+
66
+ echo "--> Registering image..."
67
+ ec2-register "$NEW_BUCKET_NAME/image.manifest.xml" || fail "ec2-register failed"
68
+
69
+ echo "--> Done."
70
+ cleanup
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # This file is part of EC2 on Rails.
4
+ # http://rubyforge.org/projects/ec2onrails/
5
+ #
6
+ # Copyright 2007 Paul Dowman, http://pauldowman.com/
7
+ #
8
+ # EC2 on Rails is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # EC2 on Rails is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+ require "rubygems"
22
+ require "optiflag"
23
+ require "fileutils"
24
+ require "#{File.dirname(__FILE__)}/../lib/mysql_helper"
25
+ require "#{File.dirname(__FILE__)}/../lib/s3_helper"
26
+ require "#{File.dirname(__FILE__)}/../lib/utils"
27
+
28
+ module CommandLineArgs extend OptiFlagSet
29
+ optional_flag "bucket"
30
+ optional_flag "dir"
31
+ and_process!
32
+ end
33
+
34
+ bucket = ARGV.flags.bucket
35
+ dir = ARGV.flags.dir || "database"
36
+ @s3 = Ec2onrails::S3Helper.new(bucket, dir)
37
+ @mysql = Ec2onrails::MysqlHelper.new
38
+ @temp_dir = "/mnt/tmp/ec2onrails-backup-#{@s3.bucket}-#{dir.gsub(/\//, "-")}"
39
+ if File.exists?(@temp_dir)
40
+ puts "Temp dir exists (#{@temp_dir}), aborting. Is another backup process running?"
41
+ exit
42
+ end
43
+
44
+ begin
45
+ FileUtils.mkdir_p @temp_dir
46
+
47
+ file = "#{@temp_dir}/dump.sql.gz"
48
+ @s3.retrieve_file(file)
49
+ @mysql.load_from_dump(file)
50
+
51
+ @s3.retrieve_files("mysql-bin.", @temp_dir)
52
+ logs = Dir.glob("#{@temp_dir}/mysql-bin.[0-9]*").sort
53
+ logs.each {|log| @mysql.execute_binary_log(log) }
54
+
55
+ @mysql.execute_sql "reset master" # TODO maybe we shouldn't do this if we're not going to delete the logs from the S3 bucket because this restarts the numbering again
56
+ ensure
57
+ FileUtils.rm_rf(@temp_dir)
58
+ end
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # This file is part of EC2 on Rails.
4
+ # http://rubyforge.org/projects/ec2onrails/
5
+ #
6
+ # Copyright 2007 Paul Dowman, http://pauldowman.com/
7
+ #
8
+ # EC2 on Rails is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # EC2 on Rails is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+
22
+ # This script updates the value of "environment" in the the mongrel_cluster
23
+ # config file.
24
+
25
+ require "yaml"
26
+ require "erb"
27
+
28
+ if ARGV.length != 1
29
+ puts "usage: set_rails_env <value>"
30
+ exit 1
31
+ end
32
+
33
+ @rails_env = ARGV[0]
34
+
35
+ # update mongrel_cluster config
36
+ config = YAML::load_file("/etc/mongrel_cluster/app.yml")
37
+ config["environment"] = @rails_env
38
+ File.open("/etc/mongrel_cluster/app.yml", 'w') do |f|
39
+ YAML.dump(config, f)
40
+ end
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # This file is part of EC2 on Rails.
4
+ # http://rubyforge.org/projects/ec2onrails/
5
+ #
6
+ # Copyright 2007 Paul Dowman, http://pauldowman.com/
7
+ #
8
+ # EC2 on Rails is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # EC2 on Rails is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ #
21
+ # To customze the apache or nginx config files, you can setup a template like:
22
+ # /etc/ec2onrails/balancer_members.erb
23
+ # /etc/ec2onrails/nginx_upstream_members.erb
24
+ #
25
+
26
+ require 'erb'
27
+ require "#{File.dirname(__FILE__)}/../lib/roles_helper"
28
+ include Ec2onrails::RolesHelper
29
+
30
+ puts "Roles: "
31
+ pp roles
32
+
33
+
34
+ # web role:
35
+ if in_role?(:web)
36
+ puts "setting up reverse proxy for web role. starting port: #{web_starting_port} up to #{web_starting_port + web_num_instances - 1}"
37
+
38
+ ## lets update/modify web balancer file templates, if need be
39
+ files_written = []
40
+ Dir["/etc/ec2onrails/*.erb"].each do |filename|
41
+ #what other variables would be helpful?
42
+ @web_port_range = web_port_range
43
+ @web_starting_port = web_starting_port
44
+ @roles = roles
45
+ file = ERB.new(IO.read(filename)).result(binding)
46
+ file_name = filename.sub(/\.erb$/, '')
47
+ files_written << file_name
48
+ File.open(file_name, 'w'){|f| f << file}
49
+ end
50
+
51
+
52
+ if system("which apache2")
53
+ apache_config_file = "/etc/ec2onrails/balancer_members"
54
+ unless files_written.index(apache_config_file)
55
+ File.open(apache_config_file, "w") do |f|
56
+ roles[:app].each do |address|
57
+ web_port_range.each do |port|
58
+ f << "BalancerMember http://#{address}:#{port}\n"
59
+ end
60
+ f << "\n"
61
+ end
62
+ end
63
+ end
64
+ end
65
+
66
+ if system("which nginx")
67
+ nginx_config_file = "/etc/ec2onrails/nginx_upstream_members"
68
+ unless files_written.index(nginx_config_file)
69
+ File.open(nginx_config_file, "w") do |f|
70
+ f << "upstream mongrel{\n"
71
+ roles[:app].each do |address|
72
+ web_port_range.each do |port|
73
+ f << "\tserver #{address}:#{port};\n"
74
+ end
75
+ end
76
+ f << "fair;\n}\n"
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ if in_role?(:db_primary) || in_role?(:app)
83
+ db_primary_addr = roles[:db_primary][0]
84
+ add_etc_hosts_entry('db_primary', db_primary_addr)
85
+ end
86
+
87
+
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # This file is part of EC2 on Rails.
4
+ # http://rubyforge.org/projects/ec2onrails/
5
+ #
6
+ # Copyright 2007 Paul Dowman, http://pauldowman.com/
7
+ #
8
+ # EC2 on Rails is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # EC2 on Rails is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ #
21
+ # enable either apache or nginx as the proxy server.
22
+ #
23
+ # to do this, we symlink a few folders to use a common name web_proxy,
24
+ # which makes the handling of log files and what not easier to keep
25
+ # track of
26
+
27
+ require "rubygems"
28
+ require "optiflag"
29
+ require "#{File.dirname(__FILE__)}/../lib/roles_helper"
30
+ include Ec2onrails::RolesHelper
31
+
32
+ PROXY_CHOICES = ["apache","nginx"]
33
+ module CommandLineArgs extend OptiFlagSet
34
+ flag "mode" do
35
+ # this is our second new clause-level modifier
36
+ value_in_set PROXY_CHOICES
37
+ description "The web proxy server that will be installed and used."
38
+ end
39
+ and_process!
40
+ end
41
+
42
+ # make the log directories even if they won't be used...
43
+ # keeps logrotate configs easy
44
+ sudo "mkdir -p -m 755 /mnt/log/apache2"
45
+ sudo "mkdir -p -m 755 /mnt/log/nginx"
46
+
47
+ case ARGV.flags.mode
48
+ when 'apache'
49
+ # it is a *LOT* easier to have apache2 pre-installed on the image
50
+ # (and have the default server configs placed after apache2 is installed)
51
+ #
52
+ # so assume it is installed by this time
53
+ # sudo "sh -c 'export DEBIAN_FRONTEND=noninteractive; aptitude -q -y install apache2'"
54
+
55
+ sudo "a2enmod deflate"
56
+ sudo "a2enmod proxy_balancer"
57
+ sudo "a2enmod proxy_http"
58
+ sudo "a2enmod rewrite"
59
+
60
+
61
+ sudo "rm -rf /var/log/apache2"
62
+ sudo "ln -sf /mnt/log/apache2 /var/log/apache2"
63
+ sudo "ln -sf /etc/init.d/apache2 /etc/init.d/web_proxy"
64
+ sudo "ln -sf /mnt/log/apache2 /mnt/log/web_proxy"
65
+
66
+ when 'nginx'
67
+ #nginx does not have a precompiled package, so....
68
+
69
+ src_dir = "#{Dir.pwd}/src"
70
+
71
+ nginx_img = "http://sysoev.ru/nginx/nginx-0.6.32.tar.gz"
72
+ fair_bal_img = "http://github.com/gnosek/nginx-upstream-fair/tarball/master"
73
+ nginx_dir = "#{src_dir}/nginx"
74
+ puts "installing nginx 6.32 (src dir: #{nginx_dir})"
75
+ run "mkdir -p -m 755 #{nginx_dir} && rm -rf #{nginx_dir}/*"
76
+ run "mkdir -p -m 755 #{nginx_dir}/modules/nginx-upstream-fair"
77
+ run "cd #{nginx_dir} && wget -q #{nginx_img} && tar -xzf nginx-0.6.32.tar.gz"
78
+
79
+ run "cd #{nginx_dir}/modules && \
80
+ wget -q #{fair_bal_img} && \
81
+ tar -xzf *nginx-upstream-fair*.tar.gz -o -C ./nginx-upstream-fair && \
82
+ mv nginx-upstream-fair/*/* nginx-upstream-fair/."
83
+
84
+ sudo "sh -c 'export DEBIAN_FRONTEND=noninteractive; aptitude -q -y install libpcre3-dev'"
85
+
86
+ run "cd #{nginx_dir}/nginx-0.6.32 && \
87
+ ./configure \
88
+ --sbin-path=/usr/sbin \
89
+ --conf-path=/etc/nginx/nginx.conf \
90
+ --pid-path=/var/run/nginx.pid \
91
+ --with-http_ssl_module \
92
+ --with-http_stub_status_module \
93
+ --add-module=#{nginx_dir}/modules/nginx-upstream-fair && \
94
+ make && \
95
+ sudo make install"
96
+
97
+ run "sudo rm -rf /usr/local/nginx/logs; sudo ln -sf /mnt/log/nginx /usr/local/nginx/logs"
98
+ #an init.d script is in the default server config... lets link it up
99
+ sudo "ln -sf /etc/init.d/nginx /etc/init.d/web_proxy"
100
+ sudo "ln -sf /mnt/log/nginx /mnt/log/web_proxy"
101
+ # sudo "ln -sf /usr/local/nginx/sbin/nginx /usr/sbin/nginx"
102
+ # sudo "ln -sf /usr/local/nginx/conf /etc/nginx"
103
+ else
104
+ puts "The mode: #{ARGV.flags.mode} was not recognized. Must be one of these #{["apache","nginx"].join(', ')}"
105
+ exit 1
106
+ end
107
+
108
+ #restart god... the config file will automatically pick up the changes but we need to restart god
109
+ sudo("/etc/init.d/god restart")
@@ -0,0 +1,30 @@
1
+ ############################################################
2
+ # This script is sourced by .bashrc and by /usr/local/ec2onrails/rebundle.sh
3
+ # You shouldn't need to change anything in here
4
+
5
+ if [ -r /mnt/aws-config/config ] ; then
6
+ . /mnt/aws-config/config
7
+ export EC2_PRIVATE_KEY="/mnt/aws-config/$KEY_FILE_NAME"
8
+ export EC2_CERT="/mnt/aws-config/$CERT_FILE_NAME"
9
+
10
+ fi
11
+
12
+ export EC2_HOME=/usr/local/ec2-api-tools
13
+ export PATH="$PATH:$EC2_HOME/bin"
14
+
15
+ export JAVA_HOME="/usr/lib/jvm/java-6-sun"
16
+
17
+ # Set the bash prompt to include the rails environment name
18
+ case "$TERM" in
19
+ xterm-color)
20
+ PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]-\[\033[01;35m\]`/usr/local/ec2onrails/bin/rails_env`\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
21
+ ;;
22
+ *)
23
+ PS1='${debian_chroot:+($debian_chroot)}\u@\h-`/usr/local/ec2onrails/bin/rails_env`:\w\$ '
24
+ ;;
25
+ esac
26
+
27
+ # Set some useful aliases
28
+ alias app="pushd /mnt/app/current && sudo su app && popd"
29
+ alias log="tail -f /mnt/app/current/log/`/usr/local/ec2onrails/bin/rails_env`.log"
30
+ alias logs="tail -f /mnt/app/current/log/*.log /mnt/log/syslog /mnt/log/*.log /mnt/log/*/*.log /mnt/log/*/*/.log"
@@ -0,0 +1,76 @@
1
+ # This file is part of EC2 on Rails.
2
+ # http://rubyforge.org/projects/ec2onrails/
3
+ #
4
+ # Copyright 2007 Paul Dowman, http://pauldowman.com/
5
+ #
6
+ # EC2 on Rails is free software; you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation; either version 2 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # EC2 on Rails is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+ require 'rubygems'
20
+ require 'aws/s3'
21
+ require 'yaml'
22
+ require 'erb'
23
+ require 'fileutils'
24
+ require "#{File.dirname(__FILE__)}/utils"
25
+
26
+ module Ec2onrails
27
+ class AwsHelper
28
+
29
+ DEFAULT_CONFIG_FILE = "/mnt/app/current/config/aws.yml"
30
+ DEFAULT_CONFIG_FILE_OLD = "/mnt/app/current/config/s3.yml"
31
+
32
+ # make attributes available for specs
33
+ attr_accessor :config_file
34
+ attr_accessor :rails_env
35
+ attr_accessor :aws_access_key
36
+ attr_accessor :aws_secret_access_key
37
+ attr_accessor :bucket_base_name
38
+
39
+ def initialize(config_file = AwsHelper.default_config_file, rails_env = Utils.rails_env)
40
+ @rails_env = rails_env
41
+ @config_file = config_file
42
+
43
+ if File.exists?(@config_file)
44
+ aws_config = YAML::load(ERB.new(File.read(@config_file)).result)
45
+
46
+ # try to load the section for the current RAILS_ENV
47
+ section = aws_config[@rails_env]
48
+ if section.nil?
49
+ # fall back to keys at the root of the tree
50
+ section = aws_config
51
+ end
52
+
53
+ @aws_access_key = section['aws_access_key']
54
+ @aws_secret_access_key = section['aws_secret_access_key']
55
+ @bucket_base_name = section['bucket_base_name']
56
+ else
57
+ if !File.exists?('/mnt/aws-config/config')
58
+ raise "Can't find either #{@config_file} or /mnt/aws-config/config"
59
+ end
60
+ @aws_access_key = get_bash_config('AWS_ACCESS_KEY_ID')
61
+ @aws_secret_access_key = get_bash_config('AWS_SECRET_ACCESS_KEY')
62
+ @bucket_base_name = get_bash_config('BUCKET_BASE_NAME')
63
+ end
64
+ end
65
+
66
+ # load an env value from the shared config file
67
+ def get_bash_config(name)
68
+ `bash -c 'source /mnt/aws-config/config; echo $#{name}'`.strip
69
+ end
70
+
71
+ def self.default_config_file
72
+ File.exists?(DEFAULT_CONFIG_FILE) ? DEFAULT_CONFIG_FILE : DEFAULT_CONFIG_FILE_OLD
73
+ end
74
+
75
+ end
76
+ end