ubistrano 1.2.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,20 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+
3
+ namespace :log do
4
+ desc "Add logrotate entry for this application"
5
+ task :rotate, :roles => :app do
6
+ if yes(msg(:logrotate))
7
+ upload_from_erb '/etc/rotate.conf', binding, :folder => 'log'
8
+ sudo_each [
9
+ 'cp -f /etc/logrotate.conf /etc/logrotate2.conf',
10
+ 'chmod 777 /etc/logrotate2.conf',
11
+ 'cat /etc/rotate.conf >> /etc/logrotate2.conf',
12
+ 'cp -f /etc/logrotate2.conf /etc/logrotate.conf',
13
+ 'rm -f /etc/logrotate2.conf',
14
+ 'rm -f /etc/rotate.conf'
15
+ ]
16
+ end
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,85 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+
3
+ namespace :mysql do
4
+ namespace :create do
5
+ desc "Create database and user"
6
+ task :default, :roles => :db do
7
+ mysql.create.user
8
+ mysql.create.db
9
+ end
10
+
11
+ desc "Create database"
12
+ task :db, :roles => :db do
13
+ mysql_run "CREATE DATABASE #{db_table}"
14
+ end
15
+
16
+ desc "Create database user"
17
+ task :user, :roles => :db do
18
+ mysql_run [
19
+ "CREATE USER '#{application}'@'localhost' IDENTIFIED BY '#{mysql_app_password}'",
20
+ "GRANT ALL PRIVILEGES ON #{db_table}.* TO '#{application}'@'localhost'"
21
+ ]
22
+ end
23
+ end
24
+
25
+ namespace :destroy do
26
+ desc "Destroy database and user"
27
+ task :default, :roles => :db do
28
+ mysql.destroy.db
29
+ mysql.destroy.user
30
+ end
31
+
32
+ desc "Destroy database"
33
+ task :db, :roles => :db do
34
+ mysql_run "DROP DATABASE #{db_table}"
35
+ end
36
+
37
+ desc "Destroy database user"
38
+ task :user, :roles => :db do
39
+ mysql_run [
40
+ "REVOKE ALL PRIVILEGES, GRANT OPTION FROM '#{application}'@'localhost'",
41
+ "DROP USER '#{application}'@'localhost'"
42
+ ]
43
+ end
44
+ end
45
+
46
+ namespace :backup do
47
+ desc "Upload local backup to remote"
48
+ task :local_to_server, :roles => :db do
49
+ from = File.expand_path("backups/#{backup_name}.bz2", FileUtils.pwd)
50
+ if File.exists?(from)
51
+ run_each "mkdir -p #{shared_path}/backups"
52
+ upload from, "#{shared_path}/backups/#{backup_name}.bz2"
53
+ else
54
+ puts "Does not exist: #{from}"
55
+ end
56
+ end
57
+
58
+ desc "Restore remote database from backup"
59
+ task :restore, :roles => :db do
60
+ run_each "bunzip2 < #{shared_path}/backups/#{backup_name}.bz2 | mysql -u #{application} --password=#{mysql_app_password} #{db_table}"
61
+ end
62
+
63
+ desc "Backup database to local"
64
+ task :to_local, :roles => :db do
65
+ to_server
66
+ system "mkdir -p ~/db_backups/#{stage}/#{application}"
67
+ get "#{shared_path}/db_backups/#{backup_name}.bz2", File.expand_path("~/db_backups/#{stage}/#{application}/#{backup_name}.bz2")
68
+ end
69
+
70
+ desc "Backup database to remote"
71
+ task :to_server, :roles => :db do
72
+ run_each [
73
+ "mkdir -p #{shared_path}/db_backups",
74
+ "mysqldump --add-drop-table -u #{application} -p#{mysql_app_password} #{db_table} | bzip2 -c > #{shared_path}/db_backups/#{backup_name}.bz2"
75
+ ]
76
+ end
77
+
78
+ def backup_name
79
+ now = Time.now
80
+ [ now.year, now.month, now.day ].join('-') + '.sql'
81
+ end
82
+ end
83
+ end
84
+
85
+ end
@@ -0,0 +1,76 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+
3
+ namespace :rails do
4
+ namespace :config do
5
+ desc "Creates database.yml in the shared config"
6
+ task :default, :roles => :app do
7
+ run "mkdir -p #{shared_path}/config"
8
+ Dir[File.expand_path('../../templates/rails/*', File.dirname(__FILE__))].each do |f|
9
+ upload_from_erb "#{shared_path}/config/#{File.basename(f, '.erb')}", binding, :folder => 'rails'
10
+ end
11
+ end
12
+
13
+ desc "Set up app with app_helpers"
14
+ task :app_helpers do
15
+ run "cd #{release_path} && script/plugin install git://github.com/winton/app_helpers.git"
16
+ run "cd #{release_path} && rake RAILS_ENV=production quiet=true app_helpers"
17
+ end
18
+
19
+ desc "Configure attachment_fu"
20
+ task :attachment_fu, :roles => :app do
21
+ run_each [
22
+ "mkdir -p #{shared_path}/media",
23
+ "ln -sf #{shared_path}/media #{release_path}/public/media"
24
+ ]
25
+ sudo_each [
26
+ "mkdir -p #{release_path}/tmp/attachment_fu",
27
+ "chown -R #{user} #{release_path}/tmp/attachment_fu"
28
+ ]
29
+ end
30
+
31
+ desc "Configure asset_packager"
32
+ task :asset_packager do
33
+ run "cd #{release_path} && rake RAILS_ENV=production asset:packager:build_all"
34
+ end
35
+
36
+ desc "Configure rails_widget"
37
+ task :rails_widget, :roles => :app do
38
+ run "cd #{release_path} && rake RAILS_ENV=production widget:production"
39
+ end
40
+
41
+ desc "Copies yml files in the shared config folder into our app config"
42
+ task :to_app, :roles => :app do
43
+ run "cp -Rf #{shared_path}/config/* #{release_path}/config"
44
+ end
45
+
46
+ namespace :thinking_sphinx do
47
+ desc "Configures thinking_sphinx"
48
+ task :default, :roles => :app do
49
+ sudo ";cd #{release_path} && rake RAILS_ENV=production ts:config"
50
+ end
51
+
52
+ desc "Stop thinking_sphinx"
53
+ task :stop, :roles => :app do
54
+ sudo ";cd #{release_path} && rake RAILS_ENV=production ts:stop"
55
+ end
56
+
57
+ desc "Start thinking_sphinx"
58
+ task :start, :roles => :app do
59
+ sudo ";cd #{release_path} && rake RAILS_ENV=production ts:start"
60
+ end
61
+
62
+ desc "Restart thinking_sphinx"
63
+ task :restart, :roles => :app do
64
+ rails.config.thinking_sphinx.stop
65
+ rails.config.thinking_sphinx.start
66
+ end
67
+ end
68
+ end
69
+
70
+ desc "Intialize Git submodules"
71
+ task :setup_git, :roles => :app do
72
+ run "cd #{release_path}; git submodule init; git submodule update"
73
+ end
74
+ end
75
+
76
+ end
@@ -0,0 +1,20 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+
3
+ namespace :sinatra do
4
+ namespace :config do
5
+ desc "Creates config.ru in shared config"
6
+ task :default do
7
+ run "mkdir -p #{shared_path}/config"
8
+ Dir[File.expand_path('../../templates/rails/*', File.dirname(__FILE__))].each do |f|
9
+ upload_from_erb "#{shared_path}/config/#{File.basename(f, '.erb')}", binding, :folder => 'rails'
10
+ end
11
+ end
12
+
13
+ desc "Copies yml files in the shared config folder into our app config"
14
+ task :to_app, :roles => :app do
15
+ run "cp -Rf #{shared_path}/config/* #{release_path}/config"
16
+ end
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,56 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+
3
+ namespace :ssh do
4
+ desc 'Generate ssh keys and upload to server'
5
+ task :default do
6
+ ssh.keys.create.local
7
+ ssh.keys.upload
8
+ ssh.keys.create.remote
9
+ end
10
+
11
+ namespace :keys do
12
+ namespace :create do
13
+ desc "Creates an rsa ssh key pair (local)"
14
+ task :local do
15
+ system('ssh-keygen -t rsa') if yes(msg(:create_keys))
16
+ end
17
+
18
+ desc "Creates an rsa ssh key pair (remote)"
19
+ task :remote do
20
+ if yes(msg(:create_server_keys))
21
+ pass = ask "Enter a password for this key:"
22
+ sudo_each [
23
+ "ssh-keygen -t rsa -N '#{pass}' -q -f /home/#{user}/.ssh/id_rsa",
24
+ "chmod 0700 /home/#{user}/.ssh",
25
+ "chown -R #{user} /home/#{user}/.ssh"
26
+ ]
27
+ sudo_puts "tail -1 /home/#{user}/.ssh/id_rsa.pub"
28
+ end
29
+ end
30
+ end
31
+
32
+ desc "Uploads local ssh public keys into remote authorized_keys"
33
+ task :upload do
34
+ if yes(msg(:upload_keys))
35
+ key = ask msg(:upload_keys_2)
36
+ key = get_ssh_key key
37
+ if key.nil?
38
+ ssh.setup if yes("No keys found. Generate ssh keys now?")
39
+ else
40
+ sudo_each [
41
+ "mkdir -p /home/#{user}/.ssh",
42
+ "touch /home/#{user}/.ssh/authorized_keys"
43
+ ]
44
+ add_line "/home/#{user}/.ssh/authorized_keys", key
45
+ sudo_each [
46
+ "chmod 0700 /home/#{user}/.ssh",
47
+ "chmod 0600 /home/#{user}/.ssh/authorized_keys",
48
+ "chown -R #{user} /home/#{user}/.ssh"
49
+ ]
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ end
@@ -0,0 +1,29 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+
3
+ desc 'Set the target stage to staging'
4
+ task :staging do
5
+ set :stage, :staging
6
+ end
7
+
8
+ desc 'Set the target stage to test'
9
+ task :testing do
10
+ set :stage, :test
11
+ end
12
+
13
+ # None of this works in a namespace
14
+ desc 'Set up stage-dependent properties'
15
+ task :setup_stage do
16
+ set :base_dir, "#{ubistrano[:base_dir]}/#{stage}"
17
+ set :deploy_to, "#{base_dir}/#{application}"
18
+ set :db_table, "#{application}#{stage == :staging ? "_#{stage}" : ''}"
19
+
20
+ ubistrano[stage].each do |key, value|
21
+ set key, value
22
+ end
23
+
24
+ role :app, host, :primary => true
25
+ role :web, host, :primary => true
26
+ role :db, host, :primary => true
27
+ end
28
+
29
+ end
@@ -0,0 +1,273 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+
3
+ namespace :ubuntu do
4
+ desc "Set up a fresh Ubuntu server"
5
+ task :default do
6
+ puts space(msg(:about_templates))
7
+ exit unless yes(msg(:visudo))
8
+ if yes("Create the remote deploy user?")
9
+ exit unless yes(msg(:add_user))
10
+ end
11
+ ssh.default
12
+ ubuntu.config.default
13
+ ubuntu.aptitude.default
14
+ puts space(msg(:run_ubuntu_install))
15
+ end
16
+
17
+ desc "Restart Ubuntu server"
18
+ task :restart do
19
+ if yes(msg(:ubuntu_restart))
20
+ sudo_each 'shutdown -r now'
21
+ end
22
+ end
23
+
24
+ namespace :aptitude do
25
+ desc 'Run all aptitude tasks'
26
+ task :default do
27
+ if yes(msg(:aptitude_default))
28
+ aptitude.update
29
+ aptitude.upgrade
30
+ aptitude.essential
31
+ ubuntu.restart
32
+ else
33
+ exit unless yes(msg(:aptitude_instructions))
34
+ end
35
+ end
36
+
37
+ desc 'Aptitude update'
38
+ task :update do
39
+ sudo_puts 'aptitude update -q -y'
40
+ end
41
+
42
+ desc 'Aptitude upgrade'
43
+ task :upgrade do
44
+ sudo_puts 'aptitude upgrade -q -y'
45
+ end
46
+
47
+ desc 'Aptitude install build-essential'
48
+ task :essential do
49
+ sudo_puts 'aptitude install build-essential -q -y'
50
+ end
51
+ end
52
+
53
+ namespace :config do
54
+ desc 'Run all tasks'
55
+ task :default do
56
+ ubuntu.config.sshd_config
57
+ ubuntu.config.ssh_config
58
+ ubuntu.config.iptables
59
+ end
60
+
61
+ desc "Updates server iptables"
62
+ task :iptables do
63
+ if yes(msg(:iptables))
64
+ upload_from_erb '/etc/iptables.rules', binding, :folder => 'ubuntu'
65
+ sudo_each [
66
+ 'iptables-restore < /etc/iptables.rules',
67
+ 'rm /etc/iptables.rules'
68
+ ]
69
+ end
70
+ end
71
+
72
+ desc "Updates sshd_config"
73
+ task :sshd_config do
74
+ if yes(msg(:sshd_config))
75
+ set :ssh_port, port
76
+ set :port, 22
77
+ change_line '/etc/ssh/sshd_config', 'Port 22', "Port #{port}"
78
+ change_line '/etc/ssh/sshd_config', 'PermitRootLogin yes', 'PermitRootLogin no'
79
+ change_line '/etc/ssh/sshd_config', 'X11Forwarding yes', 'X11Forwarding no'
80
+ change_line '/etc/ssh/sshd_config', 'UsePAM yes', 'UsePAM no'
81
+ remove_line '/etc/ssh/sshd_config', 'UseDNS .*'
82
+ add_line '/etc/ssh/sshd_config', 'UseDNS no'
83
+ remove_line '/etc/ssh/sshd_config', 'StrictHostKeyChecking .*'
84
+ sudo_puts '/etc/init.d/ssh reload'
85
+ set :port, ssh_port
86
+ end
87
+ end
88
+
89
+ desc "Updates ssh_config"
90
+ task :ssh_config do
91
+ if yes(msg(:ssh_config))
92
+ remove_line '/etc/ssh/ssh_config', 'StrictHostKeyChecking .*'
93
+ add_line '/etc/ssh/ssh_config', 'StrictHostKeyChecking no'
94
+ end
95
+ end
96
+ end
97
+
98
+ namespace :install do
99
+ desc 'Run all install tasks'
100
+ task :default do
101
+ ubuntu.install.apache
102
+ ubuntu.install.git
103
+ ubuntu.install.mysql
104
+ ubuntu.install.mysqltuner
105
+ ubuntu.install.perl
106
+ ubuntu.install.php
107
+ ubuntu.install.postfix
108
+ ubuntu.install.ruby
109
+ ubuntu.install.rubygems
110
+ ubuntu.install.passenger
111
+ ubuntu.install.god
112
+ ubuntu.install.rails
113
+ ubuntu.install.sinatra
114
+ ubuntu.install.sphinx
115
+ ubuntu.restart
116
+ puts space(msg(:ubuntu_finished))
117
+ end
118
+
119
+ desc 'Install Apache'
120
+ task :apache, :roles => :web do
121
+ if yes("May I install Apache?")
122
+ sudo_puts [
123
+ 'aptitude install apache2 apache2-mpm-prefork apache2-utils apache2.2-common libapr1 libaprutil1 ssl-cert apache2-prefork-dev -q -y',
124
+ 'a2enmod rewrite',
125
+ 'a2enmod ssl',
126
+ 'a2dissite default'
127
+ ]
128
+ end
129
+ end
130
+
131
+ desc 'Install Git'
132
+ task :git, :roles => :app do
133
+ install_source(:git) do |path|
134
+ sudo_puts [
135
+ 'apt-get build-dep git-core -q -y',
136
+ make_install(path)
137
+ ]
138
+ end if yes("May I install Git?")
139
+ end
140
+
141
+ desc 'Install MySQL'
142
+ task :mysql, :roles => :db do
143
+ if yes("May I install MySQL?")
144
+ sudo_puts 'aptitude install mysql-client-5.0 mysql-common mysql-server mysql-server-5.0 libmysqlclient15-dev libmysqlclient15off -q -y'
145
+ sudo "mysqladmin -u root password #{mysql_root_password || ''}"
146
+ exit unless yes(msg(:secure_mysql))
147
+ end
148
+ end
149
+
150
+ desc "Install MySQLTuner"
151
+ task :mysqltuner, :roles => :db do
152
+ if yes(msg(:mysqltuner))
153
+ bin = "/usr/local/bin"
154
+ run_each [
155
+ "cd #{bin} && sudo wget --quiet #{sources[:mysqltuner]}",
156
+ "cd #{bin} && sudo chmod 0700 mysqltuner.pl",
157
+ "cd #{bin} && sudo mv mysqltuner.pl mysqltuner"
158
+ ]
159
+ exit unless yes(msg(:mysqltuner_instructions))
160
+ end
161
+ end
162
+
163
+ desc 'Install Perl'
164
+ task :perl, :roles => :web do
165
+ if yes("May I install Perl?")
166
+ sudo_puts 'aptitude install libdbi-perl libnet-daemon-perl libplrpc-perl libdbd-mysql-perl -q -y'
167
+ end
168
+ end
169
+
170
+ desc 'Install PHP'
171
+ task :php, :roles => :web do
172
+ if yes("May I install PHP?")
173
+ sudo_puts 'aptitude install php5-common php5-mysql libapache2-mod-php5 php-pear php-mail php-net-smtp -q -y'
174
+ end
175
+ end
176
+
177
+ desc 'Install Postfix'
178
+ task :postfix, :roles => :web do
179
+ if yes("May I install Postfix and set it up as a relay?")
180
+ smtp = ask 'What is your SMTP server address?'
181
+ login = ask 'What is your SMTP server username?'
182
+ pass = ask 'What is your SMTP server password?'
183
+ sudo_puts 'aptitude install postfix -q -y'
184
+ add_line '/etc/postfix/main.cf',
185
+ 'smtp_sasl_auth_enable = yes',
186
+ 'smtp_sasl_security_options = noanonymous',
187
+ 'smtp_sasl_password_maps = hash:/etc/postfix/saslpasswd',
188
+ 'smtp_always_send_ehlo = yes',
189
+ "relayhost = #{smtp}"
190
+ sudo_each 'touch /etc/postfix/saslpasswd'
191
+ add_line '/etc/postfix/saslpasswd', "#{smtp} #{login}:#{pass}"
192
+ sudo_each [
193
+ 'postmap /etc/postfix/saslpasswd',
194
+ '/etc/init.d/postfix restart'
195
+ ]
196
+ end
197
+ end
198
+
199
+ desc 'Install Ruby'
200
+ task :ruby, :roles => :app do
201
+ if yes("May I install Ruby?")
202
+ sudo_puts "aptitude install libopenssl-ruby -q -y"
203
+ install_source(:ruby) do |path|
204
+ sudo_puts make_install(path)
205
+ end
206
+ end
207
+ end
208
+
209
+ desc 'Install RubyGems'
210
+ task :rubygems, :roles => :app do
211
+ if yes("May I install RubyGems?")
212
+ install_source(:rubygems) do |path|
213
+ run_puts "cd #{path} && sudo ruby setup.rb"
214
+ end
215
+ gems.update
216
+ end
217
+ end
218
+
219
+ desc 'Install Passenger'
220
+ task :passenger, :roles => :app do
221
+ if yes("May I install Passenger (mod_rails)?")
222
+ gem_install :passenger
223
+ ROOT.apache.reload if yes(msg(:passenger))
224
+ end
225
+ end
226
+
227
+ desc 'Install God'
228
+ task :god, :roles => :app do
229
+ if yes(msg(:god))
230
+ gem_install 'god'
231
+ upload_from_erb '/etc/init.d/god', binding, :folder => 'ubuntu'
232
+ sudo_each [
233
+ ';cd /etc/init.d && sudo chmod +x god',
234
+ 'mkdir -p /usr/local/etc/god'
235
+ ]
236
+ upload_from_erb('/usr/local/etc/god.god', binding, :folder => 'ubuntu')
237
+ upload_from_erb('/usr/local/etc/god/apache.god', binding, :folder => 'ubuntu') if yes(msg(:god_apache))
238
+ upload_from_erb('/usr/local/etc/god/mysql.god', binding, :folder => 'ubuntu') if yes(msg(:god_mysql))
239
+ upload_from_erb('/usr/local/etc/god/sshd.god', binding, :folder => 'ubuntu') if yes(msg(:god_sshd))
240
+ sudo_puts [
241
+ 'update-rc.d god defaults'
242
+ ]
243
+ exit unless yes(msg(:god_finished))
244
+ end
245
+ end
246
+
247
+ desc 'Install Rails'
248
+ task :rails, :roles => :app do
249
+ if yes("May I install Rails?")
250
+ gem_install :mysql
251
+ gem_install :rails
252
+ end
253
+ end
254
+
255
+ desc 'Install Sinatra'
256
+ task :sinatra, :roles => :app do
257
+ if yes("May I install Sinatra?")
258
+ gem_install :do_mysql # Datamapper
259
+ gem_install 'dm-core'
260
+ gem_install :sinatra # Sinatra
261
+ end
262
+ end
263
+
264
+ desc 'Install Sphinx'
265
+ task :sphinx, :roles => :app do
266
+ install_source(:sphinx) do |path|
267
+ sudo_puts make_install(path)
268
+ end if yes("May I install Sphinx?")
269
+ end
270
+ end
271
+ end
272
+
273
+ end