winton-ubistrano 1.2.2 → 1.2.3

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.
data/README.markdown CHANGED
@@ -1,20 +1,22 @@
1
1
  Ubistrano
2
2
  =========
3
3
 
4
- Provision and deploy to an Ubuntu/God/Apache/Passenger stack using Capistrano.
4
+ Provision and deploy to an Ubuntu/God/Apache/Passenger stack using Capistrano and EC2.
5
5
 
6
6
  Goals
7
7
  -----
8
8
 
9
+ * Create an Ubuntu Hardy EC2 instance in one command (<code>cap ec2</code>)
9
10
  * Provision a solid Ubuntu Hardy application server in one command (<code>cap ubuntu</code>)
10
11
  * Deploy PHP, Rails, and Sinatra apps
11
12
  * Be descriptive about what is going on and allow the user to opt out
12
- * Simplify the deploy.rb file
13
+ * Simplify the <code>deploy.rb</code> file
13
14
 
14
15
  The stack
15
16
  ---------
16
17
 
17
18
  * Apache
19
+ * EC2 (optional)
18
20
  * Git
19
21
  * MySQL
20
22
  * MySQLTuner
@@ -37,11 +39,18 @@ Getting started
37
39
 
38
40
  gem install winton-ubistrano
39
41
 
40
- ### Capify your project
42
+ ### Ubify your project
41
43
 
42
- capify .
44
+ cd your\_project
45
+ ubify .
43
46
 
44
- ### Edit config/deploy.rb
47
+ * Runs <code>capify</code>
48
+ * Creates <code>config/deploy.example.rb</code>
49
+ * Adds <code>config/deploy.rb</code> to your project's <code>.gitignore</code>
50
+
51
+ ### Copy config/deploy.example.rb to config/deploy.rb
52
+
53
+ It should look like this:
45
54
 
46
55
  <pre>
47
56
  set :ubistrano, {
@@ -54,6 +63,10 @@ set :ubistrano, {
54
63
  :secret_key => ''
55
64
  },
56
65
 
66
+ :mysql => {
67
+ :password => ''
68
+ },
69
+
57
70
  :production => {
58
71
  :domains => [ 'myapp.com', 'www.myapp.com' ],
59
72
  :ssl => [ 'myapp.com' ],
@@ -71,25 +84,50 @@ require 'ubistrano'
71
84
 
72
85
  Ubistrano uses the same Capistrano options you've come to love, but provides defaults and a few extra options as well.
73
86
 
74
- Feel free to add standard options like :user to the stage groups.
87
+ Edit deploy.rb to the best of your ability. If setting up an EC2 instance, be sure to provide your AWS keys. Your IP address will be provided later.
88
+
89
+ Feel free to move any options into or out of the stage groups.
90
+
91
+ Create your EC2 instance
92
+ ------------------------
93
+
94
+ ### From your app directory
95
+
96
+ cap ec2
97
+
98
+ ### Example output
99
+
100
+ <pre>
101
+ ================================================================================
102
+ Press enter for Ubuntu Hardy or enter an AMI image id:
103
+ </pre>
75
104
 
76
105
  Set up your Ubuntu Hardy server
77
106
  -------------------------------
78
107
 
79
108
  ### From your app directory
80
109
 
81
- <pre>cap ubuntu</pre>
110
+ cap ubuntu
82
111
 
83
112
  ### Example output
84
113
 
85
114
  <pre>
86
- =================================================================================
115
+ ================================================================================
87
116
  Let's set up an Ubuntu server! (Tested with 8.04 LTS Hardy)
88
117
 
89
118
  With each task, Ubistrano will describe what it is doing, and wait for a yes/no.
90
119
 
91
- =================================================================================
92
- Have you already created the user defined in deploy.rb? (y/n)
120
+ ================================================================================
121
+ Please ssh into your server (use -i only for EC2):
122
+ ssh root@174.129.232.34 -i ~/.ssh/id_rsa-studicious
123
+
124
+ Edit your sudoers file:
125
+ visudo
126
+
127
+ Add the following line:
128
+ deploy ALL=NOPASSWD: ALL
129
+
130
+ Continue? (y/n)
93
131
  </pre>
94
132
 
95
133
  Deploy your app
@@ -109,7 +147,7 @@ All apps should have a <code>public</code> directory.
109
147
  Deploy to staging
110
148
  -----------------
111
149
 
112
- Use any capistrano task, but replace `cap` with `cap staging`.
150
+ Use any capistrano task, but replace <code>cap</code> with <code>cap staging</code>.
113
151
 
114
152
  ### Example
115
153
 
data/Rakefile CHANGED
@@ -24,8 +24,8 @@ end
24
24
 
25
25
  # sudo rake install
26
26
  task :install do
27
- `gem uninstall ubistrano`
27
+ `sudo gem uninstall ubistrano -x`
28
28
  `gem build ubistrano.gemspec`
29
- `gem install ubistrano*.gem`
29
+ `sudo gem install ubistrano*.gem`
30
30
  `rm ubistrano*.gem`
31
31
  end
data/bin/ubify ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ UBISTRANO = File.expand_path("../", File.dirname(__FILE__))
4
+ TO = File.expand_path("#{ARGV.join(' ')}", FileUtils.pwd)
5
+
6
+ # Capify
7
+ `capify #{TO}`
8
+
9
+ # Copy config/deploy.example.rb
10
+ FileUtils.cp "#{UBISTRANO}/example/deploy.rb", "#{TO}/config/deploy.example.rb"
11
+
12
+ # Add config/deploy.rb to .gitignore
13
+ File.open("#{TO}/.gitignore", 'a') { |f| f.write("\nconfig/deploy.rb\n") }
data/changelog.markdown CHANGED
@@ -1,3 +1,10 @@
1
+ Version 1.2.3
2
+ -------------
3
+
4
+ * Added bin/ubify which executes capify in addition to copying config/deploy.example.rb and adding config/deploy.rb to the project's .gitignore
5
+ * Added mysql option in deploy.rb
6
+ * Minor ubuntu:install fixes
7
+
1
8
  Version 1.2.2
2
9
  -------------
3
10
 
data/example/deploy.rb CHANGED
@@ -8,6 +8,12 @@ set :ubistrano, {
8
8
  :secret_key => ''
9
9
  },
10
10
 
11
+ :mysql => {
12
+ :root_password => '',
13
+ :app_password => ''
14
+ # Ubistrano creates a mysql user for each app
15
+ },
16
+
11
17
  :production => {
12
18
  :domains => [ 'myapp.com', 'www.myapp.com' ],
13
19
  :ssl => [ 'myapp.com' ],
@@ -22,7 +22,7 @@ Capistrano::Configuration.instance(:must_exist).load do
22
22
  "mkdir -p #{base_dir}",
23
23
  "chown -R #{user}:#{user} #{base_dir}"
24
24
  ]
25
- mysql.create.db
25
+ mysql.create
26
26
  deploy.setup
27
27
  case platform
28
28
  when :php
@@ -98,8 +98,7 @@ Capistrano::Configuration.instance(:must_exist).load do
98
98
  end
99
99
 
100
100
  def mysql_call
101
- @mysql_root_password = @mysql_root_password || ask("Password for mysql root:")
102
- "mysql -u root --password=#{@mysql_root_password}"
101
+ "mysql -f -u root --password=#{mysql_root_password || ''}"
103
102
  end
104
103
 
105
104
 
@@ -197,6 +196,13 @@ See #{File.expand_path '../../', File.dirname(__FILE__)}/templates/ubuntu/mysql.
197
196
  when :god_sshd
198
197
  "Would you like God to monitor sshd?
199
198
  See #{File.expand_path '../../', File.dirname(__FILE__)}/templates/ubuntu/sshd.god.erb"
199
+ when :god_finished
200
+ "Please run the following commands:
201
+ ssh #{user}@#{host}
202
+ sudo /etc/init.d/god start
203
+ sudo /etc/init.d/god start
204
+
205
+ Continue?"
200
206
  when :iptables
201
207
  "May I update your server's iptables, limiting access to SSH, HTTP, HTTPS, and ping only?
202
208
  See #{File.expand_path '../../', File.dirname(__FILE__)}/templates/ubuntu/iptables.rules.erb"
@@ -209,7 +215,10 @@ See #{File.expand_path '../../', File.dirname(__FILE__)}/templates/log/rotate.co
209
215
  "Please ssh to your server and run `sudo mysqltuner`.
210
216
  Continue?"
211
217
  when :passenger
212
- "Please run `sudo passenger-install-apache2-module` manually.
218
+ "Please run the following commands:
219
+ ssh #{user}@#{host}
220
+ sudo passenger-install-apache2-module
221
+
213
222
  The apache config file is found at /etc/apache2/apache2.conf.
214
223
  Reload apache?"
215
224
  when :run_ubuntu_install
@@ -217,9 +226,13 @@ Reload apache?"
217
226
 
218
227
  Please run the second half of the install:
219
228
  cap ubuntu:install
229
+
220
230
  "
221
231
  when :secure_mysql
222
- "It is highly recommended you run mysql_secure_installation manually.
232
+ "It is highly recommended you run mysql_secure_installation manually:
233
+ ssh #{user}@#{host}
234
+ mysql_secure_installation
235
+
223
236
  See http://dev.mysql.com/doc/refman/5.1/en/mysql-secure-installation.html
224
237
  Continue?"
225
238
  when :sinatra_install
@@ -4,8 +4,8 @@ Capistrano::Configuration.instance(:must_exist).load do
4
4
  namespace :create do
5
5
  desc "Create database and user"
6
6
  task :default, :roles => :db do
7
- mysql.create.db
8
7
  mysql.create.user
8
+ mysql.create.db
9
9
  end
10
10
 
11
11
  desc "Create database"
@@ -16,20 +16,11 @@ Capistrano::Configuration.instance(:must_exist).load do
16
16
  desc "Create database user"
17
17
  task :user, :roles => :db do
18
18
  mysql_run [
19
- "CREATE USER '#{db_user}'@'localhost' IDENTIFIED BY '#{db_pass}'",
20
- "GRANT ALL PRIVILEGES ON *.* TO '#{db_user}'@'localhost'"
19
+ "CREATE USER '#{application}'@'localhost' IDENTIFIED BY '#{mysql_password}'",
20
+ "GRANT ALL PRIVILEGES ON #{db_table}.* TO '#{application}'@'localhost'"
21
21
  ]
22
22
  end
23
23
  end
24
-
25
- namespace :update do
26
- desc 'Update mysql root password'
27
- task :root_password, :roles => :db do
28
- old_pass = ask "Current root password? (default: none)"
29
- new_pass = ask "New root password? (default: none)"
30
- sudo "mysqladmin -u root #{old_pass.empty? ? '' : "--password=#{old_pass} "}password #{new_pass}"
31
- end
32
- end
33
24
 
34
25
  namespace :destroy do
35
26
  desc "Destroy database and user"
@@ -46,8 +37,8 @@ Capistrano::Configuration.instance(:must_exist).load do
46
37
  desc "Destroy database user"
47
38
  task :user, :roles => :db do
48
39
  mysql_run [
49
- "REVOKE ALL PRIVILEGES, GRANT OPTION FROM '#{db_user}'@'localhost'",
50
- "DROP USER '#{db_user}'@'localhost'"
40
+ "REVOKE ALL PRIVILEGES, GRANT OPTION FROM '#{application}'@'localhost'",
41
+ "DROP USER '#{application}'@'localhost'"
51
42
  ]
52
43
  end
53
44
  end
@@ -66,7 +57,7 @@ Capistrano::Configuration.instance(:must_exist).load do
66
57
 
67
58
  desc "Restore remote database from backup"
68
59
  task :restore, :roles => :db do
69
- run_each "bunzip2 < #{shared_path}/db_backups/#{backup_name}.bz2 | mysql -u #{db_user} --password=#{db_pass} #{db_table}"
60
+ run_each "bunzip2 < #{shared_path}/db_backups/#{backup_name}.bz2 | mysql -u #{application} --password=#{mysql_password} #{db_table}"
70
61
  end
71
62
 
72
63
  desc "Backup database to local"
@@ -80,7 +71,7 @@ Capistrano::Configuration.instance(:must_exist).load do
80
71
  task :to_server, :roles => :db do
81
72
  run_each [
82
73
  "mkdir -p #{shared_path}/db_backups",
83
- "mysqldump --add-drop-table -u #{db_user} -p#{db_pass} #{db_table}_production | bzip2 -c > #{shared_path}/db_backups/#{backup_name}.bz2"
74
+ "mysqldump --add-drop-table -u #{application} -p#{mysql_password} #{db_table}_production | bzip2 -c > #{shared_path}/db_backups/#{backup_name}.bz2"
84
75
  ]
85
76
  end
86
77
 
@@ -120,7 +120,7 @@ Capistrano::Configuration.instance(:must_exist).load do
120
120
  task :apache, :roles => :web do
121
121
  if yes("May I install Apache?")
122
122
  sudo_puts [
123
- 'aptitude install apache2 apache2-mpm-prefork apache2-utils apache2.2-common libapr1 libaprutil1 ssl-cert -q -y',
123
+ 'aptitude install apache2 apache2-mpm-prefork apache2-utils apache2.2-common libapr1 libaprutil1 ssl-cert apache2-prefork-dev -q -y',
124
124
  'a2enmod rewrite',
125
125
  'a2enmod ssl',
126
126
  'a2dissite default'
@@ -142,7 +142,7 @@ Capistrano::Configuration.instance(:must_exist).load do
142
142
  task :mysql, :roles => :db do
143
143
  if yes("May I install MySQL?")
144
144
  sudo_puts 'aptitude install mysql-client-5.0 mysql-common mysql-server mysql-server-5.0 libmysqlclient15-dev libmysqlclient15off -q -y'
145
- ROOT.mysql.create.user
145
+ sudo "mysqladmin -u root password #{mysql_root_password || ''}"
146
146
  exit unless yes(msg(:secure_mysql))
147
147
  end
148
148
  end
@@ -202,7 +202,6 @@ Capistrano::Configuration.instance(:must_exist).load do
202
202
  sudo_puts "aptitude install libopenssl-ruby -q -y"
203
203
  install_source(:ruby) do |path|
204
204
  sudo_puts make_install(path)
205
- sudo_puts make_install(path) # install twice because openssl doesn't the first time
206
205
  end
207
206
  end
208
207
  end
@@ -220,7 +219,6 @@ Capistrano::Configuration.instance(:must_exist).load do
220
219
  desc 'Install Passenger'
221
220
  task :passenger, :roles => :app do
222
221
  if yes("May I install Passenger (mod_rails)?")
223
- sudo_puts 'aptitude install apache2-prefork-dev -q -y'
224
222
  gem_install :passenger
225
223
  ROOT.apache.reload if yes(msg(:passenger))
226
224
  end
@@ -240,9 +238,9 @@ Capistrano::Configuration.instance(:must_exist).load do
240
238
  upload_from_erb('/usr/local/etc/god/mysql.god', binding, :folder => 'ubuntu') if yes(msg(:god_mysql))
241
239
  upload_from_erb('/usr/local/etc/god/sshd.god', binding, :folder => 'ubuntu') if yes(msg(:god_sshd))
242
240
  sudo_puts [
243
- 'update-rc.d god defaults',
244
- '/etc/init.d/god start'
241
+ 'update-rc.d god defaults'
245
242
  ]
243
+ exit unless yes(msg(:god_finished))
246
244
  end
247
245
  end
248
246
 
data/lib/ubistrano.rb CHANGED
@@ -10,21 +10,21 @@ Capistrano::Configuration.instance(:must_exist).load do
10
10
 
11
11
  # Default capistrano/ubistrano values
12
12
  set :ubistrano, {
13
- :base_dir => '/var/www',
14
- :db_user => 'app',
15
- :db_pass => '',
16
- :deploy_via => :remote_cache,
17
- :domains => [],
18
- :platform => :rails,
19
- :plugins => {},
20
- :port => 22,
21
- :repository_cache => 'git_cache',
22
- :scm => :git,
23
- :ssl => [],
24
- :stage => :production,
25
- :use_sudo => false,
26
- :user => 'deploy',
27
- :versions => {}
13
+ :base_dir => '/var/www',
14
+ :deploy_via => :remote_cache,
15
+ :domains => [],
16
+ :mysql_root_password => '',
17
+ :mysql_app_password => '',
18
+ :platform => :rails,
19
+ :plugins => {},
20
+ :port => 22,
21
+ :repository_cache => 'git_cache',
22
+ :scm => :git,
23
+ :ssl => [],
24
+ :stage => :production,
25
+ :use_sudo => false,
26
+ :user => 'deploy',
27
+ :versions => {}
28
28
  }.merge(ubistrano)
29
29
 
30
30
  # Default plugins
@@ -1,8 +1,8 @@
1
1
  development: &defaults
2
2
  adapter: mysql
3
3
  database: <%= db_table %>
4
- username: <%= db_user %>
5
- password: <%= db_pass %>
4
+ username: <%= user %>
5
+ password: <%= mysql_password %>
6
6
  host: localhost
7
7
  socket: /var/run/mysqld/mysqld.sock
8
8
 
data/ubistrano.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'ubistrano'
3
- s.version = '1.2.2'
3
+ s.version = '1.2.3'
4
4
  s.date = '2008-02-22'
5
5
 
6
6
  s.summary = "Provision and deploy to an Ubuntu/God/Apache/Passenger stack using Capistrano"
@@ -10,14 +10,16 @@ Gem::Specification.new do |s|
10
10
  s.email = 'mail@wintoni.us'
11
11
  s.homepage = 'http://github.com/winton/ubistrano'
12
12
 
13
- s.has_rdoc = false
14
13
  s.add_dependency 'amazon-ec2', '>= 0.3.2'
14
+ s.executables = ["ubify"]
15
+ s.has_rdoc = false
15
16
 
16
17
  # = MANIFEST =
17
18
  s.files = %w[
18
19
  MIT-LICENSE
19
20
  README.markdown
20
21
  Rakefile
22
+ bin/ubify
21
23
  changelog.markdown
22
24
  example/deploy.rb
23
25
  lib/ubistrano.rb
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: winton-ubistrano
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Winton Welsh
@@ -24,8 +24,8 @@ dependencies:
24
24
  version:
25
25
  description: Provision and deploy to an Ubuntu/God/Apache/Passenger stack using Capistrano
26
26
  email: mail@wintoni.us
27
- executables: []
28
-
27
+ executables:
28
+ - ubify
29
29
  extensions: []
30
30
 
31
31
  extra_rdoc_files: []
@@ -34,6 +34,7 @@ files:
34
34
  - MIT-LICENSE
35
35
  - README.markdown
36
36
  - Rakefile
37
+ - bin/ubify
37
38
  - changelog.markdown
38
39
  - example/deploy.rb
39
40
  - lib/ubistrano.rb