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 __main__.py .
|
||||||
COPY app/ ./app/
|
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)
|
# Daten- und Log-Verzeichnisse (beschreibbar fuer UID 1000)
|
||||||
RUN mkdir -p /opt/video-konverter/data /opt/video-konverter/logs \
|
RUN mkdir -p /opt/video-konverter/data /opt/video-konverter/logs \
|
||||||
&& chmod 777 /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
|
# Konfiguration und Daten als Volumes
|
||||||
VOLUME ["/opt/video-konverter/app/cfg", "/opt/video-konverter/data", "/opt/video-konverter/logs"]
|
VOLUME ["/opt/video-konverter/app/cfg", "/opt/video-konverter/data", "/opt/video-konverter/logs"]
|
||||||
|
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
|
|
||||||
CMD ["python3", "__main__.py"]
|
ENTRYPOINT ["./entrypoint.sh"]
|
||||||
|
|
|
||||||
|
|
@ -167,8 +167,18 @@ class Config:
|
||||||
self._save_yaml(settings_file, self.settings)
|
self._save_yaml(settings_file, self.settings)
|
||||||
|
|
||||||
def _load_presets(self) -> None:
|
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"
|
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():
|
if presets_file.exists():
|
||||||
try:
|
try:
|
||||||
with open(presets_file, "r", encoding="utf-8") as f:
|
with open(presets_file, "r", encoding="utf-8") as f:
|
||||||
|
|
@ -178,7 +188,6 @@ class Config:
|
||||||
logging.error(f"Presets lesen fehlgeschlagen: {e}")
|
logging.error(f"Presets lesen fehlgeschlagen: {e}")
|
||||||
self.presets = {}
|
self.presets = {}
|
||||||
else:
|
else:
|
||||||
logging.warning("Keine presets.yaml gefunden - verwende leere Presets")
|
|
||||||
self.presets = {}
|
self.presets = {}
|
||||||
|
|
||||||
def _apply_env_overrides(self) -> None:
|
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