ec2onrails 0.9.8.1 → 0.9.9
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +21 -3
- data/config/hoe.rb +1 -1
- data/lib/ec2onrails/recipes.rb +14 -8
- data/lib/ec2onrails/version.rb +6 -5
- data/website/index.html +77 -88
- data/website/index.txt +67 -83
- metadata +8 -5
data/History.txt
CHANGED
@@ -1,12 +1,30 @@
|
|
1
|
-
== 0.9.
|
1
|
+
== 0.9.9 2008-07-01
|
2
|
+
|
3
|
+
* ami-c9bc58a0 (32-bit) and ami-cbbc58a2 (64-bit)
|
4
|
+
* This is another test release, still not intended to be production-ready. Look for version 1.0. Almost there!!
|
5
|
+
* Updated to Ubuntu 8.04 "Hardy"
|
6
|
+
* Added new required option to :ec2onrails_config in deploy.rb: ec2onrails_config[:archive_to_bucket_subdir] is used by the ec2onrails:db:archive Capistrano task. See http://ec2onrails.rubyforge.org/svn/trunk/documentation/examples/deploy.rb
|
7
|
+
* Database backup script parameters changed, now takes --reset to reset the binary logs, no longer takes --no-reset (not resetting the binary logs is now the default)
|
8
|
+
* Database backup script no longer resets binary log file numbering
|
9
|
+
* Now includes Rails 2.1.0 (still includes 2.0.2 and 1.2.6)
|
10
|
+
* Incremental database backup frequency increased to every 5 minutes since it's very inexpensive to do
|
11
|
+
* No longer randomize passwords on startup since they're disabled already
|
12
|
+
* Installed git-core package
|
13
|
+
* MySQL backup and restore scripts now use /mnt/tmp instead of /tmp for temp files in case database dump files are huge
|
14
|
+
* MySQL backup now uses --create-options option on mysqldump to preserve MySQL-specific create table options
|
15
|
+
* Built with ec2ubuntu build script version 68 (http://alestic.com)
|
16
|
+
* Updated Capistrano tasks to work with Capistrano 2.4.3
|
17
|
+
|
18
|
+
|
19
|
+
== 0.9.8.1 2008-05-20
|
2
20
|
|
3
21
|
* ami-b657b2df (32-bit) and ami-8957b2e0 (64-bit) (same AMI's as 0.9.8, this is an update to the RubyGem only)
|
4
22
|
* This is another test release, still not intended to be production-ready. Look for version 1.0. Almost there!!
|
5
23
|
* Bug fix: if :ec2onrails[:enable_ssl] = true the setup task fails due to /etc/init.d/apache2 not executable
|
6
|
-
* Bug fix: retry
|
24
|
+
* Bug fix: retry if needed on the first mysqld startup, because on first startup sometimes the /etc/init.d/mysql startup script thinks it failed because mysqld took too long to physically write the logs full.
|
7
25
|
|
8
26
|
|
9
|
-
== 0.9.8
|
27
|
+
== 0.9.8 2008-05-19
|
10
28
|
|
11
29
|
* ami-b657b2df (32-bit) and ami-8957b2e0 (64-bit)
|
12
30
|
* This is another test release, still not intended to be production-ready. Look for version 1.0. Almost there!!
|
data/config/hoe.rb
CHANGED
@@ -59,7 +59,7 @@ hoe = Hoe.new(GEM_NAME, VERS) do |p|
|
|
59
59
|
|
60
60
|
# == Optional
|
61
61
|
p.changes = p.paragraphs_of("History.txt", 0..1).join("\\n\\n")
|
62
|
-
p.extra_deps = [['capistrano', '
|
62
|
+
p.extra_deps = [['capistrano', '= 2.4.3'], ['archive-tar-minitar', '>= 0.5.1'], ['optiflag', '>= 0.6.5']] # An array of rubygem dependencies [name, version], e.g. [ ['active_support', '>= 1.3.1'] ]
|
63
63
|
|
64
64
|
#p.spec_extras = {} # A hash of extra values to set in the gemspec.
|
65
65
|
|
data/lib/ec2onrails/recipes.rb
CHANGED
@@ -64,7 +64,8 @@ Capistrano::Configuration.instance.load do
|
|
64
64
|
DESC
|
65
65
|
task :start, :roles => :app_admin do
|
66
66
|
run_init_script("mongrel", "start")
|
67
|
-
|
67
|
+
run "sleep 30" # give the service 30 seconds to start before attempting to monitor it
|
68
|
+
sudo "monit -g app monitor all"
|
68
69
|
end
|
69
70
|
|
70
71
|
desc <<-DESC
|
@@ -169,7 +170,7 @@ Capistrano::Configuration.instance.load do
|
|
169
170
|
unless hostnames_for_role(:db, :primary => true).empty?
|
170
171
|
db_config = YAML::load(ERB.new(File.read("config/database.yml")).result)[rails_env.to_s]
|
171
172
|
cfg[:db_name] = db_config['database']
|
172
|
-
cfg[:db_user] = db_config['username']
|
173
|
+
cfg[:db_user] = db_config['username'] || db_config['user']
|
173
174
|
cfg[:db_password] = db_config['password']
|
174
175
|
cfg[:db_host] = db_config['host']
|
175
176
|
cfg[:db_socket] = db_config['socket']
|
@@ -197,6 +198,11 @@ Capistrano::Configuration.instance.load do
|
|
197
198
|
on_rollback { drop }
|
198
199
|
load_config
|
199
200
|
start
|
201
|
+
|
202
|
+
# For some reason the default db on Hardy contains users with '' as the name.
|
203
|
+
# This causes authentication problems when connecting from localhost
|
204
|
+
run %{mysql -u root -D mysql -e "delete from user where User = ''; flush privileges;"}
|
205
|
+
|
200
206
|
run %{mysql -u root -e "create database if not exists #{cfg[:db_name]};"}
|
201
207
|
run %{mysql -u root -e "grant all on #{cfg[:db_name]}.* to '#{cfg[:db_user]}'@'%' identified by '#{cfg[:db_password]}';"}
|
202
208
|
run %{mysql -u root -e "grant reload on *.* to '#{cfg[:db_user]}'@'%' identified by '#{cfg[:db_password]}';"}
|
@@ -204,7 +210,7 @@ Capistrano::Configuration.instance.load do
|
|
204
210
|
end
|
205
211
|
|
206
212
|
desc <<-DESC
|
207
|
-
Make sure the MySQL server has been started, just in case the db role
|
213
|
+
[internal] Make sure the MySQL server has been started, just in case the db role
|
208
214
|
hasn't been set, e.g. when called from ec2onrails:setup.
|
209
215
|
(But don't enable monitoring on it.)
|
210
216
|
DESC
|
@@ -212,7 +218,7 @@ Capistrano::Configuration.instance.load do
|
|
212
218
|
sudo "chmod a+x /etc/init.d/mysql"
|
213
219
|
# The mysql init script can fail on the first startup if mysql takes too long
|
214
220
|
# to create the logfiles, so try again
|
215
|
-
sudo "/etc/init.d/mysql start || (sleep 10 && /etc/init.d/mysql start)"
|
221
|
+
sudo "sh -c '/etc/init.d/mysql start || (sleep 10 && /etc/init.d/mysql start)'"
|
216
222
|
end
|
217
223
|
|
218
224
|
desc <<-DESC
|
@@ -246,10 +252,10 @@ Capistrano::Configuration.instance.load do
|
|
246
252
|
desc <<-DESC
|
247
253
|
Dump the MySQL database to the S3 bucket specified by \
|
248
254
|
ec2onrails_config[:archive_to_bucket]. The filename will be \
|
249
|
-
"
|
255
|
+
"database-archive/<timestamp>/dump.sql.gz".
|
250
256
|
DESC
|
251
257
|
task :archive, :roles => :db do
|
252
|
-
run "/usr/local/ec2onrails/bin/backup_app_db.rb --
|
258
|
+
run "/usr/local/ec2onrails/bin/backup_app_db.rb --bucket #{cfg[:archive_to_bucket]} --dir #{cfg[:archive_to_bucket_subdir]}"
|
253
259
|
end
|
254
260
|
|
255
261
|
desc <<-DESC
|
@@ -267,7 +273,7 @@ Capistrano::Configuration.instance.load do
|
|
267
273
|
make sense).
|
268
274
|
DESC
|
269
275
|
task :init_backup, :roles => :db do
|
270
|
-
run "/usr/local/ec2onrails/bin/backup_app_db.rb"
|
276
|
+
run "/usr/local/ec2onrails/bin/backup_app_db.rb --reset"
|
271
277
|
end
|
272
278
|
end
|
273
279
|
|
@@ -435,7 +441,7 @@ Capistrano::Configuration.instance.load do
|
|
435
441
|
Set the email address that mail to the admin user forwards to.
|
436
442
|
DESC
|
437
443
|
task :set_admin_mail_forward_address, :roles => all_admin_role_names do
|
438
|
-
put cfg[:admin_mail_forward_address], "/home/admin/.forward"
|
444
|
+
put cfg[:admin_mail_forward_address], "/home/admin/.forward" if cfg[:admin_mail_forward_address]
|
439
445
|
end
|
440
446
|
|
441
447
|
desc <<-DESC
|
data/lib/ec2onrails/version.rb
CHANGED
@@ -20,11 +20,12 @@ module Ec2onrails #:nodoc:
|
|
20
20
|
module VERSION #:nodoc:
|
21
21
|
MAJOR = 0
|
22
22
|
MINOR = 9
|
23
|
-
TINY =
|
24
|
-
GEM_UPDATE =
|
25
|
-
STRING = [MAJOR, MINOR, TINY, GEM_UPDATE].join('.')
|
23
|
+
TINY = 9
|
24
|
+
# GEM_UPDATE = 0
|
25
|
+
# STRING = [MAJOR, MINOR, TINY, GEM_UPDATE].join('.')
|
26
|
+
STRING = [MAJOR, MINOR, TINY].join('.')
|
26
27
|
|
27
|
-
AMI_ID_32_BIT = 'ami-
|
28
|
-
AMI_ID_64_BIT = 'ami-
|
28
|
+
AMI_ID_32_BIT = 'ami-c9bc58a0'
|
29
|
+
AMI_ID_64_BIT = 'ami-cbbc58a2'
|
29
30
|
end
|
30
31
|
end
|
data/website/index.html
CHANGED
@@ -33,7 +33,7 @@
|
|
33
33
|
<h1>EC2 on Rails</h1>
|
34
34
|
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/ec2onrails"; return false'>
|
35
35
|
<p>Get Version</p>
|
36
|
-
<a href="http://rubyforge.org/projects/ec2onrails" class="numbers">0.9.
|
36
|
+
<a href="http://rubyforge.org/projects/ec2onrails" class="numbers">0.9.9</a>
|
37
37
|
</div>
|
38
38
|
<h2>Deploy a Ruby on Rails app on <span class="caps">EC2</span> in five minutes</h2>
|
39
39
|
|
@@ -44,11 +44,19 @@ that’s ready to run a standard Ruby on Rails application with little or no
|
|
44
44
|
It’s a Ruby on Rails <a href="http://en.wikipedia.org/wiki/Virtual_appliance">virtual appliance</a>.</p>
|
45
45
|
|
46
46
|
|
47
|
-
<p>If you have an <span class="caps">EC2</span> account and
|
47
|
+
<p>If you have an <span class="caps">EC2</span> account and can start <span class="caps">EC2</span> instances you’re five minutes away from deploying
|
48
48
|
your Rails app.</p>
|
49
49
|
|
50
50
|
|
51
|
-
<p><
|
51
|
+
<p><span class="caps">EC2</span> on Rails is <a href="http://gettingreal.37signals.com/ch04_Make_Opinionated_Software.php">opinionated software</a>:
|
52
|
+
the opinion is that for many rails apps the server setup can be generalized
|
53
|
+
and shared the same way as the web application framework itself. For many people (Twitter, this isn’t for you)
|
54
|
+
the server image can be treated the same way as other shared libraries. And if the day comes when your needs are
|
55
|
+
unique enough that <span class="caps">EC2</span> on Rails can’t be configured to work for you then you can bundle your own image from it
|
56
|
+
or fork the build source and customize it.</p>
|
57
|
+
|
58
|
+
|
59
|
+
<p>But until then, why spend your time configuring servers?</p>
|
52
60
|
|
53
61
|
|
54
62
|
<p>Features of the <span class="caps">EC2</span> image:</p>
|
@@ -56,34 +64,42 @@ your Rails app.</p>
|
|
56
64
|
|
57
65
|
<ul>
|
58
66
|
<li>Ready to deploy a Rails app with little or no configuration of the server required</li>
|
59
|
-
<li>Automatic backup of MySQL database to S3 (full backup nightly + incremental backup using binary logs every
|
67
|
+
<li>Automatic backup of MySQL database to S3 (full backup nightly + incremental backup using binary logs every 5 minutes)</li>
|
60
68
|
<li>Capistrano tasks to customize the server image, archive and restore the database to/from S3, and more (available as a rubygem)</li>
|
61
69
|
<li>Mongrel_cluster behind Apache 2.2, configured according to
|
62
70
|
<a href="http://blog.codahale.com/2006/06/19/time-for-a-grown-up-server-rails-mongrel-apache-capistrano-and-you/">Coda Hale’s excellent guide</a></li>
|
63
|
-
<li>Ruby on Rails 2.0.2 and 1.2.6</li>
|
71
|
+
<li>Ruby on Rails 2.1.0, 2.0.2 and 1.2.6</li>
|
64
72
|
<li>Ruby 1.8.6</li>
|
65
73
|
<li>MySQL 5</li>
|
66
74
|
<li><a href="http://www.danga.com/memcached/">memcached</a></li>
|
67
|
-
<li><a href="http://www.tildeslash.com/monit/">monit</a> system
|
68
|
-
<li>Ubuntu
|
75
|
+
<li><a href="http://www.tildeslash.com/monit/">monit</a> configured to monitor apache, mongrel, mysql, memcached, drive space and system load</li>
|
76
|
+
<li>Ubuntu 8.04 <span class="caps">LTS</span> “Hardy” base image built using <a href="http://alestic.com/">Eric Hammond’s <span class="caps">EC2</span> Ubuntu script</a></li>
|
69
77
|
<li><span class="caps">SSL</span> support</li>
|
70
78
|
<li>Amazon <span class="caps">AMI</span> tools installed</li>
|
71
|
-
<li>A script to rebundle a customized version of the image in one step if required</li>
|
72
79
|
<li>MySQL, Apache, and syslog configured to use /mnt for data and logging so you don’t fill up <span class="caps">EC2</span>’s small root filesystem</li>
|
73
80
|
<li>Automatically archives Rails and Apache logs to S3 nightly.</li>
|
74
81
|
<li>32-bit and 64-bit images available (supports all instance types, small to extra large).</li>
|
75
82
|
<li>Created using a build file, full source is <a href="http://rubyforge.org/scm/?group_id=4552">available</a> (the <span class="caps">EC2</span> on Rails script is run from <a href="http://alestic.com/">Eric Hammond’s <span class="caps">EC2</span> Ubuntu script</a>)</li>
|
76
|
-
<li>
|
83
|
+
<li>Can be used as a clustered Rails app running on multiple instances</li>
|
77
84
|
<li>Automatically runs hourly, daily, weekly and monthly scripts if they exist in Rails application’s script directory</li>
|
78
|
-
<li>Local <
|
85
|
+
<li>Local <a href="http://www.postfix.org/">Postfix</a> SMTP mail server (only available from within the instance, not listening on external network interfaces)</li>
|
79
86
|
</ul>
|
80
87
|
|
81
88
|
|
82
89
|
<h2>Using the image</h2>
|
83
90
|
|
84
91
|
|
85
|
-
<p>This documentation will be improved soon, for now hopefully this covers the basics
|
86
|
-
|
92
|
+
<p>This documentation will be improved soon, for now hopefully this covers the basics.</p>
|
93
|
+
|
94
|
+
|
95
|
+
The current <span class="caps">AMI</span> id’s are:
|
96
|
+
<ul>
|
97
|
+
<li>ami-c9bc58a0 (32-bit)</li>
|
98
|
+
<li>ami-cbbc58a2 (64-bit)</li>
|
99
|
+
</ul>
|
100
|
+
|
101
|
+
|
102
|
+
<p><em>I will keep these images for as long as possible, they will not be deleted for at least a few years.</em></p>
|
87
103
|
|
88
104
|
|
89
105
|
<h4>1. Install the gem</h4>
|
@@ -102,11 +118,10 @@ and
|
|
102
118
|
in the config folder.</p>
|
103
119
|
|
104
120
|
|
105
|
-
<p>Be sure to customize those files and read the comments.</p>
|
121
|
+
<p><em>Be sure to customize those files and read the comments.</em></p>
|
106
122
|
|
107
123
|
|
108
|
-
<p>Also,
|
109
|
-
in your database.yml file. After running “cap ec2onrails:server:set_roles” it will resolve
|
124
|
+
<p>Also, use the hostname “db_primary” in your database.yml file. After running “cap ec2onrails:server:set_roles” it will resolve
|
110
125
|
to the instance defined in your Capistrano “db” role.</p>
|
111
126
|
|
112
127
|
|
@@ -115,7 +130,7 @@ to the instance defined in your Capistrano “db” role.</p>
|
|
115
130
|
|
116
131
|
<p>There is nothing <span class="caps">EC2</span> on Rails-specific here yet (though soon there will be a Capistrano task to do this for you),
|
117
132
|
if you’ve started <span class="caps">EC2</span> instances before you can skip this section. Otherwise, I’m not going to lie, this part is complicated
|
118
|
-
the first time.</p>
|
133
|
+
and will take a lot more than 5 minutes the first time.</p>
|
119
134
|
|
120
135
|
|
121
136
|
<p>Read the
|
@@ -123,8 +138,8 @@ the first time.</p>
|
|
123
138
|
in Amazon’s getting started guide.</p>
|
124
139
|
|
125
140
|
|
126
|
-
<p>For the <span class="caps">AMI</span> id’s of the current images
|
127
|
-
|
141
|
+
<p>For the <span class="caps">AMI</span> id’s of the current images do <code>cap ec2onrails:ami_ids</code> from within the app that you
|
142
|
+
configured in the previous step (they’re also listed earlier on this page).</p>
|
128
143
|
|
129
144
|
|
130
145
|
<p><em><span class="caps">NOTE</span>: Only use the images that match the current version of the gem.</em></p>
|
@@ -146,8 +161,9 @@ use the app user to deploy the app, and the admin user for server admin tasks
|
|
146
161
|
that require sudo.</p>
|
147
162
|
|
148
163
|
|
149
|
-
<p>Double-check <a href="http://docs.amazonwebservices.com/AWSEC2/2007-08-29/GettingStartedGuide/running-an-instance.html">your firewall settings</a>.
|
150
|
-
Be sure that you haven’t allowed public access to any ports other than <span class="caps">TCP 22</span> and <span class="caps">TCP 80</span
|
164
|
+
<p><span class="caps">IMPORTANT</span>: Double-check <a href="http://docs.amazonwebservices.com/AWSEC2/2007-08-29/GettingStartedGuide/running-an-instance.html">your firewall settings</a>.
|
165
|
+
Be sure that you haven’t allowed public access to any ports other than <span class="caps">TCP 22</span> and <span class="caps">TCP 80</span>
|
166
|
+
(and possibly <span class="caps">TCP 443</span> if you’re going to enable <span class="caps">HTTPS</span>).
|
151
167
|
If you’re using multiple instances, be sure to allow them network access to each other.</p>
|
152
168
|
|
153
169
|
|
@@ -170,7 +186,8 @@ key file, the public key is on the server. But for some reason
|
|
170
186
|
<h4>6. Deploy the app with Capistrano</h4>
|
171
187
|
|
172
188
|
|
173
|
-
<p>Now that the gem is installed, your deploy.rb is configured and you can start and stop <span class="caps">EC2</span> instances,
|
189
|
+
<p>Now that the gem is installed, your deploy.rb is configured and you can start and stop <span class="caps">EC2</span> instances,
|
190
|
+
this is the only thing you’ll need to do from now on.</p>
|
174
191
|
|
175
192
|
|
176
193
|
<pre>
|
@@ -189,106 +206,78 @@ create your database.</p>
|
|
189
206
|
<h2>Capistrano tasks</h2>
|
190
207
|
|
191
208
|
|
192
|
-
<p>
|
209
|
+
<p><a href="http://capify.org">Capistrano</a> is the most commonly used Rails deployment tool. It comes with many standard “tasks”,
|
210
|
+
and the <span class="caps">EC2</span> on Rails gem includes Capistrano tasks specifically for configuring the server instance.</p>
|
193
211
|
|
194
212
|
|
195
|
-
|
196
|
-
gems and Ubuntu packages to be installed. The deploy_files task uploads
|
197
|
-
files to the server (they will be owned by root). It’s intended mainly for
|
198
|
-
customized config files for new packages installed via the install_packages
|
199
|
-
task.
|
200
|
-
<ul>
|
201
|
-
<li><code>cap ec2onrails:server:deploy_files</code></li>
|
202
|
-
<li><code>cap ec2onrails:server:set_timezone</code></li>
|
203
|
-
<li><code>cap ec2onrails:server:upgrade_gems</code></li>
|
204
|
-
<li><code>cap ec2onrails:server:upgrade_packages</code></li>
|
205
|
-
<li><code>cap ec2onrails:server:install_gems</code></li>
|
206
|
-
<li><code>cap ec2onrails:server:install_packages</code></li>
|
207
|
-
<li><code>cap ec2onrails:server:upgrade_and_install_all</code></li>
|
208
|
-
<li><code>cap ec2onrails:server:restart_services</code></li>
|
209
|
-
<li><code>cap ec2onrails:server:set_roles</code>
|
210
|
-
- Customizes each instance for it’s role(s) (as defined in your Capistrano deploy.rb file).
|
211
|
-
For now this just makes sure that only the appropriate services (Apache, Mongrel, and/or MySQL)
|
212
|
-
are running. Eventually this will customize settings for the running services also. Note that
|
213
|
-
an instance can have more than one role. If there’s only one instance it will have all roles.</li>
|
214
|
-
</ul>
|
213
|
+
<p>Capistrano is run from the command-line using the “cap” command, with a task name given as an argument.</p>
|
215
214
|
|
216
215
|
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
run on the production server.
|
222
|
-
<ul>
|
223
|
-
<li><code>cap ec2onrails:db:archive</code></li>
|
224
|
-
<li><code>cap ec2onrails:db:restore</code></li>
|
225
|
-
<li><code>cap ec2onrails:db:create</code></li>
|
226
|
-
<li><code>cap ec2onrails:db:drop</code></li>
|
227
|
-
<li><code>cap ec2onrails:db:recreate</code></li>
|
228
|
-
<li><code>cap ec2onrails:db:set_root_password</code></li>
|
229
|
-
</ul>
|
216
|
+
<h3>Commonly-used tasks</h3>
|
217
|
+
|
218
|
+
|
219
|
+
<p>You’ll mostly need just the following Capistrano tasks:</p>
|
230
220
|
|
231
221
|
|
232
222
|
<ul>
|
233
223
|
<li><code>cap ec2onrails:ami_ids</code>
|
234
|
-
|
224
|
+
Shows the <span class="caps">AMI</span> id’s of the images that match the current version of the gem.</li>
|
235
225
|
</ul>
|
236
226
|
|
237
227
|
|
238
228
|
<ul>
|
239
229
|
<li><code>cap ec2onrails:setup</code>
|
240
|
-
|
241
|
-
|
230
|
+
This task configures a newly-launched instance. This is the first thing you should do after
|
231
|
+
starting a new instance. It can be run more than once without ill effect. After running
|
232
|
+
“cap ec2onrails:setup” the next thing to do is run “cap deploy:cold”</li>
|
242
233
|
</ul>
|
243
234
|
|
244
235
|
|
245
236
|
<ul>
|
246
|
-
<li><code>cap ec2onrails:
|
247
|
-
|
248
|
-
|
237
|
+
<li><code>cap ec2onrails:server:set_roles</code>
|
238
|
+
Customizes each instance for it’s role(s) (as defined in your Capistrano deploy.rb file).
|
239
|
+
Run this after starting or stopping instances.
|
240
|
+
For now this just makes sure that only the appropriate services (Apache, Mongrel, and/or MySQL)
|
241
|
+
are running. Eventually this will customize settings for the running services also. Note that
|
242
|
+
an instance can have more than one role. If there’s only one instance it will have all roles.</li>
|
249
243
|
</ul>
|
250
244
|
|
251
245
|
|
252
|
-
<p>
|
253
|
-
|
246
|
+
<p>Note that due to the way that Capistrano works all tasks are run
|
247
|
+
against all hosts that are currently defined in the deploy.rb file.
|
248
|
+
So if you start a new instance then add it to your deploy.rb you will need to run
|
249
|
+
“cap ec2onrails:setup” again which will be run on all existing instances.</p>
|
254
250
|
|
255
|
-
<h2>Saving your own customized version of the image.</h2>
|
256
251
|
|
252
|
+
<h3>Database management tasks</h3>
|
257
253
|
|
258
|
-
I’m trying to make the image configurable enough that you won’t need to do this, but
|
259
|
-
if you want to save a customized version of the image, there is a script to do it:
|
260
|
-
<code>/usr/local/ec2onrails/bin/rebundle.sh</code>. It takes a long time and there
|
261
|
-
are long periods with no output so you might want to hit a key once in a while
|
262
|
-
(or set “ServerAliveInterval 60” in your ssh_config file) to avoid being disconnected
|
263
|
-
while it’s running.
|
264
254
|
|
265
|
-
<
|
266
|
-
|
255
|
+
<ul>
|
256
|
+
<li><code>cap ec2onrails:db:archive</code>
|
257
|
+
Archive the MySQL database to the bucket specified in your deploy.rb. This is for archiving a snapshot of your
|
258
|
+
database into any S3 bucket. For example, you might want to do this before deploying.</li>
|
259
|
+
</ul>
|
267
260
|
|
268
261
|
|
269
262
|
<ul>
|
270
|
-
<li>
|
271
|
-
|
263
|
+
<li><code>cap ec2onrails:db:restore</code>
|
264
|
+
Restore the MySQL database from the bucket specified in your deploy.rb
|
265
|
+
For example, I use this to restore the current production data (from my actual production backup
|
266
|
+
bucket) onto a staging server that has the current production version of my
|
267
|
+
app. I then deploy the new version which tests migrations exactly as they’ll
|
268
|
+
run on the production server.</li>
|
272
269
|
</ul>
|
273
270
|
|
274
271
|
|
275
|
-
<
|
276
|
-
|
277
|
-
KEY_FILE_NAME=pk-XXXX.pem
|
278
|
-
CERT_FILE_NAME=cert-XXXX.pem
|
279
|
-
AWS_ACCESS_KEY_ID=ABC0123
|
280
|
-
AWS_SECRET_ACCESS_KEY=abc0123abc0123abc0123
|
281
|
-
BUCKET_BASE_NAME=a-string-identifier
|
282
|
-
</pre>
|
272
|
+
<p>To get a full list of the Capistrano tasks at any time type <code>cap -T</code> from with your rails app root.</p>
|
273
|
+
|
283
274
|
|
284
275
|
<h2>Building the image</h2>
|
285
276
|
|
286
277
|
|
287
278
|
<p>Building the image is not required, most people will simply use the prebuilt public
|
288
|
-
image, but there is also a
|
289
|
-
|
290
|
-
It should run on any Linux system, including one of the stock Fedora-based Amazon public <span class="caps">AMI</span>’s
|
291
|
-
(it is tested on <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=994&categoryID=101">Amazon’s <span class="caps">FC6</span> x86_64 image</a>).</p>
|
279
|
+
image, but there is also a build script that builds the image. It’s meant to be called by
|
280
|
+
<a href="http://alestic.com/">Eric Hammond’s <span class="caps">EC2</span> Ubuntu script</a>.</p>
|
292
281
|
|
293
282
|
|
294
283
|
<h2>Mailing lists</h2>
|
@@ -296,7 +285,7 @@ It should run on any Linux system, including one of the stock Fedora-based Amazo
|
|
296
285
|
|
297
286
|
<p>There are two Google groups, one for
|
298
287
|
<a href="http://groups.google.com/group/ec2-on-rails-announce">announcements</a>
|
299
|
-
and one for
|
288
|
+
(usually just new release announcements) and one for
|
300
289
|
<a href="http://groups.google.com/group/ec2-on-rails-discuss">discussion</a>.</p>
|
301
290
|
|
302
291
|
|
@@ -338,7 +327,7 @@ or <a href="http://pauldowman.com/contact/">emailed directly to me</a> .</p>
|
|
338
327
|
<p>If you find <span class="caps">EC2</span> on Rails useful please <a href="http://www.workingwithrails.com/person/10131-paul-dowman">recommend Paul Dowman</a>
|
339
328
|
at Working With Rails.</p>
|
340
329
|
<p class="coda">
|
341
|
-
<a href="http://pauldowman.com/contact/">Paul Dowman</a>,
|
330
|
+
<a href="http://pauldowman.com/contact/">Paul Dowman</a>, 30th June 2008<br>
|
342
331
|
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
343
332
|
</p>
|
344
333
|
</div>
|
data/website/index.txt
CHANGED
@@ -8,40 +8,51 @@ EC2 on Rails is an Ubuntu Linux server image for
|
|
8
8
|
that's ready to run a standard Ruby on Rails application with little or no customization.
|
9
9
|
It's a Ruby on Rails "virtual appliance":http://en.wikipedia.org/wiki/Virtual_appliance.
|
10
10
|
|
11
|
-
If you have an EC2 account and
|
11
|
+
If you have an EC2 account and can start EC2 instances you're five minutes away from deploying
|
12
12
|
your Rails app.
|
13
13
|
|
14
|
-
|
14
|
+
EC2 on Rails is "opinionated software":http://gettingreal.37signals.com/ch04_Make_Opinionated_Software.php:
|
15
|
+
the opinion is that for many rails apps the server setup can be generalized
|
16
|
+
and shared the same way as the web application framework itself. For many people (Twitter, this isn't for you)
|
17
|
+
the server image can be treated the same way as other shared libraries. And if the day comes when your needs are
|
18
|
+
unique enough that EC2 on Rails can't be configured to work for you then you can bundle your own image from it
|
19
|
+
or fork the build source and customize it.
|
20
|
+
|
21
|
+
But until then, why spend your time configuring servers?
|
15
22
|
|
16
23
|
Features of the EC2 image:
|
17
24
|
|
18
25
|
* Ready to deploy a Rails app with little or no configuration of the server required
|
19
|
-
* Automatic backup of MySQL database to S3 (full backup nightly + incremental backup using binary logs every
|
26
|
+
* Automatic backup of MySQL database to S3 (full backup nightly + incremental backup using binary logs every 5 minutes)
|
20
27
|
* Capistrano tasks to customize the server image, archive and restore the database to/from S3, and more (available as a rubygem)
|
21
28
|
* Mongrel_cluster behind Apache 2.2, configured according to
|
22
29
|
"Coda Hale's excellent guide":http://blog.codahale.com/2006/06/19/time-for-a-grown-up-server-rails-mongrel-apache-capistrano-and-you/
|
23
|
-
* Ruby on Rails 2.0.2 and 1.2.6
|
30
|
+
* Ruby on Rails 2.1.0, 2.0.2 and 1.2.6
|
24
31
|
* Ruby 1.8.6
|
25
32
|
* MySQL 5
|
26
33
|
* "memcached":http://www.danga.com/memcached/
|
27
|
-
* "monit":http://www.tildeslash.com/monit/ system
|
28
|
-
* Ubuntu
|
34
|
+
* "monit":http://www.tildeslash.com/monit/ configured to monitor apache, mongrel, mysql, memcached, drive space and system load
|
35
|
+
* Ubuntu 8.04 LTS "Hardy" base image built using "Eric Hammond's EC2 Ubuntu script":http://alestic.com/
|
29
36
|
* SSL support
|
30
37
|
* Amazon AMI tools installed
|
31
|
-
* A script to rebundle a customized version of the image in one step if required
|
32
38
|
* MySQL, Apache, and syslog configured to use /mnt for data and logging so you don't fill up EC2's small root filesystem
|
33
39
|
* Automatically archives Rails and Apache logs to S3 nightly.
|
34
40
|
* 32-bit and 64-bit images available (supports all instance types, small to extra large).
|
35
41
|
* Created using a build file, full source is "available":http://rubyforge.org/scm/?group_id=4552 (the EC2 on Rails script is run from "Eric Hammond's EC2 Ubuntu script":http://alestic.com/)
|
36
|
-
*
|
42
|
+
* Can be used as a clustered Rails app running on multiple instances
|
37
43
|
* Automatically runs hourly, daily, weekly and monthly scripts if they exist in Rails application's script directory
|
38
|
-
* Local SMTP server (
|
44
|
+
* Local "Postfix":http://www.postfix.org/ SMTP mail server (only available from within the instance, not listening on external network interfaces)
|
39
45
|
|
40
46
|
|
41
47
|
h2. Using the image
|
42
48
|
|
43
49
|
This documentation will be improved soon, for now hopefully this covers the basics.
|
44
|
-
|
50
|
+
|
51
|
+
The current AMI id's are:
|
52
|
+
* ami-c9bc58a0 (32-bit)
|
53
|
+
* ami-cbbc58a2 (64-bit)
|
54
|
+
|
55
|
+
_I will keep these images for as long as possible, they will not be deleted for at least a few years._
|
45
56
|
|
46
57
|
|
47
58
|
h4. 1. Install the gem
|
@@ -57,24 +68,23 @@ and
|
|
57
68
|
"s3.yml":http://ec2onrails.rubyforge.org/svn/trunk/documentation/examples/s3.yml
|
58
69
|
in the config folder.
|
59
70
|
|
60
|
-
|
71
|
+
_Be sure to customize those files and read the comments._
|
61
72
|
|
62
|
-
Also,
|
63
|
-
in your database.yml file. After running "cap ec2onrails:server:set_roles" it will resolve
|
73
|
+
Also, use the hostname "db_primary" in your database.yml file. After running "cap ec2onrails:server:set_roles" it will resolve
|
64
74
|
to the instance defined in your Capistrano "db" role.
|
65
75
|
|
66
76
|
h4. 4. Start up one or more instances of the image.
|
67
77
|
|
68
78
|
There is nothing EC2 on Rails-specific here yet (though soon there will be a Capistrano task to do this for you),
|
69
79
|
if you've started EC2 instances before you can skip this section. Otherwise, I'm not going to lie, this part is complicated
|
70
|
-
the first time.
|
80
|
+
and will take a lot more than 5 minutes the first time.
|
71
81
|
|
72
82
|
Read the
|
73
83
|
"running an instance section":http://docs.amazonwebservices.com/AWSEC2/2007-08-29/GettingStartedGuide/running-an-instance.html
|
74
84
|
in Amazon's getting started guide.
|
75
85
|
|
76
|
-
For the AMI id's of the current images
|
77
|
-
|
86
|
+
For the AMI id's of the current images do <code>cap ec2onrails:ami_ids</code> from within the app that you
|
87
|
+
configured in the previous step (they're also listed earlier on this page).
|
78
88
|
|
79
89
|
_NOTE: Only use the images that match the current version of the gem._
|
80
90
|
|
@@ -91,8 +101,9 @@ that the app runs as, does not have sudo ability). The Capistrano tasks automati
|
|
91
101
|
use the app user to deploy the app, and the admin user for server admin tasks
|
92
102
|
that require sudo.
|
93
103
|
|
94
|
-
Double-check "your firewall settings":http://docs.amazonwebservices.com/AWSEC2/2007-08-29/GettingStartedGuide/running-an-instance.html.
|
95
|
-
Be sure that you haven't allowed public access to any ports other than TCP 22 and TCP 80
|
104
|
+
IMPORTANT: Double-check "your firewall settings":http://docs.amazonwebservices.com/AWSEC2/2007-08-29/GettingStartedGuide/running-an-instance.html.
|
105
|
+
Be sure that you haven't allowed public access to any ports other than TCP 22 and TCP 80
|
106
|
+
(and possibly TCP 443 if you're going to enable HTTPS).
|
96
107
|
If you're using multiple instances, be sure to allow them network access to each other.
|
97
108
|
|
98
109
|
|
@@ -111,7 +122,8 @@ Note, this will only work if you have an external ssh command in the path, it wo
|
|
111
122
|
|
112
123
|
h4. 6. Deploy the app with Capistrano
|
113
124
|
|
114
|
-
Now that the gem is installed, your deploy.rb is configured and you can start and stop EC2 instances,
|
125
|
+
Now that the gem is installed, your deploy.rb is configured and you can start and stop EC2 instances,
|
126
|
+
this is the only thing you'll need to do from now on.
|
115
127
|
|
116
128
|
<pre>
|
117
129
|
cap ec2onrails:setup
|
@@ -124,94 +136,66 @@ create your database.
|
|
124
136
|
|
125
137
|
That's it, your app is now running on EC2!!
|
126
138
|
|
139
|
+
|
127
140
|
h2. Capistrano tasks
|
128
141
|
|
129
|
-
|
130
|
-
|
131
|
-
Server config tasks. These run as the admin user. You can specify lists of
|
132
|
-
gems and Ubuntu packages to be installed. The deploy_files task uploads
|
133
|
-
files to the server (they will be owned by root). It's intended mainly for
|
134
|
-
customized config files for new packages installed via the install_packages
|
135
|
-
task.
|
136
|
-
* <code>cap ec2onrails:server:deploy_files</code>
|
137
|
-
* <code>cap ec2onrails:server:set_timezone</code>
|
138
|
-
* <code>cap ec2onrails:server:upgrade_gems</code>
|
139
|
-
* <code>cap ec2onrails:server:upgrade_packages</code>
|
140
|
-
* <code>cap ec2onrails:server:install_gems</code>
|
141
|
-
* <code>cap ec2onrails:server:install_packages</code>
|
142
|
-
* <code>cap ec2onrails:server:upgrade_and_install_all</code>
|
143
|
-
* <code>cap ec2onrails:server:restart_services</code>
|
144
|
-
* <code>cap ec2onrails:server:set_roles</code>
|
145
|
-
- Customizes each instance for it's role(s) (as defined in your Capistrano deploy.rb file).
|
146
|
-
For now this just makes sure that only the appropriate services (Apache, Mongrel, and/or MySQL)
|
147
|
-
are running. Eventually this will customize settings for the running services also. Note that
|
148
|
-
an instance can have more than one role. If there's only one instance it will have all roles.
|
142
|
+
"Capistrano":http://capify.org is the most commonly used Rails deployment tool. It comes with many standard "tasks",
|
143
|
+
and the EC2 on Rails gem includes Capistrano tasks specifically for configuring the server instance.
|
149
144
|
|
150
|
-
|
151
|
-
For example, I use this to restore the current production data (from my actual production backup
|
152
|
-
bucket) onto a staging server that has the current production version of my
|
153
|
-
app. I then deploy the new version which tests migrations exactly as they'll
|
154
|
-
run on the production server.
|
155
|
-
* <code>cap ec2onrails:db:archive</code>
|
156
|
-
* <code>cap ec2onrails:db:restore</code>
|
157
|
-
* <code>cap ec2onrails:db:create</code>
|
158
|
-
* <code>cap ec2onrails:db:drop</code>
|
159
|
-
* <code>cap ec2onrails:db:recreate</code>
|
160
|
-
* <code>cap ec2onrails:db:set_root_password</code>
|
145
|
+
Capistrano is run from the command-line using the "cap" command, with a task name given as an argument.
|
161
146
|
|
162
|
-
|
163
|
-
- Shows the AMI id's of the images that match the current version of the gem.
|
147
|
+
h3. Commonly-used tasks
|
164
148
|
|
165
|
-
|
166
|
-
- This is a convenience task to get a new instance completely set up in one
|
167
|
-
step, everything except deploying the app.
|
149
|
+
You'll mostly need just the following Capistrano tasks:
|
168
150
|
|
169
|
-
* <code>cap ec2onrails:
|
170
|
-
|
171
|
-
bucket and deploy the app, useful to set up a staging server.
|
151
|
+
* <code>cap ec2onrails:ami_ids</code>
|
152
|
+
Shows the AMI id's of the images that match the current version of the gem.
|
172
153
|
|
173
|
-
|
154
|
+
* <code>cap ec2onrails:setup</code>
|
155
|
+
This task configures a newly-launched instance. This is the first thing you should do after
|
156
|
+
starting a new instance. It can be run more than once without ill effect. After running
|
157
|
+
"cap ec2onrails:setup" the next thing to do is run "cap deploy:cold"
|
174
158
|
|
159
|
+
* <code>cap ec2onrails:server:set_roles</code>
|
160
|
+
Customizes each instance for it's role(s) (as defined in your Capistrano deploy.rb file).
|
161
|
+
Run this after starting or stopping instances.
|
162
|
+
For now this just makes sure that only the appropriate services (Apache, Mongrel, and/or MySQL)
|
163
|
+
are running. Eventually this will customize settings for the running services also. Note that
|
164
|
+
an instance can have more than one role. If there's only one instance it will have all roles.
|
175
165
|
|
176
|
-
|
166
|
+
Note that due to the way that Capistrano works all tasks are run
|
167
|
+
against all hosts that are currently defined in the deploy.rb file.
|
168
|
+
So if you start a new instance then add it to your deploy.rb you will need to run
|
169
|
+
"cap ec2onrails:setup" again which will be run on all existing instances.
|
177
170
|
|
178
|
-
I'm trying to make the image configurable enough that you won't need to do this, but
|
179
|
-
if you want to save a customized version of the image, there is a script to do it:
|
180
|
-
<code>/usr/local/ec2onrails/bin/rebundle.sh</code>. It takes a long time and there
|
181
|
-
are long periods with no output so you might want to hit a key once in a while
|
182
|
-
(or set "ServerAliveInterval 60" in your ssh_config file) to avoid being disconnected
|
183
|
-
while it's running.
|
184
171
|
|
185
|
-
|
186
|
-
access identifiers. The contents of the directory are the following three files:
|
172
|
+
h3. Database management tasks
|
187
173
|
|
188
|
-
*
|
189
|
-
|
174
|
+
* <code>cap ec2onrails:db:archive</code>
|
175
|
+
Archive the MySQL database to the bucket specified in your deploy.rb. This is for archiving a snapshot of your
|
176
|
+
database into any S3 bucket. For example, you might want to do this before deploying.
|
190
177
|
|
191
|
-
<
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
BUCKET_BASE_NAME=a-string-identifier
|
198
|
-
</pre>
|
178
|
+
* <code>cap ec2onrails:db:restore</code>
|
179
|
+
Restore the MySQL database from the bucket specified in your deploy.rb
|
180
|
+
For example, I use this to restore the current production data (from my actual production backup
|
181
|
+
bucket) onto a staging server that has the current production version of my
|
182
|
+
app. I then deploy the new version which tests migrations exactly as they'll
|
183
|
+
run on the production server.
|
199
184
|
|
185
|
+
To get a full list of the Capistrano tasks at any time type <code>cap -T</code> from with your rails app root.
|
200
186
|
|
201
187
|
h2. Building the image
|
202
188
|
|
203
189
|
Building the image is not required, most people will simply use the prebuilt public
|
204
|
-
image, but there is also a
|
205
|
-
|
206
|
-
It should run on any Linux system, including one of the stock Fedora-based Amazon public AMI's
|
207
|
-
(it is tested on "Amazon's FC6 x86_64 image":http://developer.amazonwebservices.com/connect/entry.jspa?externalID=994&categoryID=101).
|
190
|
+
image, but there is also a build script that builds the image. It's meant to be called by
|
191
|
+
"Eric Hammond's EC2 Ubuntu script":http://alestic.com/.
|
208
192
|
|
209
193
|
|
210
194
|
h2. Mailing lists
|
211
195
|
|
212
196
|
There are two Google groups, one for
|
213
197
|
"announcements":http://groups.google.com/group/ec2-on-rails-announce
|
214
|
-
and one for
|
198
|
+
(usually just new release announcements) and one for
|
215
199
|
"discussion":http://groups.google.com/group/ec2-on-rails-discuss.
|
216
200
|
|
217
201
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ec2onrails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Dowman
|
@@ -9,20 +9,22 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-07-01 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: capistrano
|
17
|
+
type: :runtime
|
17
18
|
version_requirement:
|
18
19
|
version_requirements: !ruby/object:Gem::Requirement
|
19
20
|
requirements:
|
20
|
-
- - "
|
21
|
+
- - "="
|
21
22
|
- !ruby/object:Gem::Version
|
22
|
-
version: 2.3
|
23
|
+
version: 2.4.3
|
23
24
|
version:
|
24
25
|
- !ruby/object:Gem::Dependency
|
25
26
|
name: archive-tar-minitar
|
27
|
+
type: :runtime
|
26
28
|
version_requirement:
|
27
29
|
version_requirements: !ruby/object:Gem::Requirement
|
28
30
|
requirements:
|
@@ -32,6 +34,7 @@ dependencies:
|
|
32
34
|
version:
|
33
35
|
- !ruby/object:Gem::Dependency
|
34
36
|
name: optiflag
|
37
|
+
type: :runtime
|
35
38
|
version_requirement:
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
@@ -101,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
104
|
requirements: []
|
102
105
|
|
103
106
|
rubyforge_project: ec2onrails
|
104
|
-
rubygems_version: 1.
|
107
|
+
rubygems_version: 1.2.0
|
105
108
|
signing_key:
|
106
109
|
specification_version: 2
|
107
110
|
summary: Client-side libraries (Capistrano tasks) for managing and deploying to EC2 on Rails servers.
|