backup_gogs.sh 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #!/bin/bash
  2. # --- CONFIGURACIÓN ---
  3. NAMESPACE="gogs"
  4. POD_NAME=$(kubectl get pods -n "$NAMESPACE" -l app=gogs-app -o jsonpath='{.items[0].metadata.name}')
  5. CONTAINER_BACKUP_DIR="/data"
  6. LOCAL_DEST_DIR="/mnt/Family/Gogs"
  7. # Crear directorio local si no existe
  8. mkdir -p "$LOCAL_DEST_DIR"
  9. # 1. Ejecutar el backup dentro del contenedor (lo guarda temporalmente en el PVC)
  10. echo "Generando backup de Gogs dentro del contenedor..."
  11. kubectl exec -n "$NAMESPACE" "$POD_NAME" -- \
  12. bash -c "USER=git HOME=/data /app/gogs/gogs backup --target $CONTAINER_BACKUP_DIR"
  13. # 2. Buscar el nombre del archivo ZIP recién creado dentro del contenedor
  14. ZIP_FILE=$(kubectl exec -n "$NAMESPACE" "$POD_NAME" -- \
  15. bash -c "ls -t $CONTAINER_BACKUP_DIR/gogs-backup-*.zip | head -n 1")
  16. # Validar si se encontró el archivo
  17. if [ -z "$ZIP_FILE" ]; then
  18. echo "Error: No se encontró ningún archivo de respaldo en el contenedor."
  19. exit 1
  20. fi
  21. ZIP_NAME=$(basename "$ZIP_FILE")
  22. echo "Archivo encontrado: $ZIP_NAME"
  23. # 3. Descargar el archivo directamente a /mnt/Family
  24. echo "Moviendo archivo a $LOCAL_DEST_DIR..."
  25. kubectl cp "$NAMESPACE/$POD_NAME:$ZIP_FILE" "$LOCAL_DEST_DIR/$ZIP_NAME"
  26. # 4. Limpiar el archivo temporal dentro del volumen persistente del contenedor
  27. echo "Limpiando residuo del contenedor..."
  28. kubectl exec -n "$NAMESPACE" "$POD_NAME" -- rm "$ZIP_FILE"
  29. echo "¡Respaldo completado con éxito en $LOCAL_DEST_DIR/$ZIP_NAME!"