From 0a2372cb5cc51103c9d8d0bd7a9bb5a7db9684c4 Mon Sep 17 00:00:00 2001 From: data Date: Tue, 24 Feb 2026 18:25:26 +0100 Subject: [PATCH] Entrypoint: Default-Configs automatisch in gemountete Volumes kopieren Auf Unraid ist app/cfg als Volume gemountet und bei Erstinstallation leer. Der Entrypoint kopiert presets.yaml und settings.yaml aus cfg_defaults, falls sie im gemounteten Verzeichnis fehlen. Config._load_presets() hat zusaetzlich einen Fallback auf cfg_defaults. Co-Authored-By: Claude Opus 4.6 --- Dockerfile | 9 ++++++++- app/config.py | 13 +++++++++++-- entrypoint.sh | 18 ++++++++++++++++++ 3 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 entrypoint.sh diff --git a/Dockerfile b/Dockerfile index 5f17a33..a0c2f7c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,13 +37,20 @@ RUN pip install --no-cache-dir --break-system-packages -r requirements.txt COPY __main__.py . COPY app/ ./app/ +# Default-Konfigdateien sichern (werden beim Start ins gemountete cfg kopiert) +RUN cp -r /opt/video-konverter/app/cfg /opt/video-konverter/cfg_defaults + # Daten- und Log-Verzeichnisse (beschreibbar fuer UID 1000) RUN mkdir -p /opt/video-konverter/data /opt/video-konverter/logs \ && chmod 777 /opt/video-konverter/data /opt/video-konverter/logs +# Entrypoint (kopiert Defaults in gemountete Volumes) +COPY entrypoint.sh . +RUN chmod +x entrypoint.sh + # Konfiguration und Daten als Volumes VOLUME ["/opt/video-konverter/app/cfg", "/opt/video-konverter/data", "/opt/video-konverter/logs"] EXPOSE 8080 -CMD ["python3", "__main__.py"] +ENTRYPOINT ["./entrypoint.sh"] diff --git a/app/config.py b/app/config.py index a24d37e..48e0048 100644 --- a/app/config.py +++ b/app/config.py @@ -167,8 +167,18 @@ class Config: self._save_yaml(settings_file, self.settings) def _load_presets(self) -> None: - """Laedt presets.yaml""" + """Laedt presets.yaml. Falls nicht vorhanden, aus cfg_defaults kopieren.""" presets_file = self._cfg_path / "presets.yaml" + if not presets_file.exists(): + # Versuche Default-Presets aus cfg_defaults zu kopieren + defaults_file = Path(__file__).parent.parent / "cfg_defaults" / "presets.yaml" + if defaults_file.exists(): + import shutil + shutil.copy2(defaults_file, presets_file) + logging.info(f"Default-Presets kopiert: {defaults_file} -> {presets_file}") + else: + logging.warning("Keine presets.yaml und keine Defaults gefunden") + if presets_file.exists(): try: with open(presets_file, "r", encoding="utf-8") as f: @@ -178,7 +188,6 @@ class Config: logging.error(f"Presets lesen fehlgeschlagen: {e}") self.presets = {} else: - logging.warning("Keine presets.yaml gefunden - verwende leere Presets") self.presets = {} def _apply_env_overrides(self) -> None: diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..0fde904 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# Entrypoint: Kopiert Default-Konfigdateien ins gemountete cfg-Verzeichnis, +# falls sie dort nicht existieren (z.B. bei Erstinstallation auf Unraid). + +CFG_DIR="/opt/video-konverter/app/cfg" +DEFAULTS_DIR="/opt/video-konverter/cfg_defaults" + +# Alle Default-Dateien kopieren, wenn nicht vorhanden +for file in "$DEFAULTS_DIR"/*; do + filename=$(basename "$file") + if [ ! -f "$CFG_DIR/$filename" ]; then + echo "Kopiere Default-Config: $filename" + cp "$file" "$CFG_DIR/$filename" + fi +done + +# Anwendung starten +exec python3 __main__.py