Pasar un sitio PHP/MySQL a un VPS Linux Infrawire le da recursos dedicados y control total de la pila. La clave de una migración sin sobresaltos es preparar todo en el nuevo servidor, probarlo antes de tocar el DNS y solo entonces cambiar el tráfico. Esta guía sigue ese orden.
📋 Requisitos previos
- Un VPS Linux con Ubuntu 24.04 o Debian 12 (la IP y la contraseña de root están en su área de cliente)
- Acceso al hosting compartido (gestor de archivos, FTP/SSH y una herramienta de base de datos como phpMyAdmin)
- Acceso a la zona DNS de su dominio
- Un dominio
example.comy la IP de su VPS, escritaVPS_IPmás abajo
1. Hacer el inventario del sitio antiguo
Anote lo que necesita el sitio: versión de PHP, extensiones, nombre de la base de datos, tareas cron, reglas .htaccess, certificado SSL y, sobre todo, dónde está alojado su correo. En el panel antiguo consulte la versión de PHP; si tiene acceso SSH:
Bashphp -v php -m | sort crontab -l
Reduzca también ya el TTL de sus registros DNS a 300 segundos, al menos un día antes de la migración, para que el cambio final sea rápido.
2. Exportar archivos y base de datos
Desde el VPS puede traer los archivos directamente si el hosting antiguo ofrece SSH:
Bashmkdir -p ~/migration && cd ~/migration rsync -avz OLDUSER@OLD_HOST:~/public_html/ ./site/
Sin SSH, descargue un archivo comprimido por FTP o con el gestor de archivos y súbalo con scp. Exporte la base de datos con mysqldump (o el botón Exportar de phpMyAdmin):
Bashmysqldump --single-transaction -u DBUSER -p DBNAME > db.sql
3. Preparar la pila en el VPS
Bashsudo apt update sudo apt install -y nginx mariadb-server php-fpm php-mysql php-xml php-mbstring php-curl php-zip php-gd sudo mysql_secure_installation php -v
Ubuntu 24.04 incluye PHP 8.3 y Debian 12 PHP 8.2; el socket es /run/php/php8.3-fpm.sock o /run/php/php8.2-fpm.sock. Cree el sitio de Nginx en /etc/nginx/sites-available/example.com:
Nginx1server { 2 listen 80; 3 listen [::]:80; 4 server_name example.com www.example.com; 5 root /var/www/example.com; 6 index index.php index.html; 7 8 location / { 9 try_files $uri $uri/ /index.php?$args; 10 } 11 12 location ~ \.php$ { 13 include snippets/fastcgi-php.conf; 14 fastcgi_pass unix:/run/php/php8.3-fpm.sock; 15 } 16}
Bashsudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx
Nginx ignora .htaccess: traduzca sus reglas de reescritura a bloques location.
4. Importar archivos y base de datos
Bashsudo mkdir -p /var/www/example.com sudo cp -a ~/migration/site/. /var/www/example.com/ sudo chown -R www-data:www-data /var/www/example.com sudo mysql -e "CREATE DATABASE dbname CHARACTER SET utf8mb4;" sudo mysql -e "CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD';" sudo mysql -e "GRANT ALL ON dbname.* TO 'dbuser'@'localhost'; FLUSH PRIVILEGES;" sudo mysql dbname < ~/migration/db.sql
Después edite la configuración de la aplicación (por ejemplo wp-config.php) con el nuevo nombre de base de datos, usuario y contraseña. El host pasa a ser localhost.
5. Probar antes del cambio
En su propio ordenador, haga que el dominio apunte al VPS editando el archivo hosts (/etc/hosts en Linux y macOS, C:\Windows\System32\drivers\etc\hosts en Windows):
BashVPS_IP example.com www.example.com
O pruebe sin cambiar nada:
Bashcurl -I --resolve example.com:80:VPS_IP http://example.com/
Navegue por el sitio, inicie sesión, envíe un formulario y revise los registros en /var/log/nginx/error.log. Después elimine la línea del archivo hosts.
6. Cambiar el DNS y gestionar el correo
Congele los cambios de contenido en el sitio antiguo, repita el rsync y la exportación/importación de la base de datos para recoger los cambios recientes, y luego cambie el registro A a VPS_IP y el registro AAAA a la dirección IPv6 del VPS. Cuando el DNS se haya propagado, emita el certificado:
Bashsudo apt install -y certbot python3-certbot-nginx sudo certbot --nginx -d example.com -d www.example.com
Correo: cambie solo los registros A/AAAA. Deje intactos los registros MX, SPF y DKIM si sus buzones siguen con el proveedor antiguo. Cancele el hosting antiguo solo tras unos días sin problemas.
🔧 Solución de problemas
502 Bad Gateway
El socket PHP de fastcgi_pass no coincide con la versión instalada. Compruebe con ls /run/php/ y systemctl status php8.3-fpm.
«Error establishing a database connection»
Credenciales o host incorrectos en el archivo de configuración. Pruebe con mysql -u dbuser -p dbname.
403 o página en blanco
Revise propietario y permisos (chown -R www-data:www-data), y consulte sudo tail -n 50 /var/log/nginx/error.log y los registros de PHP.
El sitio antiguo sigue apareciendo tras el cambio
Las cachés DNS siguen activas. Compruebe con dig +short example.com y espere a que expire el TTL.
✅ Su sitio ya funciona en su propio VPS, migrado sin interrupciones y con una vía segura de vuelta atrás.