=========================== Guía de Actualización =========================== Esta guía describe el proceso para actualizar NoxPanel a una nueva versión. El proceso es sencillo gracias a la arquitectura basada en Docker. .. contents:: En esta página :local: :depth: 2 Requisitos Previos =================== Antes de actualizar: 1. **Backup de la base de datos**: Siempre realiza un backup antes de actualizar 2. **Leer las notas de la versión**: Comprueba si hay cambios que requieran migración manual 3. **Verificar espacio en disco**: Asegúrate de tener suficiente espacio para las nuevas imágenes Backup Rápido -------------- .. code-block:: bash # Backup de PostgreSQL docker-compose exec db pg_dump -U noxpanel noxpanel > backup_$(date +%Y%m%d_%H%M%S).sql # Backup del archivo .env cp .env .env.backup.$(date +%Y%m%d) # Backup de volúmenes (opcional, para hosting) docker run --rm -v noxpanel_hosting_www:/data -v $(pwd):/backup \ alpine tar czf /backup/hosting_www_backup.tar.gz -C /data . Proceso de Actualización ========================= Paso 1: Obtener la última versión ----------------------------------- .. code-block:: bash cd /opt/data/NoxPanel git pull origin master Si has realizado cambios locales, usa ``git stash`` antes: .. code-block:: bash git stash git pull origin master git stash pop Paso 2: Actualizar imágenes Docker ------------------------------------ .. code-block:: bash # Descargar las nuevas imágenes docker-compose pull # Reconstruir servicios locales si es necesario docker-compose build --no-cache hosting-core Paso 3: Reiniciar servicios ----------------------------- .. code-block:: bash # Reiniciar todos los servicios docker-compose up -d Docker Compose se encarga de: - Detener los contenedores antiguos - Iniciar los nuevos con las imágenes actualizadas - Preservar los volúmenes de datos Paso 4: Ejecutar migraciones ------------------------------ .. code-block:: bash # Aplicar migraciones de base de datos docker-compose exec web python manage.py migrate .. important:: Las migraciones se ejecutan automáticamente si el ``entrypoint.sh`` está configurado para ello. Verifica los logs del contenedor ``web`` para confirmar que las migraciones se aplicaron correctamente: .. code-block:: bash docker-compose logs web | grep -i migrat Paso 5: Recolectar archivos estáticos --------------------------------------- .. code-block:: bash # Recolectar archivos estáticos (CSS, JS, imágenes) docker-compose exec web python manage.py collectstatic --noinput Paso 6: Verificar el despliegue --------------------------------- .. code-block:: bash # Verificar que todos los servicios están corriendo docker-compose ps # Ver logs de los servicios docker-compose logs --tail=50 web docker-compose logs --tail=50 celery_worker docker-compose logs --tail=50 celery_beat # Verificar salud de la base de datos docker-compose exec db pg_isready -U noxpanel # Verificar acceso al panel curl -sI https://panel.example.com/ | head -5 Script de Actualización Completo ================================== Para simplificar el proceso, puedes usar este script: .. code-block:: bash #!/bin/bash # upgrade.sh - Script de actualización de NoxPanel set -e echo "=== Actualizando NoxPanel ===" cd /opt/data/NoxPanel echo "[1/6] Creando backup de la base de datos..." docker-compose exec -T db pg_dump -U noxpanel noxpanel > \ backup_$(date +%Y%m%d_%H%M%S).sql echo "[2/6] Obteniendo última versión..." git pull origin master echo "[3/6] Actualizando imágenes Docker..." docker-compose pull echo "[4/6] Reiniciando servicios..." docker-compose up -d echo "[5/6] Ejecutando migraciones..." sleep 10 # Esperar a que la BD esté lista docker-compose exec -T web python manage.py migrate echo "[6/6] Recolectando archivos estáticos..." docker-compose exec -T web python manage.py collectstatic --noinput echo "=== Actualización completada ===" docker-compose ps Guardar como ``upgrade.sh`` y ejecutar con: .. code-block:: bash chmod +x upgrade.sh ./upgrade.sh Actualización del Motor de Hosting ===================================== El contenedor ``hosting-core`` contiene el motor de hosting y sus servicios (Postfix, Dovecot, BIND, Pure-FTPd, Apache). Al actualizar la imagen: .. code-block:: bash docker-compose build --no-cache hosting-core docker-compose up -d hosting-core Los datos del motor de hosting se preservan en los volúmenes Docker: - ``hosting_data`` — Datos del motor de hosting - ``hosting_install`` — Instalación del motor de hosting - ``hosting_mysql`` — Base de datos MySQL del motor de hosting - ``hosting_www`` — Archivos web de los clientes - ``hosting_vmail`` — Buzones de email Rollback ========= Si algo sale mal durante la actualización: .. code-block:: bash # 1. Restaurar el código anterior git checkout # 2. Restaurar la base de datos docker-compose exec -T db psql -U noxpanel noxpanel < backup_YYYYMMDD_HHMMSS.sql # 3. Reiniciar servicios con la versión anterior docker-compose up -d Solución de Problemas Post-Actualización ========================================== Migraciones fallidas --------------------- .. code-block:: bash # Ver estado de migraciones docker-compose exec web python manage.py showmigrations # Forzar una migración específica docker-compose exec web python manage.py migrate hosting 0006 Cache desactualizado --------------------- .. code-block:: bash # Limpiar cache docker-compose exec web python manage.py shell -c \ "from django.core.cache import cache; cache.clear()" Permisos de archivos --------------------- .. code-block:: bash # Corregir permisos de archivos estáticos docker-compose exec web chown -R www-data:www-data /app/staticfiles docker-compose exec web chown -R www-data:www-data /app/media