#!/bin/bash # Script interactivo para crear imagen Docker y subirla al registry # Uso: ./build-and-push.sh set -e # Colores para output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Configuración por defecto REGISTRY_URL="10.10.4.3:5000" IMAGE_NAME="condominio_ibiza" DOCKERFILE_PATH="docker/Dockerfile" PROJECT_DIR="/var/www/html/ibiza" # Función para imprimir mensajes print_info() { echo -e "${BLUE}ℹ️ $1${NC}" } print_success() { echo -e "${GREEN}✅ $1${NC}" } print_warning() { echo -e "${YELLOW}⚠️ $1${NC}" } print_error() { echo -e "${RED}❌ $1${NC}" } # Verificar que estamos en el directorio correcto if [ ! -f "$DOCKERFILE_PATH" ]; then print_error "No se encontró el Dockerfile en $DOCKERFILE_PATH" print_info "Asegúrate de ejecutar este script desde el directorio raíz del proyecto" exit 1 fi # Mostrar banner echo "" echo "╔════════════════════════════════════════════════════════╗" echo "║ 🐳 BUILD & PUSH - Condominio Ibiza Docker ║" echo "╚════════════════════════════════════════════════════════╝" echo "" # Paso 1: Preguntar versión/tag print_info "Paso 1: Versión de la imagen" echo "" read -p "Ingresa la versión/tag (ej: v2.1, latest, o deja en blanco para 'latest'): " VERSION if [ -z "$VERSION" ]; then VERSION="latest" fi print_info "Versión seleccionada: $VERSION" echo "" # Paso 2: Confirmar registry print_info "Paso 2: Configuración del Registry" echo "" read -p "Registry URL [$REGISTRY_URL]: " INPUT_REGISTRY REGISTRY_URL=${INPUT_REGISTRY:-$REGISTRY_URL} print_info "Registry: $REGISTRY_URL" echo "" # Paso 3: Seleccionar modo de build print_info "Paso 3: Modo de construcción" echo "" echo "Selecciona el modo de build:" echo " 1) Con caché (más rápido, reutiliza capas anteriores)" echo " 2) Sin caché (--no-cache, fuerza reconstrucción completa)" echo "" read -p "Opción [1]: " BUILD_OPTION USE_CACHE="s" if [ "$BUILD_OPTION" == "2" ]; then USE_CACHE="n" print_info "Modo seleccionado: Sin caché (build completo)" else print_info "Modo seleccionado: Con caché (build rápido)" fi echo "" # Mostrar resumen antes de comenzar echo "" echo "╔════════════════════════════════════════════════════════╗" echo "║ 📋 RESUMEN DE OPERACIÓN ║" echo "╠════════════════════════════════════════════════════════╣" echo "║ Imagen: $IMAGE_NAME:$VERSION" echo "║ Registry: $REGISTRY_URL" echo "║ Dockerfile: $DOCKERFILE_PATH" if [ "$USE_CACHE" == "n" ]; then echo "║ Modo: Sin caché (build completo)" else echo "║ Modo: Con caché (build rápido)" fi echo "╚════════════════════════════════════════════════════════╝" echo "" read -p "¿Deseas continuar? (s/n): " CONFIRM if [[ $CONFIRM != "s" && $CONFIRM != "S" ]]; then print_warning "Operación cancelada por el usuario" exit 0 fi echo "" print_info "🚀 Iniciando proceso..." echo "" # Paso 4: Build de la imagen print_info "Paso 4: Construyendo imagen Docker..." if [ "$USE_CACHE" == "n" ]; then echo " Comando: docker build --no-cache -t $IMAGE_NAME:$VERSION -f $DOCKERFILE_PATH ." echo "" if docker build --no-cache -t "$IMAGE_NAME:$VERSION" -f "$DOCKERFILE_PATH" .; then print_success "Imagen construida exitosamente (sin caché): $IMAGE_NAME:$VERSION" else print_error "Error al construir la imagen" exit 1 fi else echo " Comando: docker build -t $IMAGE_NAME:$VERSION -f $DOCKERFILE_PATH ." echo "" if docker build -t "$IMAGE_NAME:$VERSION" -f "$DOCKERFILE_PATH" .; then print_success "Imagen construida exitosamente: $IMAGE_NAME:$VERSION" else print_error "Error al construir la imagen" exit 1 fi fi echo "" # Paso 5: Taggear para el registry print_info "Paso 5: Taggeando imagen para registry..." echo " Comando: docker tag $IMAGE_NAME:$VERSION $REGISTRY_URL/$IMAGE_NAME:$VERSION" echo "" if docker tag "$IMAGE_NAME:$VERSION" "$REGISTRY_URL/$IMAGE_NAME:$VERSION"; then print_success "Imagen taggeada: $REGISTRY_URL/$IMAGE_NAME:$VERSION" else print_error "Error al taggear la imagen" exit 1 fi echo "" # Paso 6: Subir al registry read -p "¿Deseas subir la imagen al registry ahora? (s/n): " PUSH_CONFIRM if [[ $PUSH_CONFIRM == "s" || $PUSH_CONFIRM == "S" ]]; then print_info "Paso 6: Subiendo imagen al registry..." echo " Comando: docker push $REGISTRY_URL/$IMAGE_NAME:$VERSION" echo "" if docker push "$REGISTRY_URL/$IMAGE_NAME:$VERSION"; then print_success "Imagen subida exitosamente al registry" else print_error "Error al subir la imagen al registry" print_warning "Verifica que el registry esté accesible en $REGISTRY_URL" print_info "Puedes intentar subir manualmente con: docker push $REGISTRY_URL/$IMAGE_NAME:$VERSION" exit 1 fi else print_warning "Imagen NO subida al registry" print_info "Puedes subirla manualmente después con:" echo " docker push $REGISTRY_URL/$IMAGE_NAME:$VERSION" fi echo "" # Paso 7: Limpiar imágenes locales (opcional) read -p "¿Deseas eliminar las imágenes locales para liberar espacio? (s/n): " CLEANUP_CONFIRM if [[ $CLEANUP_CONFIRM == "s" || $CLEANUP_CONFIRM == "S" ]]; then print_info "Limpiando imágenes locales..." docker rmi "$IMAGE_NAME:$VERSION" "$REGISTRY_URL/$IMAGE_NAME:$VERSION" 2>/dev/null || true print_success "Imágenes locales eliminadas" fi echo "" echo "╔════════════════════════════════════════════════════════╗" echo "║ ✅ PROCESO COMPLETADO ║" echo "╠════════════════════════════════════════════════════════╣" echo "║ Imagen: $REGISTRY_URL/$IMAGE_NAME:$VERSION" echo "╚════════════════════════════════════════════════════════╝" echo "" print_info "Para usar esta imagen en ZimaOS/CasaOS:" echo "" echo "1. Actualiza tu archivo ibiza.yaml:" echo " image: $REGISTRY_URL/$IMAGE_NAME:$VERSION" echo "" echo "2. Reinicia el contenedor en ZimaOS/CasaOS" echo "" echo "3. Verifica los logs:" echo " docker logs condominio_ibiza" echo "" print_success "¡Listo!" echo ""