225
deploy.sh
Archivo ejecutable
225
deploy.sh
Archivo ejecutable
@@ -0,0 +1,225 @@
|
||||
#!/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
|
||||
Referencia en una nueva incidencia
Block a user