Agiley-ec2onrails 0.9.9 → 0.9.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (170) hide show
  1. data/{History.txt → CHANGELOG} +0 -0
  2. data/{COPYING.txt → COPYING} +0 -0
  3. data/Manifest +161 -0
  4. data/{website/index.txt → README.textile} +33 -5
  5. data/Rakefile +36 -4
  6. data/TODO +91 -0
  7. data/ec2onrails.gemspec +279 -0
  8. data/examples/Capfile +3 -0
  9. data/examples/deploy.rb +88 -0
  10. data/examples/s3.yml +9 -0
  11. data/lib/ec2onrails/capistrano_utils.rb +0 -11
  12. data/lib/ec2onrails/recipes.rb +165 -59
  13. data/lib/ec2onrails/version.rb +1 -1
  14. data/server/build-ec2onrails.sh +44 -0
  15. data/server/files/etc/aliases +5 -0
  16. data/server/files/etc/aliases.db +0 -0
  17. data/server/files/etc/apache2/apache2.conf +295 -0
  18. data/server/files/etc/apache2/conf.d/app.proxy_cluster.conf +7 -0
  19. data/server/files/etc/apache2/conf.d/app.proxy_frontend.conf +10 -0
  20. data/server/files/etc/apache2/mods-available/proxy.conf +18 -0
  21. data/server/files/etc/apache2/sites-available/app.common +56 -0
  22. data/server/files/etc/apache2/sites-available/app.custom +0 -0
  23. data/server/files/etc/apache2/sites-available/default +14 -0
  24. data/server/files/etc/apache2/sites-available/default-ssl +18 -0
  25. data/server/files/etc/cron.d/backup_app_db_to_s3 +6 -0
  26. data/server/files/etc/cron.daily/app +9 -0
  27. data/server/files/etc/cron.daily/logrotate_post +19 -0
  28. data/server/files/etc/cron.hourly/app +10 -0
  29. data/server/files/etc/cron.monthly/app +10 -0
  30. data/server/files/etc/cron.weekly/app +10 -0
  31. data/server/files/etc/ec2onrails/balancer_members +6 -0
  32. data/server/files/etc/ec2onrails/roles.yml +5 -0
  33. data/server/files/etc/environment +2 -0
  34. data/server/files/etc/event.d/monit +13 -0
  35. data/server/files/etc/init.d/ec2-every-startup +29 -0
  36. data/server/files/etc/init.d/ec2-first-startup +36 -0
  37. data/server/files/etc/init.d/mongrel +91 -0
  38. data/server/files/etc/init.d/nginx +78 -0
  39. data/server/files/etc/init.d/set_roles +3 -0
  40. data/server/files/etc/logrotate.d/apache2 +16 -0
  41. data/server/files/etc/logrotate.d/mongrel +11 -0
  42. data/server/files/etc/logrotate.d/nginx +11 -0
  43. data/server/files/etc/memcached.conf +47 -0
  44. data/server/files/etc/mongrel_cluster/app.yml +9 -0
  45. data/server/files/etc/monit/README +5 -0
  46. data/server/files/etc/monit/app.monitrc.erb +13 -0
  47. data/server/files/etc/monit/db_primary.monitrc.erb +10 -0
  48. data/server/files/etc/monit/memcache.monitrc +8 -0
  49. data/server/files/etc/monit/monitrc +12 -0
  50. data/server/files/etc/monit/system.monitrc +15 -0
  51. data/server/files/etc/monit/web.monitrc.erb +23 -0
  52. data/server/files/etc/motd.tail +13 -0
  53. data/server/files/etc/mysql/my.cnf +149 -0
  54. data/server/files/etc/nginx/nginx.conf +296 -0
  55. data/server/files/etc/postfix/main.cf +4 -0
  56. data/server/files/etc/rc0.d/K10mongrel +1 -0
  57. data/server/files/etc/rc1.d/K10mongrel +1 -0
  58. data/server/files/etc/rc2.d/S90mongrel +1 -0
  59. data/server/files/etc/rc3.d/S90mongrel +1 -0
  60. data/server/files/etc/rc4.d/S90mongrel +1 -0
  61. data/server/files/etc/rc5.d/S90mongrel +1 -0
  62. data/server/files/etc/rc6.d/K10mongrel +1 -0
  63. data/server/files/etc/rcS.d/S91ec2-first-startup +1 -0
  64. data/server/files/etc/rcS.d/S92ec2-every-startup +1 -0
  65. data/server/files/etc/rcS.d/S99set_roles +1 -0
  66. data/server/files/etc/ssh/sshd_config +94 -0
  67. data/server/files/etc/sudoers +1 -0
  68. data/server/files/etc/sudoers.full_access +26 -0
  69. data/server/files/etc/sudoers.restricted_access +28 -0
  70. data/server/files/etc/syslog.conf +69 -0
  71. data/server/files/usr/local/ec2onrails/COPYING +339 -0
  72. data/server/files/usr/local/ec2onrails/bin/archive_file.rb +44 -0
  73. data/server/files/usr/local/ec2onrails/bin/backup_app_db.rb +68 -0
  74. data/server/files/usr/local/ec2onrails/bin/init_services.rb +57 -0
  75. data/server/files/usr/local/ec2onrails/bin/mongrel_start +8 -0
  76. data/server/files/usr/local/ec2onrails/bin/mongrel_stop +8 -0
  77. data/server/files/usr/local/ec2onrails/bin/optimize_mysql.rb +339 -0
  78. data/server/files/usr/local/ec2onrails/bin/rails_env +35 -0
  79. data/server/files/usr/local/ec2onrails/bin/rebundle.sh +70 -0
  80. data/server/files/usr/local/ec2onrails/bin/restore_app_db.rb +58 -0
  81. data/server/files/usr/local/ec2onrails/bin/set_rails_env +40 -0
  82. data/server/files/usr/local/ec2onrails/bin/set_roles.rb +76 -0
  83. data/server/files/usr/local/ec2onrails/bin/setup_web_proxy.rb +106 -0
  84. data/server/files/usr/local/ec2onrails/config +30 -0
  85. data/server/files/usr/local/ec2onrails/lib/mysql_helper.rb +82 -0
  86. data/server/files/usr/local/ec2onrails/lib/roles_helper.rb +137 -0
  87. data/server/files/usr/local/ec2onrails/lib/s3_helper.rb +126 -0
  88. data/server/files/usr/local/ec2onrails/lib/utils.rb +16 -0
  89. data/server/files/usr/local/ec2onrails/lib/vendor/ini.rb +268 -0
  90. data/server/files/usr/local/ec2onrails/startup-scripts/every-startup/get-hostname.sh +27 -0
  91. data/server/files/usr/local/ec2onrails/startup-scripts/first-startup/README +5 -0
  92. data/server/files/usr/local/ec2onrails/startup-scripts/first-startup/create-dirs.sh +42 -0
  93. data/server/files/usr/local/ec2onrails/startup-scripts/first-startup/generate-default-web-cert-and-key.sh +49 -0
  94. data/server/files/usr/local/ec2onrails/startup-scripts/first-startup/misc.sh +27 -0
  95. data/server/files/usr/local/ec2onrails/startup-scripts/first-startup/prepare-mysql-data-dir.sh +24 -0
  96. data/server/files/usr/local/ec2onrails/startup-scripts/first-startup/setup-credentials.sh +29 -0
  97. data/server/rakefile.rb +222 -0
  98. data/test/autobench.conf +60 -0
  99. data/test/spec/lib/s3_helper_spec.rb +134 -0
  100. data/test/spec/lib/s3_old.yml +3 -0
  101. data/test/spec/test_files/test1 +0 -0
  102. data/test/spec/test_files/test2 +0 -0
  103. data/test/test_app/Capfile +3 -0
  104. data/test/test_app/README +182 -0
  105. data/test/test_app/Rakefile +10 -0
  106. data/test/test_app/app/controllers/application.rb +7 -0
  107. data/test/test_app/app/controllers/db_fast_controller.rb +6 -0
  108. data/test/test_app/app/controllers/fast_controller.rb +5 -0
  109. data/test/test_app/app/controllers/slow_controller.rb +6 -0
  110. data/test/test_app/app/controllers/very_slow_controller.rb +6 -0
  111. data/test/test_app/app/helpers/application_helper.rb +3 -0
  112. data/test/test_app/app/helpers/db_fast_helper.rb +2 -0
  113. data/test/test_app/app/helpers/fast_helper.rb +2 -0
  114. data/test/test_app/app/helpers/slow_helper.rb +2 -0
  115. data/test/test_app/app/helpers/very_slow_helper.rb +2 -0
  116. data/test/test_app/config/boot.rb +109 -0
  117. data/test/test_app/config/database.yml +19 -0
  118. data/test/test_app/config/deploy.rb +21 -0
  119. data/test/test_app/config/environment.rb +60 -0
  120. data/test/test_app/config/environments/development.rb +21 -0
  121. data/test/test_app/config/environments/production.rb +18 -0
  122. data/test/test_app/config/environments/test.rb +19 -0
  123. data/test/test_app/config/routes.rb +27 -0
  124. data/test/test_app/db/schema.rb +7 -0
  125. data/test/test_app/doc/README_FOR_APP +2 -0
  126. data/test/test_app/public/404.html +30 -0
  127. data/test/test_app/public/500.html +30 -0
  128. data/test/test_app/public/dispatch.cgi +10 -0
  129. data/test/test_app/public/dispatch.fcgi +24 -0
  130. data/test/test_app/public/dispatch.rb +10 -0
  131. data/test/test_app/public/favicon.ico +0 -0
  132. data/test/test_app/public/images/rails.png +0 -0
  133. data/test/test_app/public/javascripts/application.js +2 -0
  134. data/test/test_app/public/javascripts/controls.js +963 -0
  135. data/test/test_app/public/javascripts/dragdrop.js +972 -0
  136. data/test/test_app/public/javascripts/effects.js +1120 -0
  137. data/test/test_app/public/javascripts/prototype.js +4225 -0
  138. data/test/test_app/public/robots.txt +1 -0
  139. data/test/test_app/script/about +3 -0
  140. data/test/test_app/script/breakpointer +3 -0
  141. data/test/test_app/script/console +3 -0
  142. data/test/test_app/script/destroy +3 -0
  143. data/test/test_app/script/generate +3 -0
  144. data/test/test_app/script/performance/benchmarker +3 -0
  145. data/test/test_app/script/performance/profiler +3 -0
  146. data/test/test_app/script/performance/request +3 -0
  147. data/test/test_app/script/plugin +3 -0
  148. data/test/test_app/script/process/inspector +3 -0
  149. data/test/test_app/script/process/reaper +3 -0
  150. data/test/test_app/script/process/spawner +3 -0
  151. data/test/test_app/script/runner +3 -0
  152. data/test/test_app/script/server +3 -0
  153. data/test/test_app/test/functional/db_fast_controller_test.rb +18 -0
  154. data/test/test_app/test/functional/fast_controller_test.rb +18 -0
  155. data/test/test_app/test/functional/slow_controller_test.rb +18 -0
  156. data/test/test_app/test/functional/very_slow_controller_test.rb +18 -0
  157. metadata +193 -36
  158. data/Manifest.txt +0 -25
  159. data/README.txt +0 -1
  160. data/config/hoe.rb +0 -70
  161. data/config/requirements.rb +0 -17
  162. data/script/destroy +0 -14
  163. data/script/generate +0 -14
  164. data/script/txt2html +0 -74
  165. data/tasks/deployment.rake +0 -27
  166. data/tasks/environment.rake +0 -7
  167. data/tasks/website.rake +0 -17
  168. data/website/javascripts/rounded_corners_lite.inc.js +0 -285
  169. data/website/stylesheets/screen.css +0 -144
  170. data/website/template.rhtml +0 -53
@@ -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"
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,76 @@
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 'erb'
22
+ require "#{File.dirname(__FILE__)}/../lib/roles_helper"
23
+ include Ec2onrails::RolesHelper
24
+
25
+ puts "Roles: "
26
+ pp roles
27
+
28
+
29
+ # web role:
30
+ if in_role?(:web)
31
+ puts "setting up reverse proxy for web role. starting port: #{web_starting_port} up to #{web_starting_port + web_num_instances - 1}"
32
+
33
+ if system("which apache")
34
+ File.open("/etc/ec2onrails/balancer_members", "w") do |f|
35
+ roles[:app].each do |address|
36
+ web_port_range.each do |port|
37
+ f << "BalancerMember http://#{address}:#{port}\n"
38
+ end
39
+ f << "\n"
40
+ end
41
+ end
42
+ end
43
+
44
+ if system("which nginx")
45
+ File.open("/etc/ec2onrails/nginx_upstream_members", "w") do |f|
46
+ f << "upstream mongrel{\n"
47
+ roles[:app].each do |address|
48
+ web_port_range.each do |port|
49
+ f << "\tserver #{address}:#{port};\n"
50
+ end
51
+ end
52
+ f << "fair;\n}\n"
53
+ end
54
+ end
55
+ end
56
+
57
+ if in_role?(:db_primary) || in_role?(:app)
58
+ db_primary_addr = roles[:db_primary][0]
59
+ add_etc_hosts_entry('db_primary', db_primary_addr)
60
+ end
61
+
62
+
63
+ ## lets update/modify monit files, if need be
64
+ ROOT_MONIT_CONFIGS = "/etc/monit"
65
+ Dir["/etc/monit/*.monitrc.erb"].each do |filename|
66
+ #what other variables would be helpful?
67
+ @web_port_range = web_port_range
68
+ @web_starting_port = web_starting_port
69
+ @roles = roles
70
+ file = ERB.new(IO.read(filename)).result(binding)
71
+ File.open(filename.sub(/\.erb$/, ''), 'w'){|f| f << file}
72
+ end
73
+
74
+ #time to reload any changes made
75
+ sudo "monit reload"
76
+
@@ -0,0 +1,106 @@
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
@@ -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,82 @@
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 MysqlHelper
28
+
29
+ DEFAULT_CONFIG_FILE = "/mnt/app/current/config/database.yml"
30
+
31
+ attr_accessor :database
32
+ attr_accessor :user
33
+ attr_accessor :password
34
+
35
+ def initialize(config_file = DEFAULT_CONFIG_FILE, rails_env = Utils.rails_env)
36
+ @rails_env = rails_env
37
+ load_db_config(config_file)
38
+ end
39
+
40
+ def load_db_config(config_file)
41
+ db_config = YAML::load(ERB.new(File.read(config_file)).result)
42
+ if db_config && db_config[@rails_env].nil?
43
+ puts "the rails environment '#{@rails_env}' was not found in this db onfig file: #{config_file}"
44
+ end
45
+ db_config = db_config[@rails_env]
46
+ @database = db_config['database']
47
+ @user = db_config['username']
48
+ @password = db_config['password']
49
+ end
50
+
51
+ def execute_sql(sql)
52
+ raise "@user not set" unless @user
53
+ raise "sql not given" unless sql
54
+ cmd = %{mysql -u #{@user} -e "#{sql}"}
55
+ cmd += " -p'#{@password}' " unless @password.nil?
56
+ Utils.run cmd
57
+ end
58
+
59
+ def dump(out_file, reset_logs)
60
+ cmd = "mysqldump --quick --single-transaction --create-options -u#{@user} "
61
+ if reset_logs
62
+ cmd += " --flush-logs --master-data=2 --delete-master-logs "
63
+ end
64
+ cmd += " -p'#{@password}' " unless @password.nil?
65
+ cmd += " #{@database} | gzip > #{out_file}"
66
+ Utils.run cmd
67
+ end
68
+
69
+ def load_from_dump(in_file)
70
+ cmd = "gunzip -c #{in_file} | mysql -u#{@user} "
71
+ cmd += " -p'#{@password}' " unless @password.nil?
72
+ cmd += " #{@database}"
73
+ Utils.run cmd
74
+ end
75
+
76
+ def execute_binary_log(log_file)
77
+ cmd = "mysqlbinlog --database=#{@database} #{log_file} | mysql -u#{@user} "
78
+ cmd += " -p'#{@password}' " unless @password.nil?
79
+ Utils.run cmd
80
+ end
81
+ end
82
+ end