Restaurar Backup en Ubuntu Server con Docker

 

Restaurar Backup en Ubuntu Server con Docker

Te explico paso a paso cómo restaurar tu backup completo:

🔍 Paso 1: Preparación para la Restauración

Verificar el backup:

bash
# Ver qué backups tienes
ls -la /home/tu_usuario/backups/

# Ver contenido del backup
tar -tzf backups/backup-completo-2024-01-15.tar.gz

Crear entorno de restauración:

bash
# Crear directorio temporal para extraer
mkdir ~/restauracion
cd ~/restauracion

# Extraer el backup completo
tar -xzf ../backups/backup-completo-2024-01-15.tar.gz

🗄️ Paso 2: Restaurar Base de Datos

Opción A: Si MySQL está en contenedor Docker

bash
# Copiar el archivo SQL al contenedor
docker cp backup-2024-01-15/mysql-backup.sql tu_contenedor_mysql:/tmp/backup.sql

# Ejecutar la restauración
docker exec -i tu_contenedor_mysql mysql -u root -pTuPassword < /tmp/backup.sql

# Limpiar
docker exec tu_contenedor_mysql rm /tmp/backup.sql

Opción B: Si MySQL está en el host

bash
# Restaurar directamente
mysql -u root -pTuPassword < backup-2024-01-15/mysql-backup.sql

Verificar la restauración:

bash
# Conectar a MySQL y ver bases de datos
docker exec -it tu_contenedor_mysql mysql -u root -pTuPassword -e "SHOW DATABASES;"

📁 Paso 3: Restaurar Archivos de Laravel

Detener el servicio web temporalmente:

bash
# Si usas Apache
sudo systemctl stop apache2

# O si usas Nginx
sudo systemctl stop nginx

Restaurar archivos:

bash
# Extraer el backup de Laravel
tar -xzf backup-2024-01-15/laravel-backup.tar.gz -C /

# O si prefieres copiar manualmente
cp -r backup-2024-01-15/var/www/tu_proyecto_laravel/* /var/www/tu_proyecto_laravel/

Permisos y propietario:

bash
# Ajustar permisos de Laravel
sudo chown -R www-data:www-data /var/www/tu_proyecto_laravel/storage
sudo chown -R www-data:www-data /var/www/tu_proyecto_laravel/bootstrap/cache
sudo chmod -R 775 /var/www/tu_proyecto_laravel/storage
sudo chmod -R 775 /var/www/tu_proyecto_laravel/bootstrap/cache

🐳 Paso 4: Restaurar Docker

Recrear contenedores desde docker-compose:

bash
# Si tienes docker-compose.yml en el backup
cp backup-2024-01-15/docker-compose.yml ./

# Recrear contenedores
docker-compose down
docker-compose up -d

Verificar contenedores:

bash
# Ver que todos los contenedores estén ejecutándose
docker ps

# Ver logs por si hay errores
docker logs tu_contenedor_laravel
docker logs tu_contenedor_mysql

🔧 Paso 5: Restaurar Configuraciones

Restaurar PHPMyAdmin:

bash
# Si necesitas restaurar PHPMyAdmin
tar -xzf backup-2024-01-15/phpmyadmin-backup.tar.gz -C /

Restaurar configuraciones PHP:

bash
# Si tienes configuraciones PHP personalizadas
sudo cp backup-2024-01-15/php.ini /etc/php/8.1/apache2/

Restaurar virtual hosts:

bash
# Restaurar configuraciones de sitios
sudo cp backup-2024-01-15/tu_sitio.conf /etc/apache2/sites-available/
sudo a2ensite tu_sitio.conf

🚀 Paso 6: Configuración Final de Laravel

Actualizar dependencias:

bash
cd /var/www/tu_proyecto_laravel

# Instalar composer dependencies
composer install --no-dev

# Generar key de Laravel
php artisan key:generate

# Limpiar cache
php artisan config:clear
php artisan cache:clear
php artisan view:clear

# Si usas migraciones
php artisan migrate --force

Reiniciar servicios:

bash
# Reiniciar servidor web
sudo systemctl restart apache2
# o
sudo systemctl restart nginx

# Reiniciar PHP-FPM si usas
sudo systemctl restart php8.1-fpm

✅ Paso 7: Verificación Final

Probar la aplicación:

bash
# Verificar que Laravel responde
curl -I http://localhost

# Verificar base de datos desde Laravel
cd /var/www/tu_proyecto_laravel
php artisan tinker
>>> \DB::connection()->getPdo();
>>> exit

Probar PHPMyAdmin:

bash
# Acceder a PHPMyAdmin desde navegador
# http://tuserver/phpmyadmin

🆘 Script de Restauración Automatizada

Crea restaurar-backup.sh:

bash
#!/bin/bash

echo "🔄 Iniciando proceso de restauración..."

# Parámetros
BACKUP_FILE="$1"
MYSQL_CONTAINER="tu_contenedor_mysql"
MYSQL_PASSWORD="TuPassword"
LARAVEL_PATH="/var/www/tu_proyecto_laravel"

if [ -z "$BACKUP_FILE" ]; then
    echo "❌ Uso: ./restaurar-backup.sh archivo_backup.tar.gz"
    exit 1
fi

if [ ! -f "$BACKUP_FILE" ]; then
    echo "❌ Archivo de backup no encontrado: $BACKUP_FILE"
    exit 1
fi

# Crear directorio temporal
RESTORE_DIR="./restauracion-temp"
mkdir -p $RESTORE_DIR

echo "📦 Extrayendo backup..."
tar -xzf $BACKUP_FILE -C $RESTORE_DIR

echo "🗄️ Restaurando base de datos..."
docker cp $RESTORE_DIR/*/mysql-backup.sql $MYSQL_CONTAINER:/tmp/restore.sql
docker exec -i $MYSQL_CONTAINER mysql -u root -p$MYSQL_PASSWORD < /tmp/restore.sql
docker exec $MYSQL_CONTAINER rm /tmp/restore.sql

echo "📁 Restaurando archivos Laravel..."
tar -xzf $RESTORE_DIR/*/laravel-backup.tar.gz -C /

echo "🔧 Ajustando permisios..."
sudo chown -R www-data:www-data $LARAVEL_PATH/storage
sudo chown -R www-data:www-data $LARAVEL_PATH/bootstrap/cache
sudo chmod -R 775 $LARAVEL_PATH/storage
sudo chmod -R 775 $LARAVEL_PATH/bootstrap/cache

echo "🐳 Reiniciando contenedores..."
docker-compose down
docker-compose up -d

echo "⚙️ Configurando Laravel..."
cd $LARAVEL_PATH
php artisan config:clear
php artisan cache:clear
php artisan view:clear

echo "🔄 Reiniciando servidor web..."
sudo systemctl restart apache2

# Limpiar
rm -rf $RESTORE_DIR

echo "✅ Restauración completada!"
echo "🌐 Verifica tu aplicación en: http://localhost"

Usar el script:

bash
chmod +x restaurar-backup.sh
./restaurar-backup.sh backups/backup-completo-2024-01-15.tar.gz

🚨 Consejos de Restauración:

  1. ✅ Siempre prueba en un entorno de desarrollo primero

  2. ✅ Haz backup ANTES de restaurar (por si algo sale mal)

  3. ✅ Verifica cada paso antes de continuar

  4. ✅ Ten a mano las contraseñas de base de datos

  5. ✅ Documenta cualquier error para futuras restauraciones

📋 Checklist Post-Restauración:

  • Base de datos restaurada y accesible

  • Laravel responde sin errores

  • PHPMyAdmin funciona correctamente

  • Contenedores Docker ejecutándose

  • Archivos subidos/media accesibles

  • Configuraciones aplicadas

  • SSL/certificados funcionando

  • Cron jobs ejecutándose

Comentarios

Entradas más populares de este blog

ejercicios-Crear Carpeta y Archivo de Texto en Ubuntu

Tutorial de Carpetas y Directorios en Ubuntu Linux

Claves SSH en Ubuntu Server - Guía Completa