10 logrotate-entry-apache
11 logrotate-entry-apache-cached
15 switch-apache-softwaretype
16 frontend-apache-graceful
17 cached-apache-graceful
22 dynamic-template-default-vh
24 promise-frontend-apache-configuration
25 promise-cached-apache-configuration
26 promise-apache-frontend-v4-https
27 promise-apache-frontend-v4-http
28 promise-apache-frontend-v6-https
29 promise-apache-frontend-v6-http
32 ###Parts to add for monitoring
52 monitor-current-log-access
53 monitor-backup-log-access
54 extends = ${monitor-template:output}
57 eggs-directory = ${buildout:eggs-directory}
58 develop-eggs-directory = ${buildout:develop-eggs-directory}
61 # Create all needed directories
63 recipe = slapos.cookbook:mkdirectory
65 bin = $${buildout:directory}/bin/
66 etc = $${buildout:directory}/etc/
67 srv = $${buildout:directory}/srv/
68 var = $${buildout:directory}/var/
69 template = $${buildout:directory}/template/
71 backup = $${:srv}/backup
74 service = $${:etc}/service
75 etc-run = $${:etc}/run
76 promise = $${:etc}/promise
78 logrotate-backup = $${:backup}/logrotate
79 logrotate-entries = $${:etc}/logrotate.d
81 cron-entries = $${:etc}/cron.d
82 crontabs = $${:etc}/crontabs
83 cronstamps = $${:etc}/cronstamps
86 [switch-apache-softwaretype]
87 recipe = slapos.cookbook:softwaretype
88 single-default = $${dynamic-default-template-slave-list:rendered}
89 single-custom-personal = $${dynamic-custom-personal-template-slave-list:rendered}
90 single-custom-group = $${dynamic-custom-group-template-slave-list:rendered}
93 # Fetches parameters defined in SlapOS Master for this instance.
95 recipe = slapos.cookbook:slapconfiguration.serialised
96 computer = $${slap-connection:computer-id}
97 partition = $${slap-connection:partition-id}
98 url = $${slap-connection:server-url}
99 key = $${slap-connection:key-file}
100 cert = $${slap-connection:cert-file}
101 # Define default parameter(s) that will be used later, in case user didn't
103 # All parameters are available through the configuration.XX syntax.
104 # All possible parameters should have a default.
105 configuration.domain = example.org
106 configuration.public-ipv4 =
107 configuration.port = 4443
108 configuration.plain_http_port = 8080
109 configuration.server-admin = admin@example.com
110 configuration.apache_custom_https = ""
111 configuration.apache_custom_http = ""
112 configuration.apache-key =
113 configuration.apache-certificate =
114 configuration.open-port = 80 443
115 configuration.extra_slave_instance_list =
117 [frontend-configuration]
118 template-log-access = ${template-log-access:target}
119 log-access-configuration = $${directory:etc}/apache-log-access.conf
120 apache-directory = ${apache-2.2:location}
121 apache-ipv6 = $${instance-parameter:ipv6-random}
122 apache-https-port = $${instance-parameter:configuration.port}
124 [monitor-current-log-access]
125 < = monitor-directory-access
126 source = $${directory:log}
128 [monitor-backup-log-access]
129 < = monitor-directory-access
130 source = $${directory:logrotate-backup}
132 [jinja2-template-base]
133 recipe = slapos.recipe.template:jinja2
134 rendered = $${buildout:directory}/$${:filename}
137 import json_module json
138 key eggs_directory buildout:eggs-directory
139 key develop_eggs_directory buildout:develop-eggs-directory
140 key slap_software_type instance-parameter:slap-software-type
141 key slapparameter_dict instance-parameter:configuration
144 [dynamic-template-default-vh]
145 < = jinja2-template-base
146 template = ${template-default-virtualhost:target}
147 rendered = $${apache-directory:slave-configuration}/000.conf
148 extensions = jinja2.ext.do
150 key http_port instance-parameter:configuration.plain_http_port
151 key https_port instance-parameter:configuration.port
153 [dynamic-custom-personal-template-slave-list]
154 < = jinja2-template-base
155 template = ${template-slave-list:target}
156 filename = custom-personal-instance-slave-list.cfg
157 extensions = jinja2.ext.do
159 key apache_configuration_directory apache-directory:slave-configuration
160 key http_port instance-parameter:configuration.plain_http_port
161 key https_port instance-parameter:configuration.port
162 key public_ipv4 instance-parameter:configuration.public-ipv4
163 key slave_instance_list instance-parameter:slave-instance-list
164 key extra_slave_instance_list instance-parameter:configuration.extra_slave_instance_list
165 key rewrite_cached_configuration apache-configuration:cached-rewrite-file
166 key custom_ssl_directory apache-directory:vh-ssl
167 key apache_log_directory apache-directory:slave-log
168 key local_ipv4 instance-parameter:ipv4-random
169 key cache_port apache-configuration:cache-port
170 raw empty_template ${template-empty:target}
171 raw template_slave_configuration ${template-slave-configuration:target}
172 raw template_rewrite_cached ${template-rewrite-cached:target}
173 raw software_type single-custom-personal
174 section logrotate_dict logrotate
175 section frontend_configuration frontend-configuration
176 section apache_configuration apache-configuration
177 section connection_information_dict publish-connection-informations
179 [dynamic-custom-group-template-slave-list]
180 < = jinja2-template-base
181 template = ${template-custom-slave-list:target}
182 filename = custom-group-instance-slave-list.cfg
183 extensions = jinja2.ext.do
185 key apache_configuration_directory apache-directory:slave-configuration
186 key domain instance-parameter:configuration.domain
187 key http_port instance-parameter:configuration.plain_http_port
188 key https_port instance-parameter:configuration.port
189 key public_ipv4 instance-parameter:configuration.public-ipv4
190 key slave_instance_list instance-parameter:slave-instance-list
191 key extra_slave_instance_list instance-parameter:configuration.extra_slave_instance_list
192 key rewrite_cached_configuration apache-configuration:cached-rewrite-file
193 key custom_ssl_directory apache-directory:vh-ssl
194 key template_slave_configuration dynamic-virtualhost-template-slave:rendered
195 key apache_log_directory apache-directory:slave-log
196 key local_ipv4 instance-parameter:ipv4-random
197 key cache_port apache-configuration:cache-port
198 raw empty_template ${template-empty:target}
199 raw template_rewrite_cached ${template-rewrite-cached:target}
200 raw software_type single-custom-group
202 [dynamic-default-template-slave-list]
203 < = jinja2-template-base
204 template = ${template-custom-slave-list:target}
205 filename = default-instance-slave-list.cfg
206 extensions = jinja2.ext.do
208 key apache_configuration_directory apache-directory:slave-configuration
209 key domain instance-parameter:configuration.domain
210 key http_port instance-parameter:configuration.plain_http_port
211 key https_port instance-parameter:configuration.port
212 key public_ipv4 instance-parameter:configuration.public-ipv4
213 key slave_instance_list instance-parameter:slave-instance-list
214 key extra_slave_instance_list instance-parameter:configuration.extra_slave_instance_list
215 key rewrite_cached_configuration apache-configuration:cached-rewrite-file
216 key custom_ssl_directory apache-directory:vh-ssl
217 key apache_log_directory apache-directory:slave-log
218 key local_ipv4 instance-parameter:ipv4-random
219 key cache_port apache-configuration:cache-port
220 raw template_slave_configuration ${template-default-slave-virtualhost:target}
221 raw empty_template ${template-empty:target}
222 raw template_rewrite_cached ${template-rewrite-cached:target}
223 raw software_type single-default
224 # XXXX Hack to allow two software types
226 [dynamic-virtualhost-template-slave]
227 <= jinja2-template-base
228 template = ${template-slave-configuration:target}
229 rendered = $${directory:template}/slave-virtualhost.conf.in
230 extensions = jinja2.ext.do
232 key https_port instance-parameter:configuration.port
233 key http_port instance-parameter:configuration.plain_http_port
234 key apache_custom_https instance-parameter:configuration.apache_custom_https
235 key apache_custom_http instance-parameter:configuration.apache_custom_http
237 # Deploy Apache Frontend (new way, no recipe, jinja power)
238 [dynamic-apache-frontend-template]
239 < = jinja2-template-base
240 template = ${template-apache-frontend-configuration:target}
241 rendered = $${apache-configuration:frontend-configuration}
243 raw httpd_home ${apache-2.2:location}
244 key httpd_mod_ssl_cache_directory apache-directory:mod-ssl
245 key domain instance-parameter:configuration.domain
246 key document_root apache-directory:document-root
247 key instance_home buildout:directory
248 key ipv4_addr instance-parameter:ipv4-random
249 key ipv6_addr instance-parameter:ipv6-random
250 key http_port instance-parameter:configuration.plain_http_port
251 key https_port instance-parameter:configuration.port
252 key server_admin instance-parameter:configuration.server-admin
253 key protected_path apache-configuration:protected-path
254 key access_control_string apache-configuration:access-control-string
255 key login_certificate ca-frontend:cert-file
256 key login_key ca-frontend:key-file
257 key ca_dir certificate-authority:ca-dir
258 key ca_crl certificate-authority:ca-crl
259 key access_log apache-configuration:access-log
260 key error_log apache-configuration:error-log
261 key pid_file apache-configuration:pid-file
262 key slave_configuration_directory apache-directory:slave-configuration
263 section frontend_configuration frontend-configuration
266 recipe = slapos.cookbook:wrapper
267 command-line = ${apache-2.2:location}/bin/httpd -f $${dynamic-apache-frontend-template:rendered} -DFOREGROUND
268 wrapper-path = $${directory:service}/frontend_apache
270 $${ca-frontend:cert-file}
271 $${ca-frontend:key-file}
273 # Deploy Apache for cached website
274 [dynamic-apache-cached-template]
275 < = jinja2-template-base
276 template = ${template-apache-cached-configuration:target}
277 rendered = $${apache-configuration:cached-configuration}
279 raw httpd_home ${apache-2.2:location}
280 key httpd_mod_ssl_cache_directory apache-directory:mod-ssl
281 key domain instance-parameter:configuration.domain
282 key document_root apache-directory:document-root
283 key instance_home buildout:directory
284 key ipv4_addr instance-parameter:ipv4-random
285 key cached_port apache-configuration:cache-through-port
286 key server_admin instance-parameter:configuration.server-admin
287 key protected_path apache-configuration:protected-path
288 key access_control_string apache-configuration:access-control-string
289 key login_certificate ca-frontend:cert-file
290 key login_key ca-frontend:key-file
291 key ca_dir certificate-authority:ca-dir
292 key ca_crl certificate-authority:ca-crl
293 key access_log apache-configuration:cache-access-log
294 key error_log apache-configuration:cache-error-log
295 key pid_file apache-configuration:cache-pid-file
296 key apachecachedmap_path apache-configuration:cached-rewrite-file
299 recipe = slapos.cookbook:wrapper
300 command-line = ${apache-2.2:location}/bin/httpd -f $${dynamic-apache-cached-template:rendered} -DFOREGROUND
301 wrapper-path = $${directory:service}/frontend_cached_apache
303 $${ca-frontend:cert-file}
304 $${ca-frontend:key-file}
307 recipe = slapos.cookbook:symbolic.link
308 target-directory = $${apache-directory:document-root}
310 ${template-not-found-html:target}
313 recipe = slapos.cookbook:mkdirectory
314 document-root = $${directory:srv}/htdocs
315 slave-configuration = $${directory:etc}/apache-slave-conf.d/
316 cache = $${directory:var}/cache
317 mod-ssl = $${:cache}/httpd_mod_ssl
318 vh-ssl = $${:slave-configuration}/ssl
319 slave-log = $${directory:log}/httpd
321 [apache-configuration]
322 frontend-configuration = $${directory:etc}/apache_frontend.conf
323 cached-configuration = $${directory:etc}/apache_frontend_cached.conf
324 access-log = $${directory:log}/frontend-apache-access.log
325 error-log = $${directory:log}/frontend-apache-error.log
326 pid-file = $${directory:run}/httpd.pid
328 access-control-string = none
329 cached-rewrite-file = $${directory:etc}/apache_rewrite_cached.txt
330 frontend-configuration-verification = ${apache-2.2:location}/bin/httpd -Sf $${:frontend-configuration}
331 frontend-graceful-command = $${:frontend-configuration-verification}; if [ $? -eq 0 ]; then kill -USR1 $(cat $${:pid-file}); fi
332 cached-configuration-verification = ${apache-2.2:location}/bin/httpd -Sf $${:cached-configuration}
333 cached-graceful-command = $${:cached-configuration-verification}; if [ $? -eq 0 ]; then kill -USR1 $(cat $${apache-configuration:cache-pid-file}); fi
335 # Apache for cache configuration
336 cache-access-log = $${directory:log}/frontend-apache-access-cached.log
337 cache-error-log = $${directory:log}/frontend-apache-error-cached.log
338 cache-pid-file = $${directory:run}/httpd-cached.pid
340 # Comunication with squid
342 cache-through-port = 26011
344 # Create wrapper for "apachectl conftest" in bin
346 recipe = slapos.cookbook:wrapper
347 command-line = ${apache-2.2:location}/bin/httpd -f $${directory:etc}/apache_frontend.conf -t
348 wrapper-path = $${directory:bin}/apache-configtest
350 [certificate-authority]
351 recipe = slapos.cookbook:certificate_authority
352 openssl-binary = ${openssl:location}/bin/openssl
353 ca-dir = $${directory:ca-dir}
354 requests-directory = $${cadirectory:requests}
355 wrapper = $${directory:service}/certificate_authority
356 ca-private = $${cadirectory:private}
357 ca-certs = $${cadirectory:certs}
358 ca-newcerts = $${cadirectory:newcerts}
359 ca-crl = $${cadirectory:crl}
362 recipe = slapos.cookbook:mkdirectory
363 requests = $${directory:ca-dir}/requests/
364 private = $${directory:ca-dir}/private/
365 certs = $${directory:ca-dir}/certs/
366 newcerts = $${directory:ca-dir}/newcerts/
367 crl = $${directory:ca-dir}/crl/
370 <= certificate-authority
371 recipe = slapos.cookbook:certificate_authority.request
372 key-file = $${cadirectory:certs}/apache_frontend.key
373 cert-file = $${cadirectory:certs}/apache_frontend.crt
374 executable = $${directory:service}/frontend_apache
375 wrapper = $${directory:service}/frontend_apache
376 key-content = $${instance-parameter:configuration.apache-key}
377 cert-content = $${instance-parameter:configuration.apache-certificate}
379 name = $${instance-parameter:configuration.domain}
382 recipe = slapos.cookbook:cron
383 dcrond-binary = ${dcron:location}/sbin/crond
384 cron-entries = $${directory:cron-entries}
385 crontabs = $${directory:crontabs}
386 cronstamps = $${directory:cronstamps}
387 catcher = $${cron-simplelogger:wrapper}
388 binary = $${directory:service}/crond
391 recipe = slapos.cookbook:simplelogger
392 wrapper = $${directory:bin}/cron_simplelogger
393 log = $${directory:log}/cron.log
395 [cron-entry-logrotate]
397 recipe = slapos.cookbook:cron.d
399 frequency = 0 0 * * *
400 command = $${logrotate:wrapper}
404 recipe = slapos.cookbook:logrotate
406 logrotate-binary = ${logrotate:location}/usr/sbin/logrotate
407 gzip-binary = ${gzip:location}/bin/gzip
408 gunzip-binary = ${gzip:location}/bin/gunzip
410 wrapper = $${directory:bin}/logrotate
411 conf = $${directory:etc}/logrotate.conf
412 logrotate-entries = $${directory:logrotate-entries}
413 backup = $${directory:logrotate-backup}
414 state-file = $${directory:srv}/logrotate.status
416 [logrotate-entry-apache]
418 recipe = slapos.cookbook:logrotate.d
420 log = $${apache-configuration:error-log} $${apache-configuration:access-log}
423 post = $${apache-configuration:frontend-graceful-command}
428 [logrotate-entry-apache-cached]
430 recipe = slapos.cookbook:logrotate.d
432 log = $${apache-configuration:cache-error-log} $${apache-configuration:cache-access-log}
435 post = $${apache-configuration:cached-graceful-command}
440 [logrotate-entry-squid]
442 recipe = slapos.cookbook:logrotate.d
444 log = $${squid-cache:cache-log-path} $${squid-cache:access-log-path}
447 post = ${buildout:bin-directory}/killpidfromfile $${apache-configuration:pid-file} SIGHUP
452 ######################
454 ######################
456 recipe = slapos.cookbook:mkdirectory
457 squid-cache = $${directory:srv}/squid_cache
460 prepare-path = $${directory:etc-run}/squid-prepare
461 wrapper-path = $${directory:service}/squid
462 binary-path = ${squid:location}/sbin/squid
463 configuration-path = $${directory:etc}/squid.cfg
464 cache-path = $${squid-directory:squid-cache}
465 ip = $${instance-parameter:ipv4-random}
466 port = $${apache-configuration:cache-port}
467 backend-ip = $${instance-parameter:ipv4-random}
468 backend-port = $${apache-configuration:cache-through-port}
469 open-port = $${instance-parameter:configuration.open-port}
470 access-log-path = $${directory:log}/squid-access.log
471 cache-log-path = $${directory:log}/squid-cache.log
472 pid-filename-path = $${directory:run}/squid.pid
474 [squid-configuration]
475 < = jinja2-template-base
476 template = ${template-squid-configuration:target}
477 rendered = $${squid-cache:configuration-path}
479 key ip squid-cache:ip
480 key port squid-cache:port
481 key backend_ip squid-cache:backend-ip
482 key backend_port squid-cache:backend-port
483 key cache_path squid-cache:cache-path
484 key access_log_path squid-cache:access-log-path
485 key cache_log_path squid-cache:cache-log-path
486 key pid_filename_path squid-cache:pid-filename-path
487 key open_port squid-cache:open-port
490 recipe = slapos.cookbook:wrapper
491 command-line = $${squid-cache:binary-path} -N -f $${squid-configuration:rendered}
492 wrapper-path = $${squid-cache:wrapper-path}
495 recipe = slapos.cookbook:wrapper
496 command-line = $${squid-cache:binary-path} -z -f $${squid-configuration:rendered}
497 wrapper-path = $${squid-cache:prepare-path}
500 recipe = slapos.cookbook:wrapper
501 command-line = ${buildout:bin-directory}/killpidfromfile $${squid-cache:pid-filename-path} SIGHUP
502 wrapper-path = $${directory:etc-run}/squid-reload
505 recipe = slapos.cookbook:check_port_listening
506 path = $${directory:promise}/squid
507 hostname = $${instance-parameter:ipv4-random}
508 port = $${apache-configuration:cache-port}
512 ### Apaches Graceful and promises
513 [frontend-apache-graceful]
514 < = jinja2-template-base
515 template = ${template-wrapper:output}
516 rendered = $${directory:etc-run}/frontend-apache-safe-graceful
519 key content apache-configuration:frontend-graceful-command
521 [cached-apache-graceful]
522 < = jinja2-template-base
523 template = ${template-wrapper:output}
524 rendered = $${directory:etc-run}/cached-apache-safe-graceful
527 key content apache-configuration:cached-graceful-command
529 # Promises checking configuration:
530 [promise-frontend-apache-configuration]
531 < = jinja2-template-base
532 template = ${template-wrapper:output}
533 rendered = $${directory:promise}/frontend-apache-configuration-promise
536 key content apache-configuration:frontend-configuration-verification
538 [promise-cached-apache-configuration]
539 < = jinja2-template-base
540 template = ${template-wrapper:output}
541 rendered = $${directory:promise}/cached-apache-configuration-promise
544 key content apache-configuration:cached-configuration-verification
546 [promise-apache-frontend-v4-https]
547 recipe = slapos.cookbook:check_port_listening
548 path = $${directory:promise}/apache_frontend_ipv4_https
549 hostname = $${instance-parameter:ipv4-random}
550 port = $${instance-parameter:configuration.port}
552 [promise-apache-frontend-v4-http]
553 recipe = slapos.cookbook:check_port_listening
554 path = $${directory:promise}/apache_frontend_ipv4_http
555 hostname = $${instance-parameter:ipv4-random}
556 port = $${instance-parameter:configuration.plain_http_port}
558 [promise-apache-frontend-v6-https]
559 recipe = slapos.cookbook:check_port_listening
560 path = $${directory:promise}/apache_frontend_ipv6_https
561 hostname = $${instance-parameter:ipv6-random}
562 port = $${instance-parameter:configuration.port}
564 [promise-apache-frontend-v6-http]
565 recipe = slapos.cookbook:check_port_listening
566 path = $${directory:promise}/apache_frontend_ipv6_http
567 hostname = $${instance-parameter:ipv6-random}
568 port = $${instance-parameter:configuration.plain_http_port}
570 [promise-apache-cached]
571 recipe = slapos.cookbook:check_port_listening
572 path = $${directory:promise}/apache_cached
573 hostname = $${instance-parameter:ipv4-random}
574 port = $${apache-configuration:cache-through-port}
577 # Kept for backward compatiblity
578 computer_id = $${slap-connection:computer-id}
579 partition_id = $${slap-connection:partition-id}
580 server_url = $${slap-connection:server-url}
581 software_release_url = $${slap-connection:software-release-url}
582 key_file = $${slap-connection:key-file}
583 cert_file = $${slap-connection:cert-file}