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:
parent
2506207d2e
commit
0a2372cb5c
3 changed files with 37 additions and 3 deletions
|
|
@ -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"]
|
||||
|
|
|
|||
|
|
@ -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
18
entrypoint.sh
Normal 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
|
||||
Loading…
Reference in a new issue