main.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import os
  2. import sys
  3. import signal
  4. import ipaddress
  5. def handle_sigterm(signum, frame):
  6. print("Received SIGTERM, exiting gracefully...")
  7. sys.exit(0)
  8. def get_mysql_config(service_name):
  9. db_config = {
  10. "user": os.getenv("DBUSER") or os.getenv("MYSQL_USER"),
  11. "password": os.getenv("DBPASS") or os.getenv("MYSQL_PASSWORD"),
  12. "database": os.getenv("DBNAME") or os.getenv("MYSQL_DATABASE"),
  13. "connection_timeout": 2,
  14. "service_table": "service_settings",
  15. "service_types": [service_name]
  16. }
  17. db_host = os.getenv("DB_HOST")
  18. if db_host.startswith("/"):
  19. db_config["host"] = "localhost"
  20. db_config["unix_socket"] = db_host
  21. else:
  22. db_config["host"] = db_host
  23. return db_config
  24. def get_redis_config():
  25. redis_config = {
  26. "read_host": os.getenv("REDIS_HOST"),
  27. "read_port": 6379,
  28. "write_host": os.getenv("REDIS_SLAVEOF_IP") or os.getenv("REDIS_HOST"),
  29. "write_port": int(os.getenv("REDIS_SLAVEOF_PORT") or 6379),
  30. "password": os.getenv("REDISPASS"),
  31. "db": 0
  32. }
  33. return redis_config
  34. def main():
  35. signal.signal(signal.SIGTERM, handle_sigterm)
  36. container_name = os.getenv("CONTAINER_NAME")
  37. service_name = container_name.replace("-mailcow", "").replace("-", "")
  38. module_name = f"Bootstrap{service_name.capitalize()}"
  39. try:
  40. mod = __import__(f"modules.{module_name}", fromlist=[module_name])
  41. Bootstrap = getattr(mod, module_name)
  42. except (ImportError, AttributeError) as e:
  43. print(f"Failed to load bootstrap module for: {container_name} → {module_name}")
  44. print(str(e))
  45. sys.exit(1)
  46. b = Bootstrap(
  47. container=container_name,
  48. service=service_name,
  49. db_config=get_mysql_config(service_name),
  50. redis_config=get_redis_config()
  51. )
  52. b.bootstrap()
  53. if __name__ == "__main__":
  54. main()