#!/usr/bin/env bash set -e echo "🚀 Inicializando servidor CalDAV/CardDAV con Radicale + InfCloud" echo "================================================================" # Colores para output GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Función para mostrar mensajes info() { echo -e "${BLUE}ℹ️ $1${NC}"; } success() { echo -e "${GREEN}✅ $1${NC}"; } warning() { echo -e "${YELLOW}⚠️ $1${NC}"; } error() { echo -e "${RED}❌ $1${NC}"; } # Verificar dependencias info "Verificando dependencias..." # Verificar Docker if ! command -v docker >/dev/null 2>&1; then error "Docker no encontrado. Instálalo primero: https://docs.docker.com/get-docker/" exit 1 fi # Verificar Docker Compose if ! docker compose version >/dev/null 2>&1; then error "Docker Compose no encontrado o no funciona" exit 1 fi # Verificar htpasswd if ! command -v htpasswd >/dev/null 2>&1; then warning "htpasswd no encontrado. Instalando apache2-utils..." if command -v apt >/dev/null 2>&1; then sudo apt update && sudo apt install -y apache2-utils elif command -v yum >/dev/null 2>&1; then sudo yum install -y httpd-tools elif command -v pacman >/dev/null 2>&1; then sudo pacman -S apache-tools else error "No se pudo instalar htpasswd automáticamente" echo "Instala manualmente: apache2-utils (Ubuntu/Debian) o httpd-tools (RHEL/CentOS)" exit 1 fi fi success "Dependencias verificadas" # 1. Crear estructura de directorios info "Creando estructura de directorios..." mkdir -p data config infcloud_config success "Directorios creados" # 2. Copiar configuración de Radicale info "Configurando Radicale..." if [ ! -f "config/config" ]; then cp config_example/config config/config success "Configuración de Radicale creada" else warning "Ya existe config/config, no se sobrescribirá" fi # 3. Copiar configuración de InfCloud info "Configurando InfCloud..." if [ ! -f "infcloud_config/config.js" ]; then cp infcloud_config_example/config.js infcloud_config/config.js success "Configuración de InfCloud creada" else warning "Ya existe infcloud_config/config.js, no se sobrescribirá" fi # 4. Crear archivo de usuarios vacío if [ ! -f "config/users" ]; then touch config/users success "Archivo de usuarios creado" else warning "Ya existe config/users" fi # 5. Crear usuario administrador info "Configurando usuario administrador..." read -p "¿Quieres crear un usuario admin ahora? (s/n): " create_admin if [[ "$create_admin" =~ ^[sS]$ ]]; then htpasswd -B config/users admin success "Usuario admin creado" else info "Puedes crear el usuario admin más tarde con: ./create_admin.sh" fi # 6. Verificar y parar servicios existentes si están corriendo info "Verificando servicios existentes..." if docker ps --format 'table {{.Names}}' | grep -E 'radicale|infcloud' >/dev/null 2>&1; then warning "Servicios ya corriendo. Reiniciando..." docker compose down fi # 7. Levantar servicios info "Levantando servicios..." docker compose up -d # Esperar a que los servicios se inicien info "Esperando a que los servicios se inicien..." sleep 5 # 8. Verificar que los servicios están corriendo info "Verificando servicios..." # Verificar contenedores if docker ps --format 'table {{.Names}}\t{{.Status}}' | grep -E 'radicale|infcloud' | grep -q 'Up'; then success "Contenedores corriendo correctamente" else error "Problema con los contenedores" docker ps --format 'table {{.Names}}\t{{.Status}}' | grep -E 'radicale|infcloud' exit 1 fi # 9. Verificar conectividad info "Verificando conectividad..." # Verificar Radicale if curl -s -f http://localhost:5232/ >/dev/null 2>&1; then success "Radicale responde en http://localhost:5232" else error "Radicale no responde" echo "Logs de Radicale:" docker logs radicale --tail 10 fi # Verificar InfCloud if curl -s -f http://localhost:8090/ >/dev/null 2>&1; then success "InfCloud responde en http://localhost:8090" else warning "InfCloud puede estar iniciándose aún..." echo "Logs de InfCloud:" docker logs infcloud --tail 10 fi echo "" echo "🎉 ¡Inicialización completada!" echo "=============================================" echo "" echo "📱 Servicios disponibles:" echo " • Radicale (servidor): http://localhost:5232" echo " • InfCloud (cliente web): http://localhost:8090" echo "" echo "🔑 Credenciales:" if [[ "$create_admin" =~ ^[sS]$ ]]; then echo " • Usuario: admin" echo " • Contraseña: (la que configuraste)" else echo " • Ejecuta: ./create_admin.sh para crear usuario admin" fi echo "" echo "📚 Gestión:" echo " • Usuarios: ./radicale_users.sh" echo " • Parar: docker compose down" echo " • Reiniciar: docker compose restart" echo "" echo "🧪 Prueba de conexión:" echo " • Abre http://localhost:8090 en tu navegador" echo " • Usa las credenciales configuradas" echo "" # Mostrar estado final info "Estado actual de los servicios:" docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}' | grep -E 'NAMES|radicale|infcloud' echo "" success "Setup completado exitosamente 🚀"