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.

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

# 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

cd /opt/data/NoxPanel
git pull origin master

Si has realizado cambios locales, usa git stash antes:

git stash
git pull origin master
git stash pop

Paso 2: Actualizar imágenes Docker

# 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

# 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

# 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:

docker-compose logs web | grep -i migrat

Paso 5: Recolectar archivos estáticos

# Recolectar archivos estáticos (CSS, JS, imágenes)
docker-compose exec web python manage.py collectstatic --noinput

Paso 6: Verificar el despliegue

# 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:

#!/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:

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:

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:

# 1. Restaurar el código anterior
git checkout <version_anterior>

# 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

# 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

# Limpiar cache
docker-compose exec web python manage.py shell -c \
  "from django.core.cache import cache; cache.clear()"

Permisos de archivos

# 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