capistrano-exfel 0.0.14 → 0.0.16
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +7 -1
- data/Gemfile +1 -1
- data/README.md +8 -2
- data/capistrano-exfel.gemspec +1 -0
- data/lib/capistrano/exfel/co7.rb +20 -0
- data/lib/capistrano/exfel/sl6.rb +1 -0
- data/lib/capistrano/exfel/version.rb +1 -1
- data/lib/capistrano/recipes/co7/00-passenger.conf +6 -0
- data/lib/capistrano/recipes/co7/apache_http.conf +7 -0
- data/lib/capistrano/recipes/co7/apache_ssl.conf +71 -0
- data/lib/capistrano/recipes/co7/httpd.conf +68 -0
- data/lib/capistrano/tasks/apache.rake +0 -243
- data/lib/capistrano/tasks/apache_co7.rake +136 -0
- data/lib/capistrano/tasks/apache_sl6.rake +244 -0
- data/lib/capistrano/tasks/application.rake +1 -1
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d5b83d102f385412f3033766066c168e36c0664
|
4
|
+
data.tar.gz: dee59900cbfcefe28b4daf36524972b0ff3a356b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a433e4230b37e00f681ebf6999bf8435a0de194ab0ea6f0916782d95ea30f8d450e81e0cb98ae3a56d3567b71ff9f762d97d3cf27465fc48808b5653d427ac9e
|
7
|
+
data.tar.gz: 214ac7f19d5ad2457930a501282abefb66e5a502a5198eab2cc5818ae9b44e72320e2e4857d6e1e2397c051a6eaf727a6c1ed9188cee2b95032520d571923e15
|
data/.rubocop.yml
CHANGED
@@ -22,4 +22,10 @@ Style/Lambda:
|
|
22
22
|
#
|
23
23
|
# Block has too many lines.
|
24
24
|
Metrics/BlockLength:
|
25
|
-
Max:
|
25
|
+
Max: 160 # Default 25
|
26
|
+
|
27
|
+
#
|
28
|
+
# Use 2 spaces for indentation in a heredoc by using some library(e.g. ActiveSupport's String#strip_heredoc).
|
29
|
+
Style/IndentHeredoc:
|
30
|
+
Exclude:
|
31
|
+
- 'lib/capistrano/tasks/apache_sl6.rake'
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -12,7 +12,7 @@ Add these lines to your application's Gemfile:
|
|
12
12
|
gem 'capistrano', '~> 3.4.0'
|
13
13
|
gem 'capistrano-rails', '~> 1.1.2'
|
14
14
|
gem 'capistrano-rvm', '~> 0.1.2'
|
15
|
-
gem 'capistrano-exfel', '~> 0.0.
|
15
|
+
gem 'capistrano-exfel', '~> 0.0.16'
|
16
16
|
|
17
17
|
And then execute:
|
18
18
|
|
@@ -24,11 +24,17 @@ Or install it yourself as:
|
|
24
24
|
|
25
25
|
## Usage
|
26
26
|
|
27
|
-
Add this line to your `Capfile
|
27
|
+
Add this line to your `Capfile` for Scientific Linux 6 machines:
|
28
28
|
|
29
29
|
# Load Capistrano Exfel Scientific Linux 6 tasks
|
30
30
|
require 'capistrano/exfel/sl6'
|
31
31
|
|
32
|
+
Add this line to your `Capfile` for CentOS 7 machines::
|
33
|
+
|
34
|
+
# Load Capistrano Exfel CentOS tasks
|
35
|
+
require 'capistrano/exfel/co7'
|
36
|
+
|
37
|
+
|
32
38
|
This gem will reuse `capistrano-rails` and `capistrano-rvm` tasks to build the following tasks:
|
33
39
|
|
34
40
|
Task **application:deploy_first_time**:
|
data/capistrano-exfel.gemspec
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
# Load DSL and Setup Up Stages
|
2
|
+
require 'capistrano/setup'
|
3
|
+
|
4
|
+
# Includes default deployment tasks
|
5
|
+
require 'capistrano/deploy'
|
6
|
+
|
7
|
+
# Includes tasks from other gems included in your Gemfile
|
8
|
+
require 'capistrano/rvm'
|
9
|
+
|
10
|
+
# We're going to use the full capistrano/rails since
|
11
|
+
# it includes the asset compilation, DB migrations and bundler
|
12
|
+
require 'capistrano/rails'
|
13
|
+
|
14
|
+
load File.expand_path('../../tasks/apache.rake', __FILE__)
|
15
|
+
load File.expand_path('../../tasks/apache_co7.rake', __FILE__)
|
16
|
+
load File.expand_path('../../tasks/app_home.rake', __FILE__)
|
17
|
+
load File.expand_path('../../tasks/application.rake', __FILE__)
|
18
|
+
load File.expand_path('../../tasks/database.rake', __FILE__)
|
19
|
+
load File.expand_path('../../tasks/secrets.rake', __FILE__)
|
20
|
+
load File.expand_path('../../tasks/util.rake', __FILE__)
|
data/lib/capistrano/exfel/sl6.rb
CHANGED
@@ -12,6 +12,7 @@ require 'capistrano/rvm'
|
|
12
12
|
require 'capistrano/rails'
|
13
13
|
|
14
14
|
load File.expand_path('../../tasks/apache.rake', __FILE__)
|
15
|
+
load File.expand_path('../../tasks/apache_sl6.rake', __FILE__)
|
15
16
|
load File.expand_path('../../tasks/app_home.rake', __FILE__)
|
16
17
|
load File.expand_path('../../tasks/application.rake', __FILE__)
|
17
18
|
load File.expand_path('../../tasks/database.rake', __FILE__)
|
@@ -0,0 +1,71 @@
|
|
1
|
+
Listen 443 https
|
2
|
+
|
3
|
+
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
|
4
|
+
|
5
|
+
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
|
6
|
+
SSLSessionCacheTimeout 300
|
7
|
+
|
8
|
+
SSLRandomSeed startup file:/dev/urandom 256
|
9
|
+
SSLRandomSeed connect builtin
|
10
|
+
|
11
|
+
SSLCryptoDevice builtin
|
12
|
+
|
13
|
+
<VirtualHost _default_:443>
|
14
|
+
|
15
|
+
ErrorLog logs/ssl_error_log
|
16
|
+
TransferLog logs/ssl_access_log
|
17
|
+
LogLevel warn
|
18
|
+
|
19
|
+
SSLEngine on
|
20
|
+
|
21
|
+
SSLProtocol all -SSLv2
|
22
|
+
|
23
|
+
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
|
24
|
+
|
25
|
+
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
|
26
|
+
|
27
|
+
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
|
28
|
+
|
29
|
+
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
|
30
|
+
SSLOptions +StdEnvVars
|
31
|
+
</Files>
|
32
|
+
<Directory "/var/www/cgi-bin">
|
33
|
+
SSLOptions +StdEnvVars
|
34
|
+
</Directory>
|
35
|
+
|
36
|
+
BrowserMatch "MSIE [2-5]" \
|
37
|
+
nokeepalive ssl-unclean-shutdown \
|
38
|
+
downgrade-1.0 force-response-1.0
|
39
|
+
|
40
|
+
CustomLog logs/ssl_request_log \
|
41
|
+
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
|
42
|
+
# <<APPLICATION_NAME>> - Ruby on Rails Application
|
43
|
+
#
|
44
|
+
# Application secured by SSL
|
45
|
+
|
46
|
+
Alias /<<APPLICATION_NAME>> /var/www/html/<<APPLICATION_NAME>>
|
47
|
+
|
48
|
+
#
|
49
|
+
# Passenger
|
50
|
+
#
|
51
|
+
PassengerResolveSymlinksInDocumentRoot on
|
52
|
+
|
53
|
+
#
|
54
|
+
# Application
|
55
|
+
#
|
56
|
+
<Directory "/var/www/html/<<APPLICATION_NAME>>/">
|
57
|
+
RackBaseURI /<<APPLICATION_NAME>>
|
58
|
+
RailsEnv <<ENVIRONMENT>>
|
59
|
+
|
60
|
+
PassengerUser nobody
|
61
|
+
# Scientific Linux: nobody / Ubuntu/Debian: nogroup
|
62
|
+
PassengerGroup nobody
|
63
|
+
|
64
|
+
# This relaxes Apache security settings.
|
65
|
+
Options -Indexes +MultiViews +FollowSymLinks
|
66
|
+
AllowOverride None
|
67
|
+
Require all granted
|
68
|
+
</Directory>
|
69
|
+
|
70
|
+
</VirtualHost>
|
71
|
+
|
@@ -0,0 +1,68 @@
|
|
1
|
+
|
2
|
+
ServerRoot "/etc/httpd"
|
3
|
+
Listen 80
|
4
|
+
|
5
|
+
Include conf.modules.d/*.conf
|
6
|
+
|
7
|
+
User apache
|
8
|
+
Group apache
|
9
|
+
|
10
|
+
ServerAdmin root@localhost
|
11
|
+
ServerSignature Off
|
12
|
+
ServerTokens Prod
|
13
|
+
|
14
|
+
<Directory />
|
15
|
+
AllowOverride none
|
16
|
+
Require all denied
|
17
|
+
</Directory>
|
18
|
+
|
19
|
+
DocumentRoot "/var/www/html"
|
20
|
+
|
21
|
+
<Directory "/var/www">
|
22
|
+
AllowOverride None
|
23
|
+
Require all granted
|
24
|
+
</Directory>
|
25
|
+
|
26
|
+
<Directory "/var/www/html">
|
27
|
+
Options Indexes FollowSymLinks
|
28
|
+
AllowOverride None
|
29
|
+
Require all granted
|
30
|
+
</Directory>
|
31
|
+
|
32
|
+
<IfModule dir_module>
|
33
|
+
DirectoryIndex index.html
|
34
|
+
</IfModule>
|
35
|
+
|
36
|
+
<Files ".ht*">
|
37
|
+
Require all denied
|
38
|
+
</Files>
|
39
|
+
|
40
|
+
ErrorLog "logs/error_log"
|
41
|
+
|
42
|
+
LogLevel warn
|
43
|
+
|
44
|
+
<IfModule log_config_module>
|
45
|
+
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
|
46
|
+
LogFormat "%h %l %u %t \"%r\" %>s %b" common
|
47
|
+
<IfModule logio_module>
|
48
|
+
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
|
49
|
+
</IfModule>
|
50
|
+
CustomLog "logs/access_log" combined
|
51
|
+
</IfModule>
|
52
|
+
|
53
|
+
|
54
|
+
<IfModule mime_module>
|
55
|
+
TypesConfig /etc/mime.types
|
56
|
+
AddType application/x-compress .Z
|
57
|
+
AddType application/x-gzip .gz .tgz
|
58
|
+
</IfModule>
|
59
|
+
|
60
|
+
AddDefaultCharset UTF-8
|
61
|
+
|
62
|
+
<IfModule mime_magic_module>
|
63
|
+
MIMEMagicFile conf/magic
|
64
|
+
</IfModule>
|
65
|
+
|
66
|
+
|
67
|
+
EnableSendfile on
|
68
|
+
IncludeOptional conf.d/*.conf
|
@@ -47,24 +47,6 @@ namespace :apache do
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
desc 'Configure Apache configuration files'
|
51
|
-
task :configure do
|
52
|
-
on roles(:app) do
|
53
|
-
sudo_cmd = "echo #{fetch(:password)} | sudo -S"
|
54
|
-
|
55
|
-
set :shared_path, "#{fetch(:deploy_to)}/shared"
|
56
|
-
set :shared_apache_path, "#{fetch(:shared_path)}/apache"
|
57
|
-
|
58
|
-
invoke 'apache:create_apache_shared_folder'
|
59
|
-
invoke 'apache:configure_app_conf_file'
|
60
|
-
invoke 'apache:configure_app_ssl_conf_file'
|
61
|
-
|
62
|
-
if remote_file_exists?('/etc/httpd/conf.d/ssl.conf')
|
63
|
-
execute "#{sudo_cmd} mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf_bck"
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
50
|
# desc 'Create Apache configuration files shared folder'
|
69
51
|
task :create_apache_shared_folder do
|
70
52
|
on roles(:app) do
|
@@ -83,66 +65,6 @@ namespace :apache do
|
|
83
65
|
end
|
84
66
|
end
|
85
67
|
|
86
|
-
# desc 'Configure (HTTP) Apache Application configuration files'
|
87
|
-
task :configure_app_conf_file do
|
88
|
-
on roles(:app) do
|
89
|
-
sudo_cmd = "echo #{fetch(:password)} | sudo -S"
|
90
|
-
|
91
|
-
debug '#' * 50
|
92
|
-
debug 'Configure (HTTP) Apache Application configuration files'
|
93
|
-
|
94
|
-
set :shared_apache_conf_file, "#{fetch(:shared_apache_path)}/app_#{fetch(:app_name_uri)}.conf"
|
95
|
-
http_file = File.expand_path('../../recipes/apache_http.conf', __FILE__)
|
96
|
-
upload! StringIO.new(File.read(http_file)), fetch(:shared_apache_conf_file).to_s
|
97
|
-
|
98
|
-
debug "chmod g+w #{fetch(:shared_apache_conf_file)}"
|
99
|
-
execute "chmod g+w #{fetch(:shared_apache_conf_file)}"
|
100
|
-
|
101
|
-
passenger_root = get_command_output('/usr/local/rvm/bin/rvm default do passenger-config --root')
|
102
|
-
ruby_path = "/#{passenger_root.split('/')[1..5].join('/')}/wrappers/ruby"
|
103
|
-
app_domain = fetch(:app_domain)
|
104
|
-
server_name = app_domain.split('/')[2]
|
105
|
-
|
106
|
-
debug "sed -i 's|<<PASSENGER_ROOT>>|#{passenger_root}|g' #{fetch(:shared_apache_conf_file)}"
|
107
|
-
execute "sed -i 's|<<PASSENGER_ROOT>>|#{passenger_root}|g' #{fetch(:shared_apache_conf_file)}"
|
108
|
-
|
109
|
-
execute "sed -i 's|<<RUBY_PATH>>|#{ruby_path}|g' #{fetch(:shared_apache_conf_file)}"
|
110
|
-
execute "sed -i 's|<<APP_DOMAIN>>|#{app_domain}|g' #{fetch(:shared_apache_conf_file)}"
|
111
|
-
execute "sed -i 's|<<SERVER_NAME>>|#{server_name}|g' #{fetch(:shared_apache_conf_file)}"
|
112
|
-
|
113
|
-
execute "#{sudo_cmd} ln -sfn #{fetch(:shared_apache_conf_file)} /etc/httpd/conf.d/"
|
114
|
-
|
115
|
-
debug '#' * 50
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
# desc 'Configure (HTTPS) Apache Application configuration files'
|
120
|
-
task :configure_app_ssl_conf_file do
|
121
|
-
on roles(:app) do
|
122
|
-
sudo_cmd = "echo #{fetch(:password)} | sudo -S"
|
123
|
-
|
124
|
-
debug '#' * 50
|
125
|
-
debug 'Configure (HTTPS) Apache Application configuration files'
|
126
|
-
|
127
|
-
set :shared_apache_conf_ssl_file, "#{fetch(:shared_apache_path)}/app_#{fetch(:app_name_uri)}_ssl.conf"
|
128
|
-
http_ssl_file = File.expand_path('../../recipes/apache_ssl.conf', __FILE__)
|
129
|
-
upload! StringIO.new(File.read(http_ssl_file)), fetch(:shared_apache_conf_ssl_file).to_s
|
130
|
-
|
131
|
-
debug "chmod g+w #{fetch(:shared_apache_conf_ssl_file)}"
|
132
|
-
execute "chmod g+w #{fetch(:shared_apache_conf_ssl_file)}"
|
133
|
-
|
134
|
-
server_name = string_between_markers(fetch(:app_domain), '://', '/')
|
135
|
-
|
136
|
-
execute "sed -i 's/<<SERVER_NAME>>/#{server_name}/g' #{fetch(:shared_apache_conf_ssl_file)}"
|
137
|
-
execute "sed -i 's/<<APPLICATION_NAME>>/#{fetch(:app_name_uri)}/g' #{fetch(:shared_apache_conf_ssl_file)}"
|
138
|
-
execute "sed -i 's/<<ENVIRONMENT>>/#{fetch(:environment)}/g' #{fetch(:shared_apache_conf_ssl_file)}"
|
139
|
-
|
140
|
-
execute "#{sudo_cmd} ln -sfn #{fetch(:shared_apache_conf_ssl_file)} /etc/httpd/conf.d/"
|
141
|
-
|
142
|
-
debug '#' * 50
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
68
|
desc 'Configure Apache to start at bootup'
|
147
69
|
task :chkconfig_on do
|
148
70
|
on roles(:web) do
|
@@ -193,169 +115,4 @@ namespace :apache do
|
|
193
115
|
info '#' * 50
|
194
116
|
end
|
195
117
|
end
|
196
|
-
|
197
|
-
desc 'Update httpd.conf to secure apache server'
|
198
|
-
task :secure_apache do
|
199
|
-
on roles(:web) do
|
200
|
-
sudo_cmd = "echo #{fetch(:password)} | sudo -S"
|
201
|
-
|
202
|
-
debug '#' * 50
|
203
|
-
debug 'Update httpd.conf to secure apache server'
|
204
|
-
|
205
|
-
set :httpd_conf_file, '/etc/httpd/conf/httpd.conf'
|
206
|
-
|
207
|
-
# Replace the original Apache configuration file
|
208
|
-
if remote_file_exists?('/etc/httpd/conf/httpd.conf_bck')
|
209
|
-
info 'Apache original configuration file already backed up at: /etc/httpd/conf/httpd.conf_bck'
|
210
|
-
else
|
211
|
-
execute "#{sudo_cmd} cp -f #{fetch(:httpd_conf_file)} /etc/httpd/conf/httpd.conf_bck"
|
212
|
-
info 'Apache original configuration file backed up at: /etc/httpd/conf/httpd.conf_bck'
|
213
|
-
end
|
214
|
-
|
215
|
-
# The ServerSignature directive allows the configuration of a trailing footer line under server-generated docs
|
216
|
-
# Options: On | Off | EMail
|
217
|
-
# More details: http://httpd.apache.org/docs/current/mod/core.html#serversignature
|
218
|
-
set :server_signature_off, get_num_occurrences_in_file(fetch(:httpd_conf_file), 'ServerSignature Off')
|
219
|
-
|
220
|
-
if fetch(:server_signature_off) == 1
|
221
|
-
info 'ServerSignature Off is already set'
|
222
|
-
|
223
|
-
else
|
224
|
-
set :num_replacements, 0
|
225
|
-
%w(On Off EMail).each do |option|
|
226
|
-
set :server_signature_option,
|
227
|
-
get_num_occurrences_in_file(fetch(:httpd_conf_file), "ServerSignature #{option}")
|
228
|
-
|
229
|
-
if fetch(:server_signature_option) == 1
|
230
|
-
info "sed -i 's/ServerSignature #{option}/ServerSignature Off/g' #{fetch(:httpd_conf_file)}"
|
231
|
-
execute "#{sudo_cmd} sed -i 's/ServerSignature #{option}/ServerSignature Off/g' #{fetch(:httpd_conf_file)}"
|
232
|
-
set :num_replacements, fetch(:num_replacements) + 1
|
233
|
-
end
|
234
|
-
end
|
235
|
-
|
236
|
-
error 'ServerSignature was not found' if fetch(:num_replacements).zero?
|
237
|
-
end
|
238
|
-
|
239
|
-
# Don't give away too much information about all the subcomponents we are running.
|
240
|
-
#
|
241
|
-
# Options: Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
|
242
|
-
# More details: http://httpd.apache.org/docs/current/mod/core.html#servertokens
|
243
|
-
set :server_token_prod, get_num_occurrences_in_file(fetch(:httpd_conf_file), 'ServerTokens Prod')
|
244
|
-
if fetch(:server_token_prod) == 1
|
245
|
-
info 'ServerTokens Prod is already set'
|
246
|
-
else
|
247
|
-
set :num_replacements, 0
|
248
|
-
%w(Major Minor Minimal Min ProductOnly Prod OS Full).each do |option|
|
249
|
-
set :server_token_option, get_num_occurrences_in_file(fetch(:httpd_conf_file), "ServerTokens #{option}")
|
250
|
-
|
251
|
-
next unless fetch(:server_token_option) == 1
|
252
|
-
|
253
|
-
# Then, only if fetch(:server_token_option) == 1
|
254
|
-
info "sed -i 's/ServerTokens #{option}/ServerTokens Prod/g' #{fetch(:httpd_conf_file)}"
|
255
|
-
execute "#{sudo_cmd} sed -i 's/ServerTokens #{option}/ServerTokens Prod/g' #{fetch(:httpd_conf_file)}"
|
256
|
-
set :num_replacements, fetch(:num_replacements) + 1
|
257
|
-
end
|
258
|
-
|
259
|
-
error 'ServerTokens was not found' if fetch(:num_replacements).zero?
|
260
|
-
end
|
261
|
-
|
262
|
-
# Do not allow browsing outside the document root
|
263
|
-
#
|
264
|
-
# <Directory />
|
265
|
-
# Order Deny,Allow
|
266
|
-
# Deny from all
|
267
|
-
# Options None
|
268
|
-
# AllowOverride None
|
269
|
-
# </Directory>
|
270
|
-
#
|
271
|
-
message_line1 = '# Default Directory configuration changed via Capistrano.'
|
272
|
-
|
273
|
-
set :server_dir_secure_configuration, get_num_occurrences_in_file(fetch(:httpd_conf_file), message_line1)
|
274
|
-
|
275
|
-
if fetch(:server_token_prod) == 1
|
276
|
-
info 'The correct directory configuration is already correctly set'
|
277
|
-
else
|
278
|
-
|
279
|
-
set :tmp_dir_original_config, '/tmp/tmp_dir_original_config.conf'
|
280
|
-
set :tmp_dir_original_commented_config, '/tmp/tmp_dir_original_commented_config.conf'
|
281
|
-
set :tmp_dir_new_config, '/tmp/tmp_dir_new_config.conf'
|
282
|
-
|
283
|
-
# Create a temporary copy of the Apache configuration file
|
284
|
-
set :tmp_httpd_file, '/tmp/httpd.conf'
|
285
|
-
execute :cp, '-f', "#{fetch(:httpd_conf_file)} #{fetch(:tmp_httpd_file)}"
|
286
|
-
|
287
|
-
set :grep_for_directory, "grep -Pzo '^([ ]*<Directory />[ ]*)(\\n.*)+(\\n[ ]*</Directory>[ ]*)(\\n){1}$' "\
|
288
|
-
"#{fetch(:tmp_httpd_file)}"
|
289
|
-
|
290
|
-
# How many lines have the original configuration
|
291
|
-
command = "#{fetch(:grep_for_directory)} | grep -n '</Directory>' | head -n 1 | cut -d ':' -f1"
|
292
|
-
set :def_directory_num_lines, get_command_output(command).to_i
|
293
|
-
debug "Original configuration has #{fetch(:def_directory_num_lines)} lines."
|
294
|
-
|
295
|
-
# Saves to a file the original configuration
|
296
|
-
command = "#{fetch(:grep_for_directory)} | "\
|
297
|
-
"head -n #{fetch(:def_directory_num_lines)} > #{fetch(:tmp_dir_original_config)}"
|
298
|
-
debug command
|
299
|
-
execute command
|
300
|
-
|
301
|
-
# Saves to a file the original configuration commented
|
302
|
-
execute :cp, '-f', "#{fetch(:tmp_dir_original_config)} #{fetch(:tmp_dir_original_commented_config)}"
|
303
|
-
execute "sed -e 's/^/#/' -i #{fetch(:tmp_dir_original_commented_config)}"
|
304
|
-
|
305
|
-
# Save to a file the new desired configuration
|
306
|
-
new_directory_configs = <<-EOF
|
307
|
-
|
308
|
-
#Do not allow browsing outside the document root
|
309
|
-
<Directory />
|
310
|
-
Order Deny,Allow
|
311
|
-
Deny from all
|
312
|
-
Options None
|
313
|
-
AllowOverride None
|
314
|
-
</Directory>
|
315
|
-
|
316
|
-
EOF
|
317
|
-
upload! StringIO.new(new_directory_configs), fetch(:tmp_dir_new_config).to_s
|
318
|
-
|
319
|
-
# Update the new configuration file to have the original configuration commented
|
320
|
-
debug "cat #{fetch(:tmp_dir_new_config)} >> #{fetch(:tmp_dir_original_commented_config)}"
|
321
|
-
execute "cat #{fetch(:tmp_dir_new_config)} >> #{fetch(:tmp_dir_original_commented_config)}"
|
322
|
-
execute "mv -f #{fetch(:tmp_dir_original_commented_config)} #{fetch(:tmp_dir_new_config)}"
|
323
|
-
|
324
|
-
# Generates the special SED parameter: 'N;' per line that should be replaced
|
325
|
-
special_sed_param = 'N;' * fetch(:def_directory_num_lines)
|
326
|
-
debug "Special sed parameter is: ''#{special_sed_param}''"
|
327
|
-
|
328
|
-
# Replace the old original directory configuration for a specific message (in the temporary file)
|
329
|
-
message_complete = "#{message_line1}\\n#\\n"
|
330
|
-
command_to_replace = "out=$(sed -e :a -e '$!N;s/\\n/.*/;ta' #{fetch(:tmp_dir_original_config)} | "\
|
331
|
-
"sed -e :a -e '$!N;s/\//./;ta'); sed -i '/<Directory .>.*/ {#{special_sed_param} "\
|
332
|
-
"s/'$out'/#{message_complete}/g}' #{fetch(:tmp_httpd_file)}"
|
333
|
-
debug command_to_replace
|
334
|
-
execute command_to_replace
|
335
|
-
|
336
|
-
# Search for the line where the message was inserted
|
337
|
-
command = "grep -n '#{message_line1}' #{fetch(:tmp_httpd_file)} | cut -d':' -f 1"
|
338
|
-
debug command
|
339
|
-
line_with_match = get_command_output(command).to_i
|
340
|
-
next_line = line_with_match + 1
|
341
|
-
debug "New configuration will be added to line #{next_line}"
|
342
|
-
|
343
|
-
# Inserts the new directory configuration (with the old configuration commented)
|
344
|
-
# in the line following the comment added before
|
345
|
-
command = "sed '#{next_line}r #{fetch(:tmp_dir_new_config)}' < #{fetch(:tmp_httpd_file)} "\
|
346
|
-
'> tmp_httpd_new_conf_merge.conf'
|
347
|
-
|
348
|
-
debug command
|
349
|
-
execute command
|
350
|
-
execute "mv -f tmp_httpd_new_conf_merge.conf #{fetch(:tmp_httpd_file)}"
|
351
|
-
|
352
|
-
# Replace the original Apache configuration file
|
353
|
-
execute "#{sudo_cmd} mv -f #{fetch(:tmp_httpd_file)} #{fetch(:httpd_conf_file)}"
|
354
|
-
|
355
|
-
# Remove all created temporary files
|
356
|
-
execute "rm -f #{fetch(:tmp_dir_original_config)} #{fetch(:tmp_dir_original_commented_config)} "\
|
357
|
-
"#{fetch(:tmp_dir_new_config)} #{fetch(:tmp_httpd_file)}"
|
358
|
-
end
|
359
|
-
end
|
360
|
-
end
|
361
118
|
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
namespace :apache do
|
2
|
+
desc 'Configure Apache configuration files'
|
3
|
+
task :configure do
|
4
|
+
on roles(:app) do
|
5
|
+
sudo_cmd = "echo #{fetch(:password)} | sudo -S"
|
6
|
+
|
7
|
+
set :shared_path, "#{fetch(:deploy_to)}/shared"
|
8
|
+
set :shared_apache_path, "#{fetch(:shared_path)}/apache"
|
9
|
+
|
10
|
+
invoke 'apache:create_apache_shared_folder'
|
11
|
+
invoke 'apache:configure_apache_modules'
|
12
|
+
invoke 'apache:configure_app_conf_file'
|
13
|
+
invoke 'apache:configure_app_ssl_conf_file'
|
14
|
+
|
15
|
+
if remote_file_exists?('/etc/httpd/conf.d/ssl.conf')
|
16
|
+
execute "#{sudo_cmd} mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf_bck"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
desc 'Configure (HTTP) Apache modules'
|
22
|
+
task :configure_apache_modules do
|
23
|
+
on roles(:app) do
|
24
|
+
sudo_cmd = "echo #{fetch(:password)} | sudo -S"
|
25
|
+
|
26
|
+
debug '#' * 50
|
27
|
+
debug 'Configure (HTTP) Apache Passenger module'
|
28
|
+
|
29
|
+
set :shared_passenger_file, "#{fetch(:shared_apache_path)}/00-passenger.conf"
|
30
|
+
passenger_file = File.expand_path('../../recipes/co7/00-passenger.conf', __FILE__)
|
31
|
+
|
32
|
+
upload! StringIO.new(File.read(passenger_file)), fetch(:shared_passenger_file).to_s
|
33
|
+
|
34
|
+
debug "chmod g+w #{fetch(:shared_passenger_file)}"
|
35
|
+
execute "chmod g+w #{fetch(:shared_passenger_file)}"
|
36
|
+
|
37
|
+
passenger_root = get_command_output('/usr/local/rvm/bin/rvm default do passenger-config --root')
|
38
|
+
ruby_path = "/#{passenger_root.split('/')[1..5].join('/')}/wrappers/ruby"
|
39
|
+
|
40
|
+
debug "sed -i 's|<<PASSENGER_ROOT>>|#{passenger_root}|g' #{fetch(:shared_passenger_file)}"
|
41
|
+
execute "sed -i 's|<<PASSENGER_ROOT>>|#{passenger_root}|g' #{fetch(:shared_passenger_file)}"
|
42
|
+
execute "sed -i 's|<<RUBY_PATH>>|#{ruby_path}|g' #{fetch(:shared_passenger_file)}"
|
43
|
+
|
44
|
+
execute "#{sudo_cmd} ln -sfn #{fetch(:shared_passenger_file)} /etc/httpd/conf.modules.d/"
|
45
|
+
|
46
|
+
debug '#' * 50
|
47
|
+
debug 'Deactivate unnecessary Apache modules'
|
48
|
+
%w(00-dav.conf 00-lua.conf 00-proxy.conf 01-cgi.conf).each do |file|
|
49
|
+
if remote_file_exists?("/etc/httpd/conf.modules.d/#{file}")
|
50
|
+
execute "#{sudo_cmd} mv /etc/httpd/conf.modules.d/#{file} /etc/httpd/conf.modules.d/#{file}_bck"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
debug '#' * 50
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# desc 'Configure (HTTP) Apache Application configuration files'
|
58
|
+
task :configure_app_conf_file do
|
59
|
+
on roles(:app) do
|
60
|
+
sudo_cmd = "echo #{fetch(:password)} | sudo -S"
|
61
|
+
|
62
|
+
debug '#' * 50
|
63
|
+
debug 'Configure (HTTP) Apache Application configuration files'
|
64
|
+
|
65
|
+
set :shared_apache_conf_file, "#{fetch(:shared_apache_path)}/app_#{fetch(:app_name_uri)}.conf"
|
66
|
+
http_file = File.expand_path('../../recipes/co7/apache_http.conf', __FILE__)
|
67
|
+
upload! StringIO.new(File.read(http_file)), fetch(:shared_apache_conf_file).to_s
|
68
|
+
|
69
|
+
debug "chmod g+w #{fetch(:shared_apache_conf_file)}"
|
70
|
+
execute "chmod g+w #{fetch(:shared_apache_conf_file)}"
|
71
|
+
|
72
|
+
app_domain = fetch(:app_domain)
|
73
|
+
server_name = app_domain.split('/')[2]
|
74
|
+
|
75
|
+
execute "sed -i 's|<<APP_DOMAIN>>|#{app_domain}|g' #{fetch(:shared_apache_conf_file)}"
|
76
|
+
execute "sed -i 's|<<SERVER_NAME>>|#{server_name}|g' #{fetch(:shared_apache_conf_file)}"
|
77
|
+
|
78
|
+
execute "#{sudo_cmd} ln -sfn #{fetch(:shared_apache_conf_file)} /etc/httpd/conf.d/"
|
79
|
+
|
80
|
+
debug '#' * 50
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# desc 'Configure (HTTPS) Apache Application configuration files'
|
85
|
+
task :configure_app_ssl_conf_file do
|
86
|
+
on roles(:app) do
|
87
|
+
sudo_cmd = "echo #{fetch(:password)} | sudo -S"
|
88
|
+
|
89
|
+
debug '#' * 50
|
90
|
+
debug 'Configure (HTTPS) Apache Application configuration files'
|
91
|
+
|
92
|
+
set :shared_apache_conf_ssl_file, "#{fetch(:shared_apache_path)}/app_#{fetch(:app_name_uri)}_ssl.conf"
|
93
|
+
http_ssl_file = File.expand_path('../../recipes/co7/apache_ssl.conf', __FILE__)
|
94
|
+
upload! StringIO.new(File.read(http_ssl_file)), fetch(:shared_apache_conf_ssl_file).to_s
|
95
|
+
|
96
|
+
debug "chmod g+w #{fetch(:shared_apache_conf_ssl_file)}"
|
97
|
+
execute "chmod g+w #{fetch(:shared_apache_conf_ssl_file)}"
|
98
|
+
|
99
|
+
execute "sed -i 's/<<APPLICATION_NAME>>/#{fetch(:app_name_uri)}/g' #{fetch(:shared_apache_conf_ssl_file)}"
|
100
|
+
execute "sed -i 's/<<ENVIRONMENT>>/#{fetch(:environment)}/g' #{fetch(:shared_apache_conf_ssl_file)}"
|
101
|
+
|
102
|
+
execute "#{sudo_cmd} ln -sfn #{fetch(:shared_apache_conf_ssl_file)} /etc/httpd/conf.d/"
|
103
|
+
|
104
|
+
debug '#' * 50
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
desc 'Update httpd.conf to secure apache server'
|
109
|
+
task :secure_apache do
|
110
|
+
on roles(:web) do
|
111
|
+
sudo_cmd = "echo #{fetch(:password)} | sudo -S"
|
112
|
+
|
113
|
+
debug '#' * 50
|
114
|
+
debug 'Update httpd.conf to secure apache server'
|
115
|
+
|
116
|
+
set :httpd_conf_file, '/etc/httpd/conf/httpd.conf'
|
117
|
+
|
118
|
+
# Replace the original Apache configuration file
|
119
|
+
if remote_file_exists?('/etc/httpd/conf/httpd.conf_bck')
|
120
|
+
info 'Apache original configuration file already backed up at: /etc/httpd/conf/httpd.conf_bck'
|
121
|
+
else
|
122
|
+
execute "#{sudo_cmd} cp -f #{fetch(:httpd_conf_file)} /etc/httpd/conf/httpd.conf_bck"
|
123
|
+
info 'Apache original configuration file backed up at: /etc/httpd/conf/httpd.conf_bck'
|
124
|
+
end
|
125
|
+
|
126
|
+
# Create a temporary copy of the Apache configuration file
|
127
|
+
set :tmp_httpd_file, '/tmp/httpd.conf'
|
128
|
+
httpd_safe_file = File.expand_path('../../recipes/co7/httpd.conf', __FILE__)
|
129
|
+
|
130
|
+
upload! StringIO.new(File.read(httpd_safe_file)), fetch(:tmp_httpd_file).to_s
|
131
|
+
|
132
|
+
# Replace the original Apache configuration file
|
133
|
+
execute "#{sudo_cmd} mv -f #{fetch(:tmp_httpd_file)} #{fetch(:httpd_conf_file)}"
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -0,0 +1,244 @@
|
|
1
|
+
namespace :apache do
|
2
|
+
desc 'Configure Apache configuration files'
|
3
|
+
task :configure do
|
4
|
+
on roles(:app) do
|
5
|
+
sudo_cmd = "echo #{fetch(:password)} | sudo -S"
|
6
|
+
|
7
|
+
set :shared_path, "#{fetch(:deploy_to)}/shared"
|
8
|
+
set :shared_apache_path, "#{fetch(:shared_path)}/apache"
|
9
|
+
|
10
|
+
invoke 'apache:create_apache_shared_folder'
|
11
|
+
invoke 'apache:configure_app_conf_file'
|
12
|
+
invoke 'apache:configure_app_ssl_conf_file'
|
13
|
+
|
14
|
+
if remote_file_exists?('/etc/httpd/conf.d/ssl.conf')
|
15
|
+
execute "#{sudo_cmd} mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf_bck"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# desc 'Configure (HTTP) Apache Application configuration files'
|
21
|
+
task :configure_app_conf_file do
|
22
|
+
on roles(:app) do
|
23
|
+
sudo_cmd = "echo #{fetch(:password)} | sudo -S"
|
24
|
+
|
25
|
+
debug '#' * 50
|
26
|
+
debug 'Configure (HTTP) Apache Application configuration files'
|
27
|
+
|
28
|
+
set :shared_apache_conf_file, "#{fetch(:shared_apache_path)}/app_#{fetch(:app_name_uri)}.conf"
|
29
|
+
http_file = File.expand_path('../../recipes/apache_http.conf', __FILE__)
|
30
|
+
upload! StringIO.new(File.read(http_file)), fetch(:shared_apache_conf_file).to_s
|
31
|
+
|
32
|
+
debug "chmod g+w #{fetch(:shared_apache_conf_file)}"
|
33
|
+
execute "chmod g+w #{fetch(:shared_apache_conf_file)}"
|
34
|
+
|
35
|
+
passenger_root = get_command_output('/usr/local/rvm/bin/rvm default do passenger-config --root')
|
36
|
+
ruby_path = "/#{passenger_root.split('/')[1..5].join('/')}/wrappers/ruby"
|
37
|
+
app_domain = fetch(:app_domain)
|
38
|
+
server_name = app_domain.split('/')[2]
|
39
|
+
|
40
|
+
debug "sed -i 's|<<PASSENGER_ROOT>>|#{passenger_root}|g' #{fetch(:shared_apache_conf_file)}"
|
41
|
+
execute "sed -i 's|<<PASSENGER_ROOT>>|#{passenger_root}|g' #{fetch(:shared_apache_conf_file)}"
|
42
|
+
|
43
|
+
execute "sed -i 's|<<RUBY_PATH>>|#{ruby_path}|g' #{fetch(:shared_apache_conf_file)}"
|
44
|
+
execute "sed -i 's|<<APP_DOMAIN>>|#{app_domain}|g' #{fetch(:shared_apache_conf_file)}"
|
45
|
+
execute "sed -i 's|<<SERVER_NAME>>|#{server_name}|g' #{fetch(:shared_apache_conf_file)}"
|
46
|
+
|
47
|
+
execute "#{sudo_cmd} ln -sfn #{fetch(:shared_apache_conf_file)} /etc/httpd/conf.d/"
|
48
|
+
|
49
|
+
debug '#' * 50
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# desc 'Configure (HTTPS) Apache Application configuration files'
|
54
|
+
task :configure_app_ssl_conf_file do
|
55
|
+
on roles(:app) do
|
56
|
+
sudo_cmd = "echo #{fetch(:password)} | sudo -S"
|
57
|
+
|
58
|
+
debug '#' * 50
|
59
|
+
debug 'Configure (HTTPS) Apache Application configuration files'
|
60
|
+
|
61
|
+
set :shared_apache_conf_ssl_file, "#{fetch(:shared_apache_path)}/app_#{fetch(:app_name_uri)}_ssl.conf"
|
62
|
+
http_ssl_file = File.expand_path('../../recipes/apache_ssl.conf', __FILE__)
|
63
|
+
upload! StringIO.new(File.read(http_ssl_file)), fetch(:shared_apache_conf_ssl_file).to_s
|
64
|
+
|
65
|
+
debug "chmod g+w #{fetch(:shared_apache_conf_ssl_file)}"
|
66
|
+
execute "chmod g+w #{fetch(:shared_apache_conf_ssl_file)}"
|
67
|
+
|
68
|
+
server_name = string_between_markers(fetch(:app_domain), '://', '/')
|
69
|
+
|
70
|
+
execute "sed -i 's/<<SERVER_NAME>>/#{server_name}/g' #{fetch(:shared_apache_conf_ssl_file)}"
|
71
|
+
execute "sed -i 's/<<APPLICATION_NAME>>/#{fetch(:app_name_uri)}/g' #{fetch(:shared_apache_conf_ssl_file)}"
|
72
|
+
execute "sed -i 's/<<ENVIRONMENT>>/#{fetch(:environment)}/g' #{fetch(:shared_apache_conf_ssl_file)}"
|
73
|
+
|
74
|
+
execute "#{sudo_cmd} ln -sfn #{fetch(:shared_apache_conf_ssl_file)} /etc/httpd/conf.d/"
|
75
|
+
|
76
|
+
debug '#' * 50
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
desc 'Update httpd.conf to secure apache server'
|
81
|
+
task :secure_apache do
|
82
|
+
on roles(:web) do
|
83
|
+
sudo_cmd = "echo #{fetch(:password)} | sudo -S"
|
84
|
+
|
85
|
+
debug '#' * 50
|
86
|
+
debug 'Update httpd.conf to secure apache server'
|
87
|
+
|
88
|
+
set :httpd_conf_file, '/etc/httpd/conf/httpd.conf'
|
89
|
+
|
90
|
+
# Replace the original Apache configuration file
|
91
|
+
if remote_file_exists?('/etc/httpd/conf/httpd.conf_bck')
|
92
|
+
info 'Apache original configuration file already backed up at: /etc/httpd/conf/httpd.conf_bck'
|
93
|
+
else
|
94
|
+
execute "#{sudo_cmd} cp -f #{fetch(:httpd_conf_file)} /etc/httpd/conf/httpd.conf_bck"
|
95
|
+
info 'Apache original configuration file backed up at: /etc/httpd/conf/httpd.conf_bck'
|
96
|
+
end
|
97
|
+
|
98
|
+
# The ServerSignature directive allows the configuration of a trailing footer line under server-generated docs
|
99
|
+
# Options: On | Off | EMail
|
100
|
+
# More details: http://httpd.apache.org/docs/current/mod/core.html#serversignature
|
101
|
+
set :server_signature_off, get_num_occurrences_in_file(fetch(:httpd_conf_file), 'ServerSignature Off')
|
102
|
+
|
103
|
+
if fetch(:server_signature_off) == 1
|
104
|
+
info 'ServerSignature Off is already set'
|
105
|
+
|
106
|
+
else
|
107
|
+
set :num_replacements, 0
|
108
|
+
%w(On Off EMail).each do |option|
|
109
|
+
set :server_signature_option,
|
110
|
+
get_num_occurrences_in_file(fetch(:httpd_conf_file), "ServerSignature #{option}")
|
111
|
+
|
112
|
+
if fetch(:server_signature_option) == 1
|
113
|
+
info "sed -i 's/ServerSignature #{option}/ServerSignature Off/g' #{fetch(:httpd_conf_file)}"
|
114
|
+
execute "#{sudo_cmd} sed -i 's/ServerSignature #{option}/ServerSignature Off/g' #{fetch(:httpd_conf_file)}"
|
115
|
+
set :num_replacements, fetch(:num_replacements) + 1
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
error 'ServerSignature was not found' if fetch(:num_replacements).zero?
|
120
|
+
end
|
121
|
+
|
122
|
+
# Don't give away too much information about all the subcomponents we are running.
|
123
|
+
#
|
124
|
+
# Options: Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
|
125
|
+
# More details: http://httpd.apache.org/docs/current/mod/core.html#servertokens
|
126
|
+
set :server_token_prod, get_num_occurrences_in_file(fetch(:httpd_conf_file), 'ServerTokens Prod')
|
127
|
+
if fetch(:server_token_prod) == 1
|
128
|
+
info 'ServerTokens Prod is already set'
|
129
|
+
else
|
130
|
+
set :num_replacements, 0
|
131
|
+
%w(Major Minor Minimal Min ProductOnly Prod OS Full).each do |option|
|
132
|
+
set :server_token_option, get_num_occurrences_in_file(fetch(:httpd_conf_file), "ServerTokens #{option}")
|
133
|
+
|
134
|
+
next unless fetch(:server_token_option) == 1
|
135
|
+
|
136
|
+
# Then, only if fetch(:server_token_option) == 1
|
137
|
+
info "sed -i 's/ServerTokens #{option}/ServerTokens Prod/g' #{fetch(:httpd_conf_file)}"
|
138
|
+
execute "#{sudo_cmd} sed -i 's/ServerTokens #{option}/ServerTokens Prod/g' #{fetch(:httpd_conf_file)}"
|
139
|
+
set :num_replacements, fetch(:num_replacements) + 1
|
140
|
+
end
|
141
|
+
|
142
|
+
error 'ServerTokens was not found' if fetch(:num_replacements).zero?
|
143
|
+
end
|
144
|
+
|
145
|
+
# Do not allow browsing outside the document root
|
146
|
+
#
|
147
|
+
# <Directory />
|
148
|
+
# Order Deny,Allow
|
149
|
+
# Deny from all
|
150
|
+
# Options None
|
151
|
+
# AllowOverride None
|
152
|
+
# </Directory>
|
153
|
+
#
|
154
|
+
message_line1 = '# Default Directory configuration changed via Capistrano.'
|
155
|
+
|
156
|
+
set :server_dir_secure_configuration, get_num_occurrences_in_file(fetch(:httpd_conf_file), message_line1)
|
157
|
+
|
158
|
+
if fetch(:server_token_prod) == 1
|
159
|
+
info 'The correct directory configuration is already correctly set'
|
160
|
+
else
|
161
|
+
|
162
|
+
set :tmp_dir_original_config, '/tmp/tmp_dir_original_config.conf'
|
163
|
+
set :tmp_dir_original_commented_config, '/tmp/tmp_dir_original_commented_config.conf'
|
164
|
+
set :tmp_dir_new_config, '/tmp/tmp_dir_new_config.conf'
|
165
|
+
|
166
|
+
# Create a temporary copy of the Apache configuration file
|
167
|
+
set :tmp_httpd_file, '/tmp/httpd.conf'
|
168
|
+
execute :cp, '-f', "#{fetch(:httpd_conf_file)} #{fetch(:tmp_httpd_file)}"
|
169
|
+
|
170
|
+
set :grep_for_directory, "grep -Pzo '^([ ]*<Directory />[ ]*)(\\n.*)+(\\n[ ]*</Directory>[ ]*)(\\n){1}$' "\
|
171
|
+
"#{fetch(:tmp_httpd_file)}"
|
172
|
+
|
173
|
+
# How many lines have the original configuration
|
174
|
+
command = "#{fetch(:grep_for_directory)} | grep -n '</Directory>' | head -n 1 | cut -d ':' -f1"
|
175
|
+
set :def_directory_num_lines, get_command_output(command).to_i
|
176
|
+
debug "Original configuration has #{fetch(:def_directory_num_lines)} lines."
|
177
|
+
|
178
|
+
# Saves to a file the original configuration
|
179
|
+
command = "#{fetch(:grep_for_directory)} | "\
|
180
|
+
"head -n #{fetch(:def_directory_num_lines)} > #{fetch(:tmp_dir_original_config)}"
|
181
|
+
debug command
|
182
|
+
execute command
|
183
|
+
|
184
|
+
# Saves to a file the original configuration commented
|
185
|
+
execute :cp, '-f', "#{fetch(:tmp_dir_original_config)} #{fetch(:tmp_dir_original_commented_config)}"
|
186
|
+
execute "sed -e 's/^/#/' -i #{fetch(:tmp_dir_original_commented_config)}"
|
187
|
+
|
188
|
+
# Save to a file the new desired configuration
|
189
|
+
new_directory_configs = <<-EOF
|
190
|
+
|
191
|
+
# Do not allow browsing outside the document root
|
192
|
+
<Directory />
|
193
|
+
Order Deny,Allow
|
194
|
+
Deny from all
|
195
|
+
Options None
|
196
|
+
AllowOverride None
|
197
|
+
</Directory>
|
198
|
+
|
199
|
+
EOF
|
200
|
+
upload! StringIO.new(new_directory_configs), fetch(:tmp_dir_new_config).to_s
|
201
|
+
|
202
|
+
# Update the new configuration file to have the original configuration commented
|
203
|
+
debug "cat #{fetch(:tmp_dir_new_config)} >> #{fetch(:tmp_dir_original_commented_config)}"
|
204
|
+
execute "cat #{fetch(:tmp_dir_new_config)} >> #{fetch(:tmp_dir_original_commented_config)}"
|
205
|
+
execute "mv -f #{fetch(:tmp_dir_original_commented_config)} #{fetch(:tmp_dir_new_config)}"
|
206
|
+
|
207
|
+
# Generates the special SED parameter: 'N;' per line that should be replaced
|
208
|
+
special_sed_param = 'N;' * fetch(:def_directory_num_lines)
|
209
|
+
debug "Special sed parameter is: ''#{special_sed_param}''"
|
210
|
+
|
211
|
+
# Replace the old original directory configuration for a specific message (in the temporary file)
|
212
|
+
message_complete = "#{message_line1}\\n#\\n"
|
213
|
+
command_to_replace = "out=$(sed -e :a -e '$!N;s/\\n/.*/;ta' #{fetch(:tmp_dir_original_config)} | "\
|
214
|
+
"sed -e :a -e '$!N;s/\//./;ta'); sed -i '/<Directory .>.*/ {#{special_sed_param} "\
|
215
|
+
"s/'$out'/#{message_complete}/g}' #{fetch(:tmp_httpd_file)}"
|
216
|
+
debug command_to_replace
|
217
|
+
execute command_to_replace
|
218
|
+
|
219
|
+
# Search for the line where the message was inserted
|
220
|
+
command = "grep -n '#{message_line1}' #{fetch(:tmp_httpd_file)} | cut -d':' -f 1"
|
221
|
+
debug command
|
222
|
+
line_with_match = get_command_output(command).to_i
|
223
|
+
next_line = line_with_match + 1
|
224
|
+
debug "New configuration will be added to line #{next_line}"
|
225
|
+
|
226
|
+
# Inserts the new directory configuration (with the old configuration commented)
|
227
|
+
# in the line following the comment added before
|
228
|
+
command = "sed '#{next_line}r #{fetch(:tmp_dir_new_config)}' < #{fetch(:tmp_httpd_file)} "\
|
229
|
+
'> tmp_httpd_new_conf_merge.conf'
|
230
|
+
|
231
|
+
debug command
|
232
|
+
execute command
|
233
|
+
execute "mv -f tmp_httpd_new_conf_merge.conf #{fetch(:tmp_httpd_file)}"
|
234
|
+
|
235
|
+
# Replace the original Apache configuration file
|
236
|
+
execute "#{sudo_cmd} mv -f #{fetch(:tmp_httpd_file)} #{fetch(:httpd_conf_file)}"
|
237
|
+
|
238
|
+
# Remove all created temporary files
|
239
|
+
execute "rm -f #{fetch(:tmp_dir_original_config)} #{fetch(:tmp_dir_original_commented_config)} "\
|
240
|
+
"#{fetch(:tmp_dir_new_config)} #{fetch(:tmp_httpd_file)}"
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
@@ -159,7 +159,7 @@ namespace :load do
|
|
159
159
|
# RVM related information
|
160
160
|
set :rvm_type, -> { :system }
|
161
161
|
set :rvm_ruby_version, -> { ask('Please specify the Ruby version (i.e. 2.1.5)', '') }
|
162
|
-
set :rvm_roles,
|
162
|
+
set :rvm_roles, %i(app web)
|
163
163
|
# set :rvm_custom_path, '~/.myveryownrvm' # only needed if not detected
|
164
164
|
|
165
165
|
# Apache related information
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-exfel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luis Maia
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -54,15 +54,22 @@ files:
|
|
54
54
|
- Rakefile
|
55
55
|
- capistrano-exfel.gemspec
|
56
56
|
- lib/capistrano/exfel.rb
|
57
|
+
- lib/capistrano/exfel/co7.rb
|
57
58
|
- lib/capistrano/exfel/sl6.rb
|
58
59
|
- lib/capistrano/exfel/version.rb
|
59
60
|
- lib/capistrano/recipes/apache_http.conf
|
60
61
|
- lib/capistrano/recipes/apache_ssl.conf
|
62
|
+
- lib/capistrano/recipes/co7/00-passenger.conf
|
63
|
+
- lib/capistrano/recipes/co7/apache_http.conf
|
64
|
+
- lib/capistrano/recipes/co7/apache_ssl.conf
|
65
|
+
- lib/capistrano/recipes/co7/httpd.conf
|
61
66
|
- lib/capistrano/recipes/config/database_mysql.yml
|
62
67
|
- lib/capistrano/recipes/config/database_postgresql.yml
|
63
68
|
- lib/capistrano/recipes/config/database_sqlite.yml
|
64
69
|
- lib/capistrano/recipes/config/secrets_example.yml
|
65
70
|
- lib/capistrano/tasks/apache.rake
|
71
|
+
- lib/capistrano/tasks/apache_co7.rake
|
72
|
+
- lib/capistrano/tasks/apache_sl6.rake
|
66
73
|
- lib/capistrano/tasks/app_home.rake
|
67
74
|
- lib/capistrano/tasks/application.rake
|
68
75
|
- lib/capistrano/tasks/database.rake
|