225 líneas
5.9 KiB
Bash
Archivo Ejecutable
225 líneas
5.9 KiB
Bash
Archivo Ejecutable
#!/bin/bash
|
|
|
|
# Script de despliegue para CSF Web Admin Panel
|
|
|
|
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
|
|
|
|
# Función para logs
|
|
log() {
|
|
echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] $1${NC}"
|
|
}
|
|
|
|
warn() {
|
|
echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] WARNING: $1${NC}"
|
|
}
|
|
|
|
error() {
|
|
echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: $1${NC}"
|
|
}
|
|
|
|
info() {
|
|
echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')] INFO: $1${NC}"
|
|
}
|
|
|
|
# Banner
|
|
echo "=================================================="
|
|
echo " CSF Web Admin Panel - Deployment Script"
|
|
echo " ConfigServer Security & Firewall Management"
|
|
echo "=================================================="
|
|
echo
|
|
|
|
# Verificar requisitos previos
|
|
log "Verificando requisitos previos..."
|
|
|
|
# Verificar Docker
|
|
if ! command -v docker &> /dev/null; then
|
|
error "Docker no está instalado. Por favor instale Docker primero."
|
|
exit 1
|
|
fi
|
|
|
|
# Verificar Docker Compose
|
|
if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then
|
|
error "Docker Compose no está instalado. Por favor instale Docker Compose primero."
|
|
exit 1
|
|
fi
|
|
|
|
# Verificar que estamos en el directorio correcto
|
|
if [ ! -f "docker-compose.yml" ]; then
|
|
error "docker-compose.yml no encontrado. Ejecute este script desde el directorio raíz del proyecto."
|
|
exit 1
|
|
fi
|
|
|
|
# Verificar archivos CSF
|
|
if [ ! -d "scripts/csf" ]; then
|
|
error "Directorio scripts/csf no encontrado. Asegúrese de que los archivos CSF estén presentes."
|
|
exit 1
|
|
fi
|
|
|
|
log "Requisitos previos verificados ✓"
|
|
|
|
# Configurar variables de entorno
|
|
if [ ! -f ".env" ]; then
|
|
warn "Archivo .env no encontrado. Creando desde .env.example..."
|
|
if [ -f ".env.example" ]; then
|
|
cp .env.example .env
|
|
warn "Por favor edite el archivo .env con sus configuraciones antes de continuar."
|
|
read -p "¿Desea continuar con la configuración por defecto? (y/N): " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
info "Edite el archivo .env y ejecute el script nuevamente."
|
|
exit 0
|
|
fi
|
|
else
|
|
error "Archivo .env.example no encontrado."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Cargar variables de entorno
|
|
source .env
|
|
|
|
log "Variables de entorno cargadas ✓"
|
|
|
|
# Función para construir e iniciar servicios
|
|
deploy() {
|
|
log "Iniciando despliegue de CSF Web Admin Panel..."
|
|
|
|
# Detener servicios existentes
|
|
info "Deteniendo servicios existentes..."
|
|
docker-compose down --remove-orphans || true
|
|
|
|
# Construir imágenes
|
|
log "Construyendo imágenes Docker..."
|
|
docker-compose build --no-cache
|
|
|
|
# Iniciar servicios
|
|
log "Iniciando servicios..."
|
|
docker-compose up -d
|
|
|
|
# Esperar a que los servicios estén listos
|
|
log "Esperando a que los servicios estén listos..."
|
|
sleep 30
|
|
|
|
# Verificar estado de los servicios
|
|
info "Verificando estado de los servicios..."
|
|
docker-compose ps
|
|
|
|
# Verificar salud de los servicios
|
|
log "Verificando salud de los servicios..."
|
|
|
|
# Verificar CSF
|
|
if docker-compose exec -T csf /usr/local/csf/bin/csf --status > /dev/null 2>&1; then
|
|
log "CSF Firewall: SALUDABLE ✓"
|
|
else
|
|
warn "CSF Firewall: Posibles problemas"
|
|
fi
|
|
|
|
# Verificar Web Interface
|
|
if curl -f http://localhost:${WEB_PORT:-3000}/api/health > /dev/null 2>&1; then
|
|
log "Web Interface: SALUDABLE ✓"
|
|
else
|
|
warn "Web Interface: Posibles problemas"
|
|
fi
|
|
|
|
log "Despliegue completado!"
|
|
echo
|
|
info "Acceda al panel de administración en: http://localhost:${WEB_PORT:-3000}"
|
|
info "Usuario por defecto: ${ADMIN_USERNAME:-admin}"
|
|
info "Contraseña por defecto: ${ADMIN_PASSWORD:-admin123}"
|
|
echo
|
|
warn "IMPORTANTE: Cambie las credenciales por defecto antes de usar en producción."
|
|
}
|
|
|
|
# Función para mostrar logs
|
|
show_logs() {
|
|
echo "Mostrando logs de los servicios..."
|
|
docker-compose logs -f
|
|
}
|
|
|
|
# Función para detener servicios
|
|
stop() {
|
|
log "Deteniendo servicios..."
|
|
docker-compose down
|
|
log "Servicios detenidos ✓"
|
|
}
|
|
|
|
# Función para limpiar todo
|
|
clean() {
|
|
warn "Esta operación eliminará todos los contenedores, imágenes y volúmenes relacionados."
|
|
read -p "¿Está seguro? (y/N): " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
log "Limpiando sistema..."
|
|
docker-compose down -v --remove-orphans
|
|
docker system prune -f
|
|
docker volume prune -f
|
|
log "Limpieza completada ✓"
|
|
else
|
|
info "Operación cancelada."
|
|
fi
|
|
}
|
|
|
|
# Función para backup
|
|
backup() {
|
|
log "Creando backup de configuraciones..."
|
|
BACKUP_DIR="${BACKUP_DIR:-./backups}/$(date +%Y%m%d_%H%M%S)"
|
|
mkdir -p "$BACKUP_DIR"
|
|
|
|
# Backup de volúmenes Docker
|
|
docker run --rm -v csf_config:/source -v "$PWD/$BACKUP_DIR":/backup alpine tar czf /backup/csf_config.tar.gz -C /source .
|
|
docker run --rm -v csf_logs:/source -v "$PWD/$BACKUP_DIR":/backup alpine tar czf /backup/csf_logs.tar.gz -C /source .
|
|
|
|
# Backup de archivo .env
|
|
cp .env "$BACKUP_DIR/"
|
|
|
|
log "Backup creado en: $BACKUP_DIR ✓"
|
|
}
|
|
|
|
# Función de ayuda
|
|
show_help() {
|
|
echo "Uso: $0 [COMANDO]"
|
|
echo
|
|
echo "Comandos disponibles:"
|
|
echo " deploy - Desplegar CSF Web Admin Panel"
|
|
echo " logs - Mostrar logs de los servicios"
|
|
echo " stop - Detener servicios"
|
|
echo " clean - Limpiar contenedores y volúmenes"
|
|
echo " backup - Crear backup de configuraciones"
|
|
echo " help - Mostrar esta ayuda"
|
|
echo
|
|
echo "Si no se especifica comando, se ejecutará 'deploy'"
|
|
}
|
|
|
|
# Procesar argumentos
|
|
case "${1:-deploy}" in
|
|
deploy)
|
|
deploy
|
|
;;
|
|
logs)
|
|
show_logs
|
|
;;
|
|
stop)
|
|
stop
|
|
;;
|
|
clean)
|
|
clean
|
|
;;
|
|
backup)
|
|
backup
|
|
;;
|
|
help|--help|-h)
|
|
show_help
|
|
;;
|
|
*)
|
|
error "Comando desconocido: $1"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac |