#!/usr/bin/env bash set -euo pipefail # Script helper: inspecciona el montaje de config y (opcionalmente) elimina y regenera # Uso: # bash scripts/fix-config-volume.sh # inspecciona y recrea config-generator # bash scripts/fix-config-volume.sh --force-delete # detiene stack, borra volumen libretime_config y regenera ROOT_DIR=$(cd "$(dirname "$0")/.." && pwd) cd "$ROOT_DIR" echo "== comprobar que docker existe ==" if ! command -v docker >/dev/null 2>&1; then echo "ERROR: docker no encontrado en PATH. Instala/abre Docker Desktop y vuelve a intentarlo." >&2 exit 1 fi echo "== docker compose ps ==" docker compose -f docker-compose.easypanel.yml ps || true CID=$(docker compose -f docker-compose.easypanel.yml ps -q api || true) echo "API CID: ${CID:-}" if [ -n "${CID:-}" ]; then echo "== mounts del contenedor api ==" docker inspect --format '{{json .Mounts}}' "$CID" | jq . || docker inspect --format '{{json .Mounts}}' "$CID" || true echo "== contenido que ve la API en /etc/libretime ==" docker compose -f docker-compose.easypanel.yml exec api sh -c 'ls -la /etc/libretime || true; sed -n "1,200p" /etc/libretime/config.yml || true' || true else echo "Contenedor API no está en ejecución o no se encontró CID. Continuamos con otras comprobaciones." fi echo "== archivo local ./config.local.yml (si existe) ==" if [ -f ./config.local.yml ]; then sed -n '1,200p' ./config.local.yml || true else echo "no existe ./config.local.yml" fi echo "== inspeccionar volumen libretime_config ==" docker run --rm -v libretime_config:/tmp alpine sh -c 'ls -la /tmp || true; sed -n "1,200p" /tmp/config.yml || true' || true echo "== recrear config-generator (no-deps) para intentar generar config.yml ==" docker compose -f docker-compose.easypanel.yml up -d --no-deps --force-recreate config-generator || true sleep 2 docker compose -f docker-compose.easypanel.yml logs --tail 200 config-generator || true echo "== volver a inspeccionar volumen libretime_config ==" docker run --rm -v libretime_config:/tmp alpine sh -c 'ls -la /tmp || true; sed -n "1,200p" /tmp/config.yml || true' || true if [ "${1:-}" = "--force-delete" ]; then echo "\n== OPCIÓN: eliminar y regenerar el volumen libretime_config (se pide confirmación) ==" read -p "¿Deseas detener el stack y borrar el volumen libretime_config? (y/N): " confirm if [ "$confirm" = "y" ]; then echo "Deteniendo stack..." docker compose -f docker-compose.easypanel.yml down || true mkdir -p backups echo "Haciendo backup (si existe) del config del volumen a ./backups/config.yml.bak" docker run --rm -v libretime_config:/tmp -v "$(pwd)/backups":/backup alpine sh -c 'cp -a /tmp/config.yml /backup/config.yml.bak || true; ls -la /tmp || true' || true echo "Eliminando volumen libretime_config..." docker volume rm libretime_config || true echo "Regenerando config-generator para crear un nuevo config.yml en el volumen limpio..." docker compose -f docker-compose.easypanel.yml up -d --no-deps --force-recreate config-generator || true sleep 2 docker compose -f docker-compose.easypanel.yml logs --tail 200 config-generator || true echo "Contenido del nuevo volumen:" docker run --rm -v libretime_config:/tmp alpine sh -c 'ls -la /tmp; sed -n "1,200p" /tmp/config.yml || true' || true echo "Listo. Reinicia la API con: docker compose -f docker-compose.easypanel.yml up -d --no-deps --force-recreate api" else echo "Abandonado: no se eliminará el volumen." fi fi echo "== fin del script =="