diff --git a/data/Dockerfiles/bootstrap/main.py b/data/Dockerfiles/bootstrap/main.py index aed699a32..607c3095a 100644 --- a/data/Dockerfiles/bootstrap/main.py +++ b/data/Dockerfiles/bootstrap/main.py @@ -1,11 +1,43 @@ import os import sys import signal +import ipaddress def handle_sigterm(signum, frame): print("Received SIGTERM, exiting gracefully...") sys.exit(0) +def get_mysql_config(service_name): + db_config = { + "user": os.getenv("DBUSER") or os.getenv("MYSQL_USER"), + "password": os.getenv("DBPASS") or os.getenv("MYSQL_PASSWORD"), + "database": os.getenv("DBNAME") or os.getenv("MYSQL_DATABASE"), + "connection_timeout": 2, + "service_table": "service_settings", + "service_types": [service_name] + } + + db_host = os.getenv("DB_HOST") + if db_host.startswith("/"): + db_config["host"] = "localhost" + db_config["unix_socket"] = db_host + else: + db_config["host"] = db_host + + return db_config + +def get_redis_config(): + redis_config = { + "read_host": os.getenv("REDIS_HOST"), + "read_port": 6379, + "write_host": os.getenv("REDIS_SLAVEOF_IP") or os.getenv("REDIS_HOST"), + "write_port": int(os.getenv("REDIS_SLAVEOF_PORT") or 6379), + "password": os.getenv("REDISPASS"), + "db": 0 + } + + return redis_config + def main(): signal.signal(signal.SIGTERM, handle_sigterm) @@ -24,24 +56,8 @@ def main(): b = Bootstrap( container=container_name, service=service_name, - db_config={ - "host": "localhost", - "user": os.getenv("DBUSER") or os.getenv("MYSQL_USER"), - "password": os.getenv("DBPASS") or os.getenv("MYSQL_PASSWORD"), - "database": os.getenv("DBNAME") or os.getenv("MYSQL_DATABASE"), - "unix_socket": "/var/run/mysqld/mysqld.sock", - 'connection_timeout': 2, - 'service_table': "service_settings", - 'service_types': [service_name] - }, - redis_config={ - "read_host": "redis-mailcow", - "read_port": 6379, - "write_host": os.getenv("REDIS_SLAVEOF_IP") or "redis-mailcow", - "write_port": int(os.getenv("REDIS_SLAVEOF_PORT") or 6379), - "password": os.getenv("REDISPASS"), - "db": 0 - } + db_config=get_mysql_config(service_name), + redis_config=get_redis_config() ) b.bootstrap() diff --git a/data/Dockerfiles/bootstrap/modules/BootstrapBase.py b/data/Dockerfiles/bootstrap/modules/BootstrapBase.py index 20304d867..748c86e77 100644 --- a/data/Dockerfiles/bootstrap/modules/BootstrapBase.py +++ b/data/Dockerfiles/bootstrap/modules/BootstrapBase.py @@ -527,9 +527,10 @@ class BootstrapBase: "user": self.db_config['user'], "password": self.db_config['password'], "database": self.db_config['database'], - "unix_socket": socket or self.db_config['unix_socket'], 'connection_timeout': self.db_config['connection_timeout'] } + if self.db_config['unix_socket']: + config["unix_socket"] = socket or self.db_config['unix_socket'] while True: try: diff --git a/data/Dockerfiles/bootstrap/modules/BootstrapPostfix.py b/data/Dockerfiles/bootstrap/modules/BootstrapPostfix.py index 4ce81eabe..3f66a473f 100644 --- a/data/Dockerfiles/bootstrap/modules/BootstrapPostfix.py +++ b/data/Dockerfiles/bootstrap/modules/BootstrapPostfix.py @@ -22,11 +22,8 @@ class BootstrapPostfix(BootstrapBase): lstrip_blocks=True, trim_blocks=True ) - extra_config_path = Path("/opt/postfix/conf/extra.cf") - extra_config = extra_config_path.read_text() if extra_config_path.exists() else "" extra_vars = { - "VALID_CERT_DIRS": self.get_valid_cert_dirs(), - "EXTRA_CF": extra_config + "VALID_CERT_DIRS": self.get_valid_cert_dirs() } self.env_vars = self.prepare_template_vars('/service_config/overwrites.json', extra_vars) diff --git a/data/Dockerfiles/dockerapi/Dockerfile b/data/Dockerfiles/dockerapi/Dockerfile index 872764317..abc78dd62 100644 --- a/data/Dockerfiles/dockerapi/Dockerfile +++ b/data/Dockerfiles/dockerapi/Dockerfile @@ -19,9 +19,9 @@ RUN apk add --update --no-cache python3 \ docker RUN mkdir /app/modules -COPY docker-entrypoint.sh /app/ -COPY main.py /app/main.py -COPY modules/ /app/modules/ +COPY data/Dockerfiles/dockerapi/docker-entrypoint.sh /app/ +COPY data/Dockerfiles/dockerapi/main.py /app/main.py +COPY data/Dockerfiles/dockerapi/modules/ /app/modules/ ENTRYPOINT ["/bin/sh", "/app/docker-entrypoint.sh"] CMD ["python", "main.py"] \ No newline at end of file diff --git a/data/Dockerfiles/dockerapi/main.py b/data/Dockerfiles/dockerapi/main.py index 57e262864..84ebb8b93 100644 --- a/data/Dockerfiles/dockerapi/main.py +++ b/data/Dockerfiles/dockerapi/main.py @@ -36,7 +36,7 @@ async def lifespan(app: FastAPI): if os.environ['REDIS_SLAVEOF_IP'] != "": redis_client = redis = await aioredis.from_url(f"redis://{os.environ['REDIS_SLAVEOF_IP']}:{os.environ['REDIS_SLAVEOF_PORT']}/0", password=os.environ['REDISPASS']) else: - redis_client = redis = await aioredis.from_url("redis://redis-mailcow:6379/0", password=os.environ['REDISPASS']) + redis_client = redis = await aioredis.from_url(f"redis://{os.environ['REDIS_HOST']}:6379/0", password=os.environ['REDISPASS']) # Init docker clients sync_docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock', version='auto')