浏览代码

Merge pull request #5592 from mailcow/feat/alpine-3.19

Update Dockerfiles to Alpine 3.19
Niklas Meyer 1 年之前
父节点
当前提交
942ef7c254

+ 2 - 1
data/Dockerfiles/acme/Dockerfile

@@ -1,7 +1,8 @@
-FROM alpine:3.17
+FROM alpine:3.19
 
 
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 
+ARG PIP_BREAK_SYSTEM_PACKAGES=1
 RUN apk upgrade --no-cache \
 RUN apk upgrade --no-cache \
   && apk add --update --no-cache \
   && apk add --update --no-cache \
   bash \
   bash \

+ 5 - 3
data/Dockerfiles/dockerapi/Dockerfile

@@ -1,7 +1,8 @@
-FROM alpine:3.17
+FROM alpine:3.19
 
 
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 
+ARG PIP_BREAK_SYSTEM_PACKAGES=1
 WORKDIR /app
 WORKDIR /app
 
 
 RUN apk add --update --no-cache python3 \
 RUN apk add --update --no-cache python3 \
@@ -9,12 +10,13 @@ RUN apk add --update --no-cache python3 \
   openssl \
   openssl \
   tzdata \
   tzdata \
   py3-psutil \
   py3-psutil \
+  py3-redis \
+  py3-async-timeout \
 && pip3 install --upgrade pip \
 && pip3 install --upgrade pip \
   fastapi \
   fastapi \
   uvicorn \
   uvicorn \
   aiodocker \
   aiodocker \
-  docker \
-  aioredis 
+  docker
 RUN mkdir /app/modules
 RUN mkdir /app/modules
 
 
 COPY docker-entrypoint.sh /app/
 COPY docker-entrypoint.sh /app/

+ 50 - 49
data/Dockerfiles/dockerapi/main.py

@@ -5,16 +5,63 @@ import json
 import uuid
 import uuid
 import async_timeout
 import async_timeout
 import asyncio
 import asyncio
-import aioredis
 import aiodocker
 import aiodocker
 import docker
 import docker
 import logging
 import logging
 from logging.config import dictConfig
 from logging.config import dictConfig
 from fastapi import FastAPI, Response, Request
 from fastapi import FastAPI, Response, Request
 from modules.DockerApi import DockerApi
 from modules.DockerApi import DockerApi
+from redis import asyncio as aioredis
+from contextlib import asynccontextmanager
 
 
 dockerapi = None
 dockerapi = None
-app = FastAPI()
+
+@asynccontextmanager
+async def lifespan(app: FastAPI):
+  global dockerapi
+
+  # Initialize a custom logger
+  logger = logging.getLogger("dockerapi")
+  logger.setLevel(logging.INFO)
+  # Configure the logger to output logs to the terminal
+  handler = logging.StreamHandler()
+  handler.setLevel(logging.INFO)
+  formatter = logging.Formatter("%(levelname)s:     %(message)s")
+  handler.setFormatter(formatter)
+  logger.addHandler(handler)
+
+  logger.info("Init APP")
+
+  # Init redis client
+  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")
+  else:
+    redis_client = redis = await aioredis.from_url("redis://redis-mailcow:6379/0")
+
+  # Init docker clients
+  sync_docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock', version='auto')
+  async_docker_client = aiodocker.Docker(url='unix:///var/run/docker.sock')
+
+  dockerapi = DockerApi(redis_client, sync_docker_client, async_docker_client, logger)
+
+  logger.info("Subscribe to redis channel")
+  # Subscribe to redis channel
+  dockerapi.pubsub = redis.pubsub()
+  await dockerapi.pubsub.subscribe("MC_CHANNEL")
+  asyncio.create_task(handle_pubsub_messages(dockerapi.pubsub))
+
+
+  yield
+
+  # Close docker connections
+  dockerapi.sync_docker_client.close()
+  await dockerapi.async_docker_client.close()
+
+  # Close redis
+  await dockerapi.pubsub.unsubscribe("MC_CHANNEL")
+  await dockerapi.redis_client.close()
+
+app = FastAPI(lifespan=lifespan)
 
 
 # Define Routes
 # Define Routes
 @app.get("/host/stats")
 @app.get("/host/stats")
@@ -144,53 +191,7 @@ async def post_container_update_stats(container_id : str):
 
 
   stats = json.loads(await dockerapi.redis_client.get(container_id + '_stats'))
   stats = json.loads(await dockerapi.redis_client.get(container_id + '_stats'))
   return Response(content=json.dumps(stats, indent=4), media_type="application/json")
   return Response(content=json.dumps(stats, indent=4), media_type="application/json")
-
-# Events
-@app.on_event("startup")
-async def startup_event():
-  global dockerapi
-
-  # Initialize a custom logger
-  logger = logging.getLogger("dockerapi")
-  logger.setLevel(logging.INFO)
-  # Configure the logger to output logs to the terminal
-  handler = logging.StreamHandler()
-  handler.setLevel(logging.INFO)
-  formatter = logging.Formatter("%(levelname)s:     %(message)s")
-  handler.setFormatter(formatter)
-  logger.addHandler(handler)
-
-  logger.info("Init APP")
-
-  # Init redis client
-  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")
-  else:
-    redis_client = redis = await aioredis.from_url("redis://redis-mailcow:6379/0")
-
-  # Init docker clients
-  sync_docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock', version='auto')
-  async_docker_client = aiodocker.Docker(url='unix:///var/run/docker.sock')
-
-  dockerapi = DockerApi(redis_client, sync_docker_client, async_docker_client, logger)
-
-  logger.info("Subscribe to redis channel")
-  # Subscribe to redis channel
-  dockerapi.pubsub = redis.pubsub()
-  await dockerapi.pubsub.subscribe("MC_CHANNEL")
-  asyncio.create_task(handle_pubsub_messages(dockerapi.pubsub))
-
-@app.on_event("shutdown")
-async def shutdown_event():
-  global dockerapi
-
-  # Close docker connections
-  dockerapi.sync_docker_client.close()
-  await dockerapi.async_docker_client.close()
-
-  # Close redis
-  await dockerapi.pubsub.unsubscribe("MC_CHANNEL")
-  await dockerapi.redis_client.close()
+  
 
 
 # PubSub Handler
 # PubSub Handler
 async def handle_pubsub_messages(channel: aioredis.client.PubSub):
 async def handle_pubsub_messages(channel: aioredis.client.PubSub):

+ 3 - 1
data/Dockerfiles/netfilter/Dockerfile

@@ -1,8 +1,9 @@
-FROM alpine:3.17
+FROM alpine:3.19
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 
 WORKDIR /app
 WORKDIR /app
 
 
+ARG PIP_BREAK_SYSTEM_PACKAGES=1
 ENV XTABLES_LIBDIR /usr/lib/xtables
 ENV XTABLES_LIBDIR /usr/lib/xtables
 ENV PYTHON_IPTABLES_XTABLES_VERSION 12
 ENV PYTHON_IPTABLES_XTABLES_VERSION 12
 ENV IPTABLES_LIBDIR /usr/lib
 ENV IPTABLES_LIBDIR /usr/lib
@@ -14,6 +15,7 @@ RUN apk add --virtual .build-deps \
   openssl-dev \
   openssl-dev \
 && apk add -U python3 \
 && apk add -U python3 \
   iptables \
   iptables \
+  iptables-dev \
   ip6tables \
   ip6tables \
   xtables-addons \
   xtables-addons \
   nftables \
   nftables \

+ 2 - 1
data/Dockerfiles/olefy/Dockerfile

@@ -1,6 +1,7 @@
-FROM alpine:3.17
+FROM alpine:3.19
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 
+ARG PIP_BREAK_SYSTEM_PACKAGES=1
 WORKDIR /app
 WORKDIR /app
 
 
 #RUN addgroup -S olefy && adduser -S olefy -G olefy \
 #RUN addgroup -S olefy && adduser -S olefy -G olefy \

+ 1 - 1
data/Dockerfiles/phpfpm/Dockerfile

@@ -1,4 +1,4 @@
-FROM php:8.2-fpm-alpine3.17
+FROM php:8.2-fpm-alpine3.19
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 
 # renovate: datasource=github-tags depName=krakjoe/apcu versioning=semver-coerced extractVersion=^v(?<version>.*)$
 # renovate: datasource=github-tags depName=krakjoe/apcu versioning=semver-coerced extractVersion=^v(?<version>.*)$

+ 1 - 1
data/Dockerfiles/unbound/Dockerfile

@@ -1,4 +1,4 @@
-FROM alpine:3.17
+FROM alpine:3.19
 
 
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 

+ 2 - 2
data/Dockerfiles/watchdog/Dockerfile

@@ -1,5 +1,5 @@
-FROM alpine:3.17
-LABEL maintainer "André Peters <andre.peters@servercow.de>"
+FROM alpine:3.19
+LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 
 # Installation
 # Installation
 RUN apk add --update \
 RUN apk add --update \

+ 7 - 7
docker-compose.yml

@@ -2,7 +2,7 @@ version: '2.1'
 services:
 services:
 
 
     unbound-mailcow:
     unbound-mailcow:
-      image: mailcow/unbound:1.18
+      image: mailcow/unbound:1.19
       environment:
       environment:
         - TZ=${TZ}
         - TZ=${TZ}
       volumes:
       volumes:
@@ -107,7 +107,7 @@ services:
             - rspamd
             - rspamd
 
 
     php-fpm-mailcow:
     php-fpm-mailcow:
-      image: mailcow/phpfpm:1.85
+      image: mailcow/phpfpm:1.86
       command: "php-fpm -d date.timezone=${TZ} -d expose_php=0"
       command: "php-fpm -d date.timezone=${TZ} -d expose_php=0"
       depends_on:
       depends_on:
         - redis-mailcow
         - redis-mailcow
@@ -398,7 +398,7 @@ services:
           condition: service_started
           condition: service_started
         unbound-mailcow:
         unbound-mailcow:
           condition: service_healthy
           condition: service_healthy
-      image: mailcow/acme:1.85
+      image: mailcow/acme:1.86
       dns:
       dns:
         - ${IPV4_NETWORK:-172.22.1}.254
         - ${IPV4_NETWORK:-172.22.1}.254
       environment:
       environment:
@@ -434,7 +434,7 @@ services:
             - acme
             - acme
 
 
     netfilter-mailcow:
     netfilter-mailcow:
-      image: mailcow/netfilter:1.54
+      image: mailcow/netfilter:1.55
       stop_grace_period: 30s
       stop_grace_period: 30s
       depends_on:
       depends_on:
         - dovecot-mailcow
         - dovecot-mailcow
@@ -457,7 +457,7 @@ services:
         - /lib/modules:/lib/modules:ro
         - /lib/modules:/lib/modules:ro
 
 
     watchdog-mailcow:
     watchdog-mailcow:
-      image: mailcow/watchdog:2.00
+      image: mailcow/watchdog:2.01
       dns:
       dns:
         - ${IPV4_NETWORK:-172.22.1}.254
         - ${IPV4_NETWORK:-172.22.1}.254
       tmpfs:
       tmpfs:
@@ -529,7 +529,7 @@ services:
             - watchdog
             - watchdog
 
 
     dockerapi-mailcow:
     dockerapi-mailcow:
-      image: mailcow/dockerapi:2.06
+      image: mailcow/dockerapi:2.07
       security_opt:
       security_opt:
         - label=disable
         - label=disable
       restart: always
       restart: always
@@ -564,7 +564,7 @@ services:
             - solr
             - solr
 
 
     olefy-mailcow:
     olefy-mailcow:
-      image: mailcow/olefy:1.11
+      image: mailcow/olefy:1.12
       restart: always
       restart: always
       environment:
       environment:
         - TZ=${TZ}
         - TZ=${TZ}