capistrano-exfel 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +0 -6
  3. data/Gemfile +3 -1
  4. data/README.md +2 -2
  5. data/Rakefile +2 -0
  6. data/capistrano-exfel.gemspec +5 -3
  7. data/capistrano.graph +86 -56
  8. data/capistrano.png +0 -0
  9. data/lib/capistrano/exfel.rb +2 -0
  10. data/lib/capistrano/exfel/co7.rb +3 -3
  11. data/lib/capistrano/exfel/version.rb +3 -1
  12. data/lib/capistrano/recipes/{co7 → apache}/00-passenger.conf +0 -0
  13. data/lib/capistrano/recipes/{ub14/apache.conf → apache/app_ssl.conf} +11 -4
  14. data/lib/capistrano/recipes/{co7 → apache}/httpd.conf +6 -0
  15. data/lib/capistrano/recipes/apache/ssl.conf +49 -0
  16. data/lib/capistrano/tasks/apache.rake +268 -0
  17. data/lib/capistrano/tasks/app_home.rake +2 -0
  18. data/lib/capistrano/tasks/application.rake +2 -0
  19. data/lib/capistrano/tasks/assets.rake +2 -0
  20. data/lib/capistrano/tasks/database.rake +2 -0
  21. data/lib/capistrano/tasks/secrets.rake +2 -0
  22. data/lib/capistrano/tasks/util.rake +2 -0
  23. metadata +14 -26
  24. data/lib/capistrano/exfel/sl6.rb +0 -21
  25. data/lib/capistrano/exfel/ub14.rb +0 -20
  26. data/lib/capistrano/recipes/apache_http.conf +0 -46
  27. data/lib/capistrano/recipes/apache_ssl.conf +0 -252
  28. data/lib/capistrano/recipes/co7/apache_http.conf +0 -7
  29. data/lib/capistrano/recipes/co7/apache_ssl.conf +0 -66
  30. data/lib/capistrano/recipes/ub14/passenger.conf +0 -6
  31. data/lib/capistrano/tasks/apache_co7.rake +0 -133
  32. data/lib/capistrano/tasks/apache_common.rake +0 -75
  33. data/lib/capistrano/tasks/apache_rpm.rake +0 -50
  34. data/lib/capistrano/tasks/apache_sl6.rake +0 -241
  35. data/lib/capistrano/tasks/apache_ub14.rake +0 -116
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a12ee64c6c95bd3aa5e82e0ccef17dc88b1e434ee2148a346bb6d61357467fd5
4
- data.tar.gz: e9a15450e04f59f14fde3e420096496fbeaf9a99b4db9eef348f94b15cf70735
3
+ metadata.gz: d086fd4c9e4f16c7f68d37876de7ef24704e010fc19a41faec2447ecc86072b2
4
+ data.tar.gz: 01e8177b84dc63483b996d26e4ebd8cd7589ff7d0c6aaf1b6ff533f60d76ed56
5
5
  SHA512:
6
- metadata.gz: e436f864ca19dc36c026c58b4ef611c94522db49e2ee4a004033822cbd3efee947e7267bf17a93dc5f9e144f7b270c11c0be0a28d5a3bd136770ffcbeca5e13e
7
- data.tar.gz: fb090a9da42207a3df66ac37f7c88dc520d79ea0d8868674aba4056a8a29464aba68af57a61923d7ba22e60822e4891abf9dd880432ca471ddf6030f9188d5b7
6
+ metadata.gz: 83c826336eef52236f1d1f264a1a355916652023b583858e4fb949e6a1b7dd2b14203db5d8b37286aff507ad711df99f31eac896bee8403ed29962a1d3414b1b
7
+ data.tar.gz: 517745ce8bd5d2646f460582c48f4145749df2334ed17f177e99760ff92c00278546e835a3417e021748b36a00d5ef883784031c25d3c956beaacb64b3a9d14a
@@ -24,12 +24,6 @@ Style/Lambda:
24
24
  Metrics/BlockLength:
25
25
  Max: 160 # Default 25
26
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'
32
-
33
27
  # Use meaningful heredoc delimiters.
34
28
  Naming/HeredocDelimiterNaming:
35
29
  Enabled: false
data/Gemfile CHANGED
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in capistrano-exfel.gemspec
4
6
  gemspec
5
7
 
6
8
  # Use Rubocop to validate ruby code syntax
7
- gem 'rubocop', '0.60.0', require: false, group: :development
9
+ gem 'rubocop', '0.79.0', require: false, group: :development
data/README.md CHANGED
@@ -9,8 +9,8 @@ Installation of Phusion Passenger and RVM are also required to this gem.
9
9
  Add these lines to your application's Gemfile:
10
10
 
11
11
  # Use Capistrano for deployment
12
- gem 'capistrano', '3.11.0', require: false
13
- gem 'capistrano-exfel', '0.2.2', require: false
12
+ gem 'capistrano', '3.11.2', require: false
13
+ gem 'capistrano-exfel', '0.3.0', require: false
14
14
  gem 'capistrano-rails', '1.4.0', require: false
15
15
  gem 'capistrano-rvm', '0.1.2', require: false
16
16
 
data/Rakefile CHANGED
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require 'capistrano/exfel/version'
@@ -9,7 +11,7 @@ Gem::Specification.new do |spec|
9
11
  spec.email = %w[luisgoncalo.maia@gmail.com maurizio.manetti@xfel.eu]
10
12
  spec.summary = 'Deploy Ruby on Rails 4 and 5 Applications in EXFEL Virtual Machines'
11
13
  spec.description = 'Deployment of Ruby on Rails Applications in EXFEL Virtual Machines ' \
12
- '(Scientific Linux / CentOS 7 / Ubuntu 14 + Apache + RVM + Phusion Passenger) ' \
14
+ '(CentOS 7 + Apache + RVM + Phusion Passenger) ' \
13
15
  'using Capistrano3 and LDAP'
14
16
  spec.homepage = 'https://github.com/luismaia/capistrano-exfel'
15
17
  spec.license = 'MIT'
@@ -19,6 +21,6 @@ Gem::Specification.new do |spec|
19
21
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
22
  spec.require_paths = ['lib']
21
23
 
22
- spec.add_development_dependency 'bundler', '~> 1.17'
23
- spec.add_development_dependency 'rake', '~> 12.0'
24
+ spec.add_development_dependency 'bundler', '~> 2.0'
25
+ spec.add_development_dependency 'rake', '~> 13.0'
24
26
  end
@@ -1,66 +1,96 @@
1
1
  digraph {
2
-
3
- rankdir=LR;
2
+ rankdir=LR;
3
+ ordering=out ;
4
+ edge [arrowhead=open;fontname=Arial;labeldistance=0];
4
5
  node [shape=box;fontname=Arial];
6
+ // splines=ortho;
5
7
 
6
- "application:deploy_first_time" -> "app_home:deploy_first_time_start_msg";
7
- "application:deploy_first_time" -> "app_home:create_all";
8
- "application:deploy_first_time" -> "database:configure_mysql";
9
- "application:deploy_first_time" -> "secrets:configure";
10
- "application:deploy_first_time" -> "apache:configure_and_start";
11
- "application:deploy_first_time" -> "apache:check_write_permissions";
12
- "application:deploy_first_time" -> deploy;
13
- "application:deploy_first_time" -> "app_home:correct_shared_permissions";
14
- "application:deploy_first_time" -> "application:restart";
15
-
16
- "application:deploy" -> "app_home:deploy_start_msg";
17
- "application:deploy" -> "secrets:update_app_secret";
18
- "application:deploy" -> deploy;
19
- "application:deploy" -> "app_home:correct_shared_permissions";
20
- "application:deploy" -> "application:restart";
21
-
22
- "application:restart" -> "apache:restart";
23
- "application:restart" -> "app_home:reload_server_cache";
24
- "application:restart" -> "app_home:deploy_success_msg";
25
-
26
- "application:reconfigure_apache" -> "apache_co7:configure";
27
- "application:reconfigure_apache" -> "application:restart";
28
-
29
- "app_home:create_all" -> "app_home:create_deploy_folder";
30
- "app_home:create_all" -> "app_home:create_shared_folder";
31
- "app_home:create_all" -> "app_home:create_revisions_file";
8
+ subgraph cluster_application {
9
+ labeljust="l";
10
+ label="application.rake";
11
+ fontname="Arial";
12
+ "application:deploy_first_time" -> "deploy"[label="7",color=orange];
13
+ "application:deploy_first_time" -> "application:restart"[label="9",color=brown];
14
+ "application:deploy" -> "deploy"[label="3",color=purple];
15
+ "application:deploy" -> "application:restart"[label="5",color=yellow];
16
+ "application:reconfigure_apache" -> "application:restart"[label="2",color=blue];
17
+ "application:show_variables";
18
+ "load:defaults";
19
+ }
32
20
 
33
- "apache:configure_and_start" -> "apache_co7:configure";
34
- "apache:configure_and_start" -> "apache:chkconfig_on";
35
- "apache:configure_and_start" -> "apache_co7:secure_apache";
36
- "apache:configure_and_start" -> "apache:create_symbolic_link";
21
+ subgraph cluster_apache {
22
+ label="apache.rake";
23
+ labeljust="l";
24
+ fontname="Arial";
25
+ "apache:configure_and_start" -> "apache:chkconfig_on"[label="2",color=blue];
26
+ "application:deploy_first_time" -> "apache:configure_and_start"[label="5",color=yellow];
27
+ "application:restart" -> "apache:restart"[label="1",color=black];
28
+ "application:reconfigure_apache" -> "apache:configure"[label="1",color=black];
29
+ "apache:configure_and_start" -> "apache:configure"[label="1",color=black];
30
+ "apache:configure" -> "apache:create_apache_sites_folder"[label="2",color=blue];
31
+ "apache:configure" -> "apache:configure_apache_modules"[label="3",color=purple];
32
+ "apache:configure" -> "apache:configure_app_ssl_conf_file"[label="4",color=red];
33
+ "apache:configure_and_start" -> "apache:secure_apache"[label="3",color=purple];
34
+ "apache:configure" -> "apache:create_apache_shared_folder"[label="1",color=black];
35
+ "apache:configure_and_start" -> "apache:create_symbolic_link"[label="4",color=red];
36
+ "application:deploy_first_time" -> "apache:check_write_permissions"[label="6",color=green];
37
+ "apache:check_write_permissions" -> "apache:check_write_permissions_on_deploy"[label="1",color=black];
38
+ "apache:check_write_permissions" -> "apache:check_write_permissions_on_document_root"[label="2",color=blue];
39
+ }
37
40
 
38
- "apache:check_write_permissions" -> "apache:check_write_permissions_on_deploy";
39
- "apache:check_write_permissions" -> "apache:check_write_permissions_on_document_root";
41
+ subgraph cluster_secrets {
42
+ label="secrets.rake";
43
+ labeljust="l";
44
+ fontname="Arial";
45
+ "application:deploy" -> "secrets:update_app_secret"[label="2",color=blue];
46
+ "secrets:update_app_secret" -> "secrets:set_permissions_pre_update"[label="1",color=black];
47
+ "secrets:update_app_secret" -> "secrets:replace_token"[label="2",color=blue];
48
+ "secrets:update_app_secret" -> "secrets:set_permissions_post_update"[label="3",color=purple];
49
+ "application:deploy_first_time" -> "secrets:configure"[label="4",color=red];
50
+ "secrets:configure" -> "secrets:set_permissions_pre_update"[label="1",color=black];
51
+ "secrets:configure" -> "secrets:set_secrets_file"[label="2",color=blue];
52
+ "secrets:configure" -> "secrets:replace_token"[label="3",color=purple];
53
+ "secrets:configure" -> "secrets:set_permissions_post_update"[label="4",color=red];
54
+ }
40
55
 
41
- "apache_co7:configure" -> "apache:create_apache_shared_folder";
42
- "apache_co7:configure" -> "apache_co7:configure_apache_modules";
43
- "apache_co7:configure" -> "apache_co7:configure_app_conf_file";
44
- "apache_co7:configure" -> "apache_co7:configure_app_ssl_conf_file";
56
+ subgraph cluster_app_home {
57
+ label="app_home.rake";
58
+ labeljust="l";
59
+ fontname="Arial";
60
+ "application:deploy" -> "app_home:deploy_start_msg"[label="1",color=black];
61
+ "application:deploy_first_time" -> "app_home:deploy_first_time_start_msg"[label="1",color=black];
62
+ "application:deploy_first_time" -> "app_home:create_all"[label="2",color=blue];
63
+ "application:deploy_first_time" -> "app_home:correct_shared_permissions"[label="8",color=pink];
64
+ "app_home:create_all" -> "app_home:create_deploy_folder"[label="1",color=black];
65
+ "app_home:create_all" -> "app_home:create_shared_folder"[label="2",color=blue];
66
+ "app_home:create_all" -> "app_home:create_revisions_file"[label="3",color=purple];
67
+ "application:deploy" -> "app_home:correct_shared_permissions"[label="4",color=red];
68
+ "application:restart" -> "app_home:reload_server_cache"[label="2",color=blue];
69
+ "application:restart" -> "app_home:deploy_success_msg"[label="3",color=purple];
70
+ "app_home:correct_public_folder_permissions";
71
+ "app_home:clear_tmp_files";
72
+ "app_home:restart";
73
+ }
45
74
 
46
- deploy -> "deploy:compile_assets";
47
- "deploy:compile_assets" -> "deploy:assets_precompile";
48
- "deploy:compile_assets" -> "deploy:assets_backup_manifest";
75
+ subgraph cluster_database {
76
+ label="database.rake";
77
+ labeljust="l";
78
+ fontname="Arial";
79
+ "application:deploy_first_time" -> "database:configure_mysql"[label="3",color=purple];
80
+ "database:configure_mysql" -> "database:configure_database_file";
81
+ "database:configure_database_file" -> "database:set_permissions_pre_update"[label="1",color=black];
82
+ "database:configure_database_file" -> "database:set_database_file"[label="2",color=blue];
83
+ "database:configure_database_file" -> "database:set_permissions_post_update"[label="3",color=purple];
84
+ "database:seed";
85
+ }
49
86
 
50
- "database:configure_mysql" -> "database:configure_database_file";
51
- "database:configure_database_file" -> "database:set_permissions_pre_update";
52
- "database:configure_database_file" -> "database:set_database_file";
53
- "database:configure_database_file" -> "database:set_permissions_post_update";
54
-
55
- "secrets:configure" -> "secrets:set_permissions_pre_update";
56
- "secrets:configure" -> "secrets:set_secrets_file";
57
- "secrets:configure" -> "secrets:replace_token";
58
- "secrets:configure" -> "secrets:set_permissions_post_update";
59
-
60
- "secrets:update_app_secret" -> "secrets:set_permissions_pre_update";
61
- "secrets:update_app_secret" -> "secrets:replace_token";
62
- "secrets:update_app_secret" -> "secrets:set_permissions_post_update"
87
+ subgraph cluster_assets {
88
+ label="assets.rake";
89
+ labeljust="l";
90
+ fontname="Arial";
91
+ deploy -> "deploy:compile_assets";
92
+ "deploy:compile_assets" -> "deploy:assets_precompile"[label="1",color=black];
93
+ "deploy:compile_assets" -> "deploy:assets_backup_manifest"[label="2",color=blue];
94
+ }
63
95
 
64
96
  }
65
-
66
-
Binary file
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'capistrano/exfel/version'
2
4
 
3
5
  # module Capistrano
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Load DSL and Setup Up Stages
2
4
  require 'capistrano/setup'
3
5
 
@@ -10,9 +12,7 @@ require 'capistrano/rvm'
10
12
  # Includes tasks for rails
11
13
  require 'capistrano/rails'
12
14
 
13
- load File.expand_path('../tasks/apache_common.rake', __dir__)
14
- load File.expand_path('../tasks/apache_rpm.rake', __dir__)
15
- load File.expand_path('../tasks/apache_co7.rake', __dir__)
15
+ load File.expand_path('../tasks/apache.rake', __dir__)
16
16
  load File.expand_path('../tasks/app_home.rake', __dir__)
17
17
  load File.expand_path('../tasks/assets.rake', __dir__)
18
18
  load File.expand_path('../tasks/application.rake', __dir__)
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Capistrano
2
4
  # Capistrano::Exfel version information
3
5
  module Exfel
4
- VERSION = '0.2.2'.freeze
6
+ VERSION = '0.3.0'
5
7
  end
6
8
  end
@@ -1,15 +1,22 @@
1
+ # <<APPLICATION_NAME>> - Ruby on Rails Application
2
+ #
3
+ # Application secured by SSL
4
+
1
5
  Alias /<<APPLICATION_NAME>> /var/www/html/<<APPLICATION_NAME>>
2
6
 
3
7
  #
4
- # Application
8
+ # Application configuration
5
9
  #
6
-
7
- <Directory "/var/www/html/<<APPLICATION_NAME>>">
10
+ <Directory "/var/www/html/<<APPLICATION_NAME>>/">
8
11
  RackBaseURI /<<APPLICATION_NAME>>
9
12
  RailsEnv <<ENVIRONMENT>>
10
13
 
11
14
  PassengerUser nobody
12
- PassengerGroup nogroup
15
+ # CentOS: nobody / Ubuntu/Debian: nogroup
16
+ PassengerGroup nobody
17
+
18
+ # which ruby version to use
19
+ PassengerRuby <<RUBY_PATH>>
13
20
 
14
21
  # This relaxes Apache security settings.
15
22
  Options -Indexes +MultiViews +FollowSymLinks
@@ -27,6 +27,12 @@ DocumentRoot "/var/www/html"
27
27
  Options Indexes FollowSymLinks
28
28
  AllowOverride None
29
29
  Require all granted
30
+
31
+ # Redirect all HTTP to https://%{SERVER_NAME}/, keeping the requested path
32
+ RewriteEngine On
33
+ RewriteCond %{HTTPS} !=on
34
+ RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
35
+
30
36
  </Directory>
31
37
 
32
38
  <IfModule dir_module>
@@ -0,0 +1,49 @@
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
+ ##
14
+ ## SSL Virtual Host Context
15
+ ##
16
+
17
+ <VirtualHost _default_:443>
18
+
19
+ ErrorLog logs/ssl_error_log
20
+ LogLevel warn
21
+
22
+ SSLEngine on
23
+
24
+ SSLProtocol all -SSLv2 -SSLv3
25
+
26
+ SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
27
+
28
+ SSLCertificateFile /etc/pki/tls/certs/localhost.crt
29
+
30
+ SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
31
+
32
+ <Files ~ "\.(cgi|shtml|phtml|php3?)$">
33
+ SSLOptions +StdEnvVars
34
+ </Files>
35
+ <Directory "/var/www/cgi-bin">
36
+ SSLOptions +StdEnvVars
37
+ </Directory>
38
+
39
+ BrowserMatch "MSIE [2-5]" \
40
+ nokeepalive ssl-unclean-shutdown \
41
+ downgrade-1.0 force-response-1.0
42
+
43
+ RemoteIPHeader X-Forwarded-For
44
+ LogFormat "%t - %a - %s - %{Host}i - \"%r\" \"%{Referer}i\" \"%{User-agent}i\" %D" xfel
45
+ CustomLog logs/ssl_access_log xfel
46
+
47
+ IncludeOptional sites.d/*.conf
48
+
49
+ </VirtualHost>
@@ -0,0 +1,268 @@
1
+ # frozen_string_literal: true
2
+
3
+ # apache tasks
4
+
5
+ namespace :apache do
6
+ desc 'Configure Apache (httpd) and restart it'
7
+ task :configure_and_start do
8
+ invoke 'apache:configure'
9
+ invoke 'apache:chkconfig_on' # This task should go to Puppet or installation script
10
+ invoke 'apache:replace_apache_defaults' # This task should go to Puppet or installation script
11
+ invoke 'apache:create_symbolic_link'
12
+ end
13
+
14
+ # This task should be moved into Puppet or the installation script
15
+ desc 'Configure Apache to start at bootup'
16
+ task :chkconfig_on do
17
+ on roles(:web) do
18
+ info 'In task apache:chkconfig_on'
19
+
20
+ sudo_cmd = "echo #{fetch(:password)} | sudo -S"
21
+
22
+ debug '#' * 50
23
+
24
+ debug 'chkconfig httpd on'
25
+ execute "#{sudo_cmd} chkconfig httpd on"
26
+
27
+ info 'Configured Apache to start at bootup'
28
+ debug '#' * 50
29
+ end
30
+ end
31
+
32
+ desc 'Restart Apache (httpd) service'
33
+ task :restart do
34
+ on roles(:web) do
35
+ sudo_cmd = "echo #{fetch(:password)} | sudo -S"
36
+
37
+ debug '#' * 50
38
+
39
+ debug 'service httpd stop'
40
+ execute "#{sudo_cmd} service httpd stop"
41
+
42
+ debug 'pkill -9 httpd || true'
43
+ execute "#{sudo_cmd} pkill -9 httpd || true"
44
+
45
+ debug 'service httpd start'
46
+ execute "#{sudo_cmd} service httpd start"
47
+
48
+ info 'Restarted Apache (httpd) service'
49
+ debug '#' * 50
50
+ end
51
+ end
52
+
53
+ desc 'Configure Apache configuration files'
54
+ task :configure do
55
+ invoke 'apache:create_apache_shared_folder'
56
+ invoke 'apache:create_apache_sites_folder'
57
+ invoke 'apache:configure_apache_modules'
58
+ invoke 'apache:configure_app_ssl_conf_file'
59
+ end
60
+
61
+ # This task should be moved into Puppet or the installation script
62
+ desc 'Create Apache multi-site configuration folder'
63
+ task :create_apache_sites_folder do
64
+ on roles(:app) do
65
+ sudo_cmd = "echo #{fetch(:password)} | sudo -S"
66
+
67
+ debug '#' * 50
68
+ debug 'Create Apache multi-site configuration folder'
69
+
70
+ debug 'mkdir -p /etc/httpd/sites.d'
71
+ execute "#{sudo_cmd} mkdir -p /etc/httpd/sites.d"
72
+
73
+ debug '#' * 50
74
+ end
75
+ end
76
+
77
+ # This task should be moved into Puppet or the installation script
78
+ desc 'Configure Apache modules'
79
+ task :configure_apache_modules do
80
+ on roles(:app) do
81
+ sudo_cmd = "echo #{fetch(:password)} | sudo -S"
82
+
83
+ debug '#' * 50
84
+ debug 'Configure (HTTP) Apache Passenger module'
85
+
86
+ set :shared_passenger_file, '/etc/httpd/conf.modules.d/00-passenger.conf'
87
+ passenger_file = File.expand_path('../recipes/apache/00-passenger.conf', __dir__)
88
+
89
+ # Create a temporary copy of the passenger module file
90
+ set :tmp_passenger_file, '/tmp/00-passenger.conf'
91
+
92
+ upload! StringIO.new(File.read(passenger_file)), fetch(:tmp_passenger_file).to_s
93
+
94
+ passenger_root = get_command_output("/usr/local/rvm/bin/rvm #{fetch(:rvm_ruby_version)} do passenger-config --root")
95
+ ruby_path = "/#{passenger_root.split('/')[1..5].join('/')}/wrappers/ruby"
96
+
97
+ debug "sed -i 's|<<PASSENGER_ROOT>>|#{passenger_root}|g' #{fetch(:tmp_passenger_file)}"
98
+ execute "sed -i 's|<<PASSENGER_ROOT>>|#{passenger_root}|g' #{fetch(:tmp_passenger_file)}"
99
+ execute "sed -i 's|<<RUBY_PATH>>|#{ruby_path}|g' #{fetch(:tmp_passenger_file)}"
100
+
101
+ # Replace the passenger module file
102
+ execute "#{sudo_cmd} mv -f #{fetch(:tmp_passenger_file)} #{fetch(:shared_passenger_file)}"
103
+ execute "#{sudo_cmd} chown root.root #{fetch(:shared_passenger_file)}"
104
+
105
+ debug '#' * 50
106
+ debug 'Deactivate unnecessary Apache modules'
107
+ %w[00-dav.conf 00-lua.conf 00-proxy.conf 01-cgi.conf].each do |file|
108
+ if remote_file_exists?("/etc/httpd/conf.modules.d/#{file}")
109
+ # only perform backup of Apache modules files unless already done
110
+ unless remote_file_exists?("/etc/httpd/conf.modules.d/#{file}_bck")
111
+ execute "#{sudo_cmd} cp /etc/httpd/conf.modules.d/#{file} /etc/httpd/conf.modules.d/#{file}_bck"
112
+ end
113
+ execute "#{sudo_cmd} truncate -s 0 /etc/httpd/conf.modules.d/#{file}"
114
+ end
115
+ end
116
+ debug '#' * 50
117
+ end
118
+ end
119
+
120
+ desc 'Configure (HTTPS) Apache Application configuration files'
121
+ task :configure_app_ssl_conf_file do
122
+ on roles(:app), in: :sequence do
123
+ sudo_cmd = "echo #{fetch(:password)} | sudo -S"
124
+
125
+ debug '#' * 50
126
+ debug 'Configure (HTTPS) Apache Application configuration files'
127
+
128
+ set :shared_apache_conf_ssl_file, "#{fetch(:shared_apache_path)}/app_#{fetch(:app_name_uri)}_ssl.conf"
129
+ http_ssl_file = File.expand_path('../recipes/apache/app_ssl.conf', __dir__)
130
+ upload! StringIO.new(File.read(http_ssl_file)), fetch(:shared_apache_conf_ssl_file).to_s
131
+
132
+ debug "chmod g+w #{fetch(:shared_apache_conf_ssl_file)}"
133
+ execute "chmod g+w #{fetch(:shared_apache_conf_ssl_file)}"
134
+
135
+ passenger_root = get_command_output("/usr/local/rvm/bin/rvm #{fetch(:rvm_ruby_version)} do passenger-config --root")
136
+ ruby_path = "/#{passenger_root.split('/')[1..5].join('/')}/wrappers/ruby"
137
+
138
+ execute "sed -i 's/<<APPLICATION_NAME>>/#{fetch(:app_name_uri)}/g' #{fetch(:shared_apache_conf_ssl_file)}"
139
+ execute "sed -i 's/<<ENVIRONMENT>>/#{fetch(:environment)}/g' #{fetch(:shared_apache_conf_ssl_file)}"
140
+ execute "sed -i 's|<<RUBY_PATH>>|#{ruby_path}|g' #{fetch(:shared_apache_conf_ssl_file)}"
141
+
142
+ execute "#{sudo_cmd} ln -sfn #{fetch(:shared_apache_conf_ssl_file)} /etc/httpd/sites.d/"
143
+
144
+ debug '#' * 50
145
+ end
146
+ end
147
+
148
+ # This task should be moved into Puppet or the installation script
149
+ desc 'Replace CentOS 7 default httpd.conf and ssl.conf file with our version'
150
+ task :replace_apache_defaults do
151
+ on roles(:web) do
152
+ sudo_cmd = "echo #{fetch(:password)} | sudo -S"
153
+
154
+ debug '#' * 50
155
+ debug 'Update httpd.conf and ssl.conf'
156
+
157
+ set :httpd_conf_file, '/etc/httpd/conf/httpd.conf'
158
+
159
+ # Replace the original Apache configuration file
160
+ if remote_file_exists?('/etc/httpd/conf/httpd.conf_bck')
161
+ info 'Apache original configuration file already backed up at: /etc/httpd/conf/httpd.conf_bck'
162
+ else
163
+ execute "#{sudo_cmd} cp -f #{fetch(:httpd_conf_file)} /etc/httpd/conf/httpd.conf_bck"
164
+ info 'Apache original configuration file backed up at: /etc/httpd/conf/httpd.conf_bck'
165
+ end
166
+
167
+ # Create a temporary copy of the Apache configuration file
168
+ set :tmp_httpd_file, '/tmp/httpd.conf'
169
+ httpd_safe_file = File.expand_path('../recipes/apache/httpd.conf', __dir__)
170
+
171
+ upload! StringIO.new(File.read(httpd_safe_file)), fetch(:tmp_httpd_file).to_s
172
+
173
+ # Replace the original Apache configuration file
174
+ execute "#{sudo_cmd} mv -f #{fetch(:tmp_httpd_file)} #{fetch(:httpd_conf_file)}"
175
+
176
+ set :ssl_conf_file, '/etc/httpd/conf.d/ssl.conf'
177
+
178
+ # Replace the original Apache ssl configuration file
179
+ if remote_file_exists?('/etc/httpd/conf.d/ssl.conf_bck')
180
+ info 'Apache original ssl configuration file already backed up at: /etc/httpd/conf.d/ssl.conf_bck'
181
+ else
182
+ execute "#{sudo_cmd} cp -f #{fetch(:ssl_conf_file)} /etc/httpd/conf.d/ssl.conf_bck"
183
+ info 'Apache original ssl configuration file backed up at: /etc/httpd/conf.d/ssl.conf_bck'
184
+ end
185
+
186
+ # Create a temporary copy of the Apache ssl configuration file
187
+ set :tmp_ssl_file, '/tmp/ssl.conf'
188
+ ssl_safe_file = File.expand_path('../recipes/apache/ssl.conf', __dir__)
189
+
190
+ upload! StringIO.new(File.read(ssl_safe_file)), fetch(:tmp_ssl_file).to_s
191
+
192
+ # Replace the original Apache ssl configuration file
193
+ execute "#{sudo_cmd} mv -f #{fetch(:tmp_ssl_file)} #{fetch(:ssl_conf_file)}"
194
+ end
195
+ end
196
+
197
+ desc 'Check that the user has write permissions in the Deploy and in Apache DocumentRoot folders'
198
+ task :check_write_permissions do
199
+ invoke 'apache:check_write_permissions_on_deploy'
200
+ invoke 'apache:check_write_permissions_on_document_root'
201
+ end
202
+
203
+ desc 'Check that we have the right permission to the folder the app should be deployed to'
204
+ task :check_write_permissions_on_deploy do
205
+ on roles(:app), in: :sequence do |host|
206
+ debug '#' * 50
207
+ debug "Checking folder '#{fetch(:deploy_to)}' (where the application has to be deployed) "\
208
+ "for the right permissions on Host '#{host}'"
209
+
210
+ if test("[ -w #{fetch(:deploy_to)} ]")
211
+ info "#{fetch(:deploy_to)} is writable on #{host}"
212
+ else
213
+ error "#{fetch(:deploy_to)} is not writable on #{host}"
214
+ end
215
+
216
+ debug '#' * 50
217
+ end
218
+ end
219
+
220
+ desc 'Check that we have the right permission to the Apache DocumentRoot folder'
221
+ task :check_write_permissions_on_document_root do
222
+ on roles(:web) do |host|
223
+ debug '#' * 50
224
+ debug "Checking Apache DocumentRoot folder (#{fetch(:apache_document_root)}) permissions on Host '#{host}'"
225
+
226
+ if test("[ -w #{fetch(:apache_document_root)} ]")
227
+ info "#{fetch(:apache_document_root)} is writable on #{host}"
228
+ else
229
+ info "#{fetch(:apache_document_root)} is not writable on #{host}"
230
+ end
231
+
232
+ debug '#' * 50
233
+ end
234
+ end
235
+
236
+ desc 'Create Apache configuration files shared folder'
237
+ task :create_apache_shared_folder do
238
+ on roles(:app) do
239
+ sudo_cmd = "echo #{fetch(:password)} | sudo -S"
240
+
241
+ debug '#' * 50
242
+ debug 'Create Apache configuration files shared folder'
243
+
244
+ debug "mkdir -p #{fetch(:shared_apache_path)}"
245
+ execute "#{sudo_cmd} mkdir -p #{fetch(:shared_apache_path)}"
246
+
247
+ debug "chmod g+ws #{fetch(:shared_apache_path)}"
248
+ execute "#{sudo_cmd} chmod g+ws #{fetch(:shared_apache_path)}"
249
+
250
+ debug '#' * 50
251
+ end
252
+ end
253
+
254
+ desc 'Create symbolic link to application public folder in Apache DocumentRoot folder'
255
+ task :create_symbolic_link do
256
+ on roles(:web), in: :sequence do
257
+ sudo_cmd = "echo #{fetch(:password)} | sudo -S"
258
+
259
+ info '#' * 50
260
+ info 'Creating application symbolic link'
261
+
262
+ debug "ln -sfn #{fetch(:deploy_to)}/current/public #{fetch(:apache_deploy_symbolic_link)}"
263
+ execute "#{sudo_cmd} ln -sfn #{fetch(:deploy_to)}/current/public #{fetch(:apache_deploy_symbolic_link)}"
264
+
265
+ info '#' * 50
266
+ end
267
+ end
268
+ end