BootstrapNginx.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from jinja2 import Environment, FileSystemLoader
  2. from modules.BootstrapBase import BootstrapBase
  3. import os
  4. class BootstrapNginx(BootstrapBase):
  5. def bootstrap(self):
  6. # Connect to MySQL
  7. self.connect_mysql()
  8. # wait for Hosts
  9. php_service = os.getenv("PHPFPMHOST") or "php-fpm-mailcow"
  10. rspamd_service = os.getenv("RSPAMDHOST") or "rspamd-mailcow"
  11. sogo_service = os.getenv("SOGOHOST") or os.getenv("IPV4_NETWORK", "172.22.1") + ".248"
  12. self.wait_for_host(php_service)
  13. if not self.isYes(os.getenv("SKIP_RSPAMD", False)):
  14. self.wait_for_host(rspamd_service)
  15. if not self.isYes(os.getenv("SKIP_SOGO", False)):
  16. self.wait_for_host(sogo_service)
  17. # Setup Jinja2 Environment and load vars
  18. self.env = Environment(
  19. loader=FileSystemLoader([
  20. '/service_config/custom_templates',
  21. '/service_config/config_templates'
  22. ]),
  23. keep_trailing_newline=True,
  24. lstrip_blocks=True,
  25. trim_blocks=True
  26. )
  27. extra_vars = {
  28. "VALID_CERT_DIRS": self.get_valid_cert_dirs(),
  29. 'TRUSTED_PROXIES': [item.strip() for item in os.getenv("TRUSTED_PROXIES", "").split(",") if item.strip()],
  30. 'ADDITIONAL_SERVER_NAMES': [item.strip() for item in os.getenv("ADDITIONAL_SERVER_NAMES", "").split(",") if item.strip()],
  31. }
  32. self.env_vars = self.prepare_template_vars('/overwrites.json', extra_vars)
  33. print("Set Timezone")
  34. self.set_timezone()
  35. print("Render config")
  36. self.render_config("/service_config")
  37. def get_valid_cert_dirs(self):
  38. ssl_dir = '/etc/ssl/mail/'
  39. valid_cert_dirs = []
  40. for d in os.listdir(ssl_dir):
  41. full_path = os.path.join(ssl_dir, d)
  42. if not os.path.isdir(full_path):
  43. continue
  44. cert_path = os.path.join(full_path, 'cert.pem')
  45. key_path = os.path.join(full_path, 'key.pem')
  46. domains_path = os.path.join(full_path, 'domains')
  47. if os.path.isfile(cert_path) and os.path.isfile(key_path) and os.path.isfile(domains_path):
  48. with open(domains_path, 'r') as file:
  49. domains = file.read().strip()
  50. domains_list = domains.split()
  51. if domains_list and os.getenv("MAILCOW_HOSTNAME", "") not in domains_list:
  52. valid_cert_dirs.append({
  53. 'cert_path': full_path + '/',
  54. 'domains': domains
  55. })
  56. return valid_cert_dirs