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 <noreply@anthropic.com>
This commit is contained in:
Eduard Wisch 2026-02-24 18:25:26 +01:00
parent 2506207d2e
commit 0a2372cb5c
3 changed files with 37 additions and 3 deletions

View file

@ -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"]

View file

@ -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:

18
entrypoint.sh Normal file
View file

@ -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