/apache.rb

https://github.com/ivanoats/babushka-deps · Ruby · 194 lines · 166 code · 22 blank · 6 comment · 3 complexity · 0f88f86b5372d8a0da678f4539fd95e4 MD5 · raw file

  1. dep 'lamp stack removed', :template => 'apt_packages_removed', :for => :apt do
  2. removes %r{apache|mysql|php}
  3. end
  4. dep 'apache2 remove defaults' do
  5. met? { !File.exist?("/etc/apache2/sites-enabled/000-default") }
  6. meet { sudo("rm /etc/apache2/sites-enabled/000-default") }
  7. after { sudo "/etc/init.d/apache2 reload" }
  8. end
  9. # taken from http://github.com/tricycle/babushka-deps and adapted for my needs (same for apache2/*)
  10. # hard works been done by them ;)
  11. meta :apache2 do
  12. template {
  13. def apachectl_command(command)
  14. "/usr/sbin/apache2ctl #{command}"
  15. end
  16. def apachectl(command)
  17. sudo apachectl_command(command)
  18. end
  19. def config_path
  20. '/etc/apache2'
  21. end
  22. def apache2_running?
  23. shell "netstat -an | grep -E '^tcp.*[.:]80 +.*LISTEN'"
  24. end
  25. def restart_gracefully
  26. if apache2_running?
  27. log_shell "Restarting apache2", apachectl_command("graceful"), :sudo => true
  28. end
  29. end
  30. def vhost_config_path(domain)
  31. config_path / "sites-available/#{domain}"
  32. end
  33. def site_available?(domain)
  34. shell "[ -e #{vhost_config_path(domain)} ]"
  35. end
  36. def site_enabled?(domain)
  37. shell "[ -e #{config_path}/sites-enabled/*#{domain} ]"
  38. end
  39. def site_disabled?(domain)
  40. not site_enabled?(domain)
  41. end
  42. def enable_site(domain)
  43. sudo "a2ensite #{domain}"
  44. end
  45. def disable_site(domain)
  46. sudo "a2dissite #{domain}"
  47. end
  48. def mod_enabled?(mod)
  49. shell "[ -e #{config_path}/mods-enabled/#{mod}.load ]"
  50. end
  51. def mod_disabled?(mod)
  52. not mod_enabled?(mod)
  53. end
  54. def enable_mod(mod)
  55. sudo "a2enmod #{mod}"
  56. end
  57. def disable_mod(mod)
  58. sudo "a2dismod #{mod}"
  59. end
  60. }
  61. end
  62. dep 'apache2', :template => 'managed' do
  63. installs %w[apache2 apache2-mpm-prefork]
  64. end
  65. dep 'apache2 dev packages', :template => 'managed' do
  66. installs %w[apache2-prefork-dev libapr1-dev libaprutil1-dev]
  67. provides %w[apxs2 apr-config]
  68. end
  69. dep 'configured.apache2' do
  70. requires 'apache2'
  71. met? {
  72. [
  73. config_path / "mods-available/status.conf",
  74. config_path / "conf.d/types.conf",
  75. config_path / "conf.d/virtualhost.conf",
  76. "/etc/logrotate.d/apache2"
  77. ].all? { |file|
  78. babushka_config? file
  79. }
  80. }
  81. meet {
  82. # stub out the default status location
  83. render_erb 'apache2/status.conf.erb', :to => config_path / 'mods-available/status.conf', :sudo => true
  84. # include custom types
  85. render_erb 'apache2/types.conf.erb', :to => config_path / 'conf.d/types.conf', :sudo => true
  86. # configure the virtualhost conf
  87. render_erb 'apache2/virtualhost.conf.erb', :to => config_path / 'conf.d/virtualhost.conf', :sudo => true
  88. # configure logrotate
  89. render_erb 'apache2/logrotate.erb', :to => '/etc/logrotate.d/apache2', :sudo => true
  90. }
  91. after { restart_gracefully }
  92. end
  93. dep 'default site disabled.apache2' do
  94. met? { site_disabled? 'default' }
  95. meet { disable_site 'default' }
  96. after { restart_gracefully }
  97. end
  98. dep 'running.apache2' do
  99. requires 'configured.apache2'
  100. met? { apache2_running? }
  101. meet {
  102. apachectl "start"
  103. }
  104. end
  105. dep 'mod_rewrite enabled.apache2' do
  106. setup { set :module_name, 'rewrite' }
  107. requires 'module enabled.apache2'
  108. end
  109. dep 'proxy enabled.apache2' do
  110. setup { set :module_name, 'proxy' }
  111. requires 'module enabled.apache2'
  112. end
  113. dep 'proxy_http enabled.apache2' do
  114. setup { set :module_name, 'proxy_http' }
  115. requires 'module enabled.apache2'
  116. end
  117. dep 'ssl enabled.apache2' do
  118. setup { set :module_name, 'ssl' }
  119. requires 'module enabled.apache2'
  120. end
  121. dep 'headers enabled.apache2' do
  122. setup { set :module_name, 'headers' }
  123. requires 'module enabled.apache2'
  124. end
  125. dep 'include enabled.apache2' do
  126. setup { set :module_name, 'include' }
  127. requires 'module enabled.apache2'
  128. end
  129. dep 'vhost enabled.apache2' do
  130. requires 'apache2'
  131. met? { site_enabled? var(:domain) }
  132. meet { enable_site var(:domain) }
  133. after { restart_gracefully }
  134. end
  135. dep 'module enabled.apache2' do
  136. requires 'apache2'
  137. met? { mod_enabled? var(:module_name) }
  138. meet { enable_mod var(:module_name) }
  139. after { restart_gracefully }
  140. end
  141. dep 'apache2 runs on boot' do
  142. requires 'apache2'
  143. requires 'rcconf.managed'
  144. met? { shell("rcconf --list").val_for('apache2') == 'on' }
  145. meet { sudo "update-rc.d apache2 defaults" }
  146. end
  147. dep 'passenger vhost configured.apache2' do
  148. requires 'apache2 passenger mods configured'
  149. met? {
  150. site_available?(var(:domain)) && babushka_config?(vhost_config_path(var(:domain)))
  151. }
  152. meet {
  153. render_erb 'apache2/passenger_vhost.conf.erb', :to => vhost_config_path(var(:domain)), :sudo => true
  154. }
  155. end
  156. dep 'apache2-prefork-dev.managed' do
  157. provides ["apxs2"]
  158. end
  159. dep 'xsendfile.apache2' do
  160. requires 'apache2-prefork-dev.managed'
  161. met? {
  162. !!sudo("a2enmod xsendfile")
  163. }
  164. meet {
  165. cd "/tmp" do
  166. log_shell "cleaning ", "rm -rf mod_xsendfile.c"
  167. log_shell "downloading", "wget --no-check-certificate -O mod_xsendfile.c https://tn123.org/mod_xsendfile/mod_xsendfile.c"
  168. log_shell "installing", "sudo apxs2 -cia mod_xsendfile.c"
  169. end
  170. }
  171. after { restart_gracefully }
  172. end