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:
Backup de la base de datos: Siempre realiza un backup antes de actualizar
Leer las notas de la versión: Comprueba si hay cambios que requieran migración manual
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 hostinghosting_install— Instalación del motor de hostinghosting_mysql— Base de datos MySQL del motor de hostinghosting_www— Archivos web de los clienteshosting_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