Hosting Equipo Avantys 5 min

Actualizar VPS: Sistema Operativo y Software

Guía para actualizar tu VPS de forma segura. Actualizaciones de seguridad, upgrade de Ubuntu, PHP, MySQL, Node.js y cómo hacer rollback.

// Compartir

Actualizar VPS: Sistema Operativo y Software
Actualizar VPS - sistema operativo y software

Un VPS desactualizado es un VPS vulnerable. Pero actualizar sin cuidado puede romper tu sitio. Esta guía te enseña a actualizar de forma segura.

Tipos de actualizaciones

Tipos de actualizaciones VPS
TipoRiesgoFrecuenciaEjemplo
SeguridadBajoSemanal/AutomáticoParches CVE
Paquetes menoresBajoMensualnginx 1.24.0 → 1.24.1
Paquetes mayoresMedioCuando necesarioPHP 8.2 → 8.3
Sistema operativoAltoCada 2-4 añosUbuntu 22.04 → 24.04

Antes de cualquier actualización

1. Hacer backup completo

# Backup de bases de datos
mysqldump --all-databases > /backups/all_db_$(date +%Y%m%d).sql

# Backup de archivos web
tar -czvf /backups/www_$(date +%Y%m%d).tar.gz /var/www/

# Backup de configuraciones
tar -czvf /backups/etc_$(date +%Y%m%d).tar.gz /etc/nginx /etc/php /etc/mysql

2. Documentar estado actual

# Versiones actuales
cat /etc/os-release
php -v
mysql --version
nginx -v
node -v 2>/dev/null

# Guardar lista de paquetes
dpkg --get-selections > /backups/packages_$(date +%Y%m%d).txt

3. Planificar ventana de mantenimiento

  • Elige horario de bajo tráfico
  • Avisa a usuarios si es necesario
  • Ten plan de rollback preparado

Actualizaciones de seguridad (bajo riesgo)

Actualización manual

# Actualizar lista de paquetes
sudo apt update

# Ver actualizaciones disponibles
apt list --upgradable

# Instalar solo actualizaciones de seguridad
sudo apt upgrade -y

# Limpiar paquetes obsoletos
sudo apt autoremove -y

Actualizaciones automáticas

# Instalar unattended-upgrades
sudo apt install unattended-upgrades -y

# Configurar
sudo dpkg-reconfigure -plow unattended-upgrades

# Verificar configuración
cat /etc/apt/apt.conf.d/20auto-upgrades
# /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "7";

Solo seguridad (más conservador)

# /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
    // "${distro_id}:${distro_codename}-updates";  // Comentado
};

// Reiniciar automáticamente si es necesario (opcional)
Unattended-Upgrade::Automatic-Reboot "false";

// Notificar por email
Unattended-Upgrade::Mail "[email protected]";

Actualizar paquetes específicos

Proceso de actualización VPS

PHP (versión menor)

# Ver versión actual
php -v

# Actualizar
sudo apt update
sudo apt upgrade php8.2-* -y

# Reiniciar PHP-FPM
sudo systemctl restart php8.2-fpm

# Verificar
php -v

PHP (versión mayor: 8.2 → 8.3)

# Añadir repositorio
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

# Instalar nueva versión
sudo apt install php8.3-fpm php8.3-cli php8.3-common \
    php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring \
    php8.3-xml php8.3-zip php8.3-intl php8.3-bcmath -y

# Copiar configuración
sudo cp /etc/php/8.2/fpm/pool.d/www.conf /etc/php/8.3/fpm/pool.d/
sudo cp /etc/php/8.2/fpm/php.ini /etc/php/8.3/fpm/

# Actualizar Nginx
sudo sed -i 's/php8.2-fpm/php8.3-fpm/g' /etc/nginx/sites-available/*

# Cambiar
sudo systemctl stop php8.2-fpm
sudo systemctl start php8.3-fpm
sudo systemctl reload nginx

# Verificar
php -v

MySQL/MariaDB

# Ver versión
mysql --version

# Actualizar
sudo apt update
sudo apt upgrade mariadb-server -y

# Reiniciar
sudo systemctl restart mariadb

# Ejecutar upgrade de tablas
sudo mysql_upgrade -u root -p

Nginx

# Ver versión
nginx -v

# Actualizar
sudo apt update
sudo apt upgrade nginx -y

# Verificar config
sudo nginx -t

# Reiniciar
sudo systemctl restart nginx

Node.js (con NVM)

# Ver versión actual
node -v

# Instalar nueva versión
nvm install 22

# Usar nueva versión
nvm use 22
nvm alias default 22

# Reinstalar paquetes globales
nvm reinstall-packages 20

# Verificar
node -v

Upgrade de Ubuntu (versión mayor)

Preparación

# 1. Backup COMPLETO
# 2. Actualizar sistema actual primero
sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade -y
sudo apt autoremove -y

# 3. Verificar que no hay problemas
sudo apt --fix-broken install

# 4. Reiniciar
sudo reboot

Ejecutar upgrade

# Instalar herramienta de upgrade
sudo apt install update-manager-core -y

# Verificar nueva versión disponible
sudo do-release-upgrade -c

# Ejecutar upgrade
sudo do-release-upgrade

# Seguir las instrucciones interactivas
# - Revisar cambios en configuración
# - Generalmente elegir "keep local version"

Post-upgrade

# Verificar versión
cat /etc/os-release

# Actualizar paquetes
sudo apt update
sudo apt upgrade -y

# Verificar servicios
systemctl status nginx
systemctl status php*-fpm
systemctl status mariadb

# Verificar sitios web
curl -I https://tudominio.com

Si algo falla

# Restaurar desde backup
# O usar snapshot del VPS si lo creaste

# Si es problema de paquetes
sudo apt --fix-broken install
sudo dpkg --configure -a

# Si no arranca un servicio, ver logs
journalctl -u nginx -n 50
journalctl -u php8.2-fpm -n 50

Actualizar WordPress

# Con WP-CLI
cd /var/www/wordpress

# Backup primero
wp db export backup.sql --path=/var/www/wordpress --allow-root

# Actualizar core
wp core update --allow-root

# Actualizar plugins
wp plugin update --all --allow-root

# Actualizar temas
wp theme update --all --allow-root

# Verificar
wp core version --allow-root

Rollback si algo falla

Restaurar paquete específico

# Ver versiones disponibles
apt policy nginx

# Instalar versión específica
sudo apt install nginx=1.24.0-1ubuntu1 -y

# Bloquear versión
sudo apt-mark hold nginx

# Desbloquear después
sudo apt-mark unhold nginx

Restaurar desde backup

# Restaurar base de datos
mysql < /backups/all_db_20260226.sql

# Restaurar archivos
tar -xzvf /backups/www_20260226.tar.gz -C /

# Restaurar configuraciones
tar -xzvf /backups/etc_20260226.tar.gz -C /

# Reiniciar servicios
sudo systemctl restart nginx php8.2-fpm mariadb

Restaurar snapshot (si disponible)

La mayoría de proveedores VPS permiten crear snapshots. Es la forma más rápida de rollback completo.

Script de actualización segura

#!/bin/bash
# /root/scripts/safe-update.sh

set -e

DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups/pre-update-$DATE"

echo "=== Actualización segura VPS ==="
echo "Fecha: $DATE"
echo ""

# Crear directorio de backup
mkdir -p $BACKUP_DIR

# Backup de BD
echo "→ Backup de bases de datos..."
mysqldump --all-databases > $BACKUP_DIR/databases.sql

# Backup de /var/www
echo "→ Backup de archivos web..."
tar -czf $BACKUP_DIR/www.tar.gz /var/www/ 2>/dev/null

# Backup de configs
echo "→ Backup de configuraciones..."
tar -czf $BACKUP_DIR/configs.tar.gz /etc/nginx /etc/php /etc/mysql 2>/dev/null

# Guardar versiones actuales
echo "→ Guardando versiones actuales..."
php -v > $BACKUP_DIR/versions.txt 2>&1
mysql --version >> $BACKUP_DIR/versions.txt 2>&1
nginx -v >> $BACKUP_DIR/versions.txt 2>&1

# Actualizar
echo "→ Actualizando paquetes..."
apt update
apt upgrade -y

# Limpiar
apt autoremove -y

# Verificar servicios
echo "→ Verificando servicios..."
systemctl is-active nginx || systemctl restart nginx
systemctl is-active php8.2-fpm || systemctl restart php8.2-fpm
systemctl is-active mariadb || systemctl restart mariadb

echo ""
echo "=== Actualización completada ==="
echo "Backup guardado en: $BACKUP_DIR"
echo ""
echo "Si hay problemas, restaurar con:"
echo "  mysql < $BACKUP_DIR/databases.sql"
echo "  tar -xzf $BACKUP_DIR/www.tar.gz -C /"

Calendario de actualizaciones recomendado

FrecuenciaAcción
DiarioActualizaciones automáticas de seguridad
SemanalRevisar logs de actualizaciones
Mensualapt upgrade manual + verificación
TrimestralRevisar versiones de PHP, MySQL
AnualEvaluar upgrade de Ubuntu

Preguntas frecuentes

¿Es seguro activar actualizaciones automáticas?

Para actualizaciones de seguridad, sí. Configura unattended-upgrades solo para security updates. Evita actualizaciones automáticas de versiones mayores.

¿Debo actualizar Ubuntu inmediatamente cuando sale nueva versión?

No. Espera 3-6 meses para que se estabilice. Las versiones LTS tienen soporte 5 años, no hay prisa. Actualiza cuando haya beneficio claro o el soporte expire.

¿Puedo actualizar PHP sin downtime?

Versiones menores sí (reinicio de FPM es segundos). Versiones mayores requieren más tiempo para verificar compatibilidad. Hazlo en horario de bajo tráfico.

¿Qué hago si un sitio deja de funcionar tras actualizar?

1. Revisa logs de error (nginx, PHP). 2. Verifica compatibilidad de versiones. 3. Restaura desde backup si es urgente. 4. Corrige el problema con el sitio ya funcionando.

¿Necesito reiniciar el VPS después de actualizar?

Solo si se actualiza el kernel (verás 'reboot required'). Para la mayoría de actualizaciones, reiniciar servicios es suficiente.

Nuestra recomendación

Mínimo indispensable:

  • Actualizaciones de seguridad automáticas
  • Backup antes de cualquier cambio manual
  • Documentar versiones actuales

Buenas prácticas:

  • Script de actualización con backup incluido
  • Ventana de mantenimiento planificada
  • Probar en entorno de staging primero

¿No quieres gestionar actualizaciones? La administración gestionada de Avantys incluye actualizaciones de seguridad y mantenimiento del servidor.


Conclusión

Actualizar tu VPS es necesario para seguridad y rendimiento, pero hazlo con cuidado. Backup primero, actualiza después, y ten siempre un plan de rollback.

Las actualizaciones de seguridad pueden ser automáticas; las mayores requieren planificación.

¿Necesitas un VPS mantenido? Explora los VPS de Avantys con soporte técnico incluido.


¿Quieres que lo hagamos por ti?

En Avantys gestionamos tu web, hosting y crecimiento digital de punta a punta. Tú a lo importante.

Hablar con Avantys
// Boletín

Suscríbete al boletín

Guías nuevas, sin spam. Cancela cuando quieras.