Introducción
El deploy (despliegue) de una aplicación PHP en un servidor privado virtual (VPS) es una etapa clave en la transición del desarrollo local a producción. A diferencia del hosting compartido, un VPS brinda control total sobre el entorno de ejecución, lo cual es crítico para frameworks modernos (Laravel, Symfony) y proyectos de alta carga.
En esta guía, analizaremos el ciclo completo de deploy de una aplicación PHP en un VPS con Ubuntu 22.04. Aprenderá cómo configurar el servidor, instalar los componentes necesarios y automatizar el proceso de despliegue. Todos los ejemplos de código están listos para usar.
1. Preparación del VPS y configuración inicial
1.1. Conexión al servidor
Después de comprar el VPS, recibirá una dirección IP, un usuario (generalmente root) y una contraseña. Conéctese vía SSH:
ssh root@su_dirección_ipSi usa claves SSH (recomendado), agregue su clave pública al servidor.
1.2. Actualización del sistema y creación de usuario
Actualice los paquetes y cree un usuario sin privilegios para trabajar:
apt update && apt upgrade -yadduser deployerusermod -aG sudo deployerAhora conéctese con el nuevo usuario:
ssh deployer@su_dirección_ip1.3. Configuración del firewall
Use UFW para protección básica:
sudo ufw allow OpenSSHsudo ufw allow 'Nginx Full'sudo ufw enablesudo ufw status2. Instalación del stack LEMP (Linux, Nginx, MySQL, PHP)
2.1. Instalación de Nginx
sudo apt install nginx -ysudo systemctl start nginxsudo systemctl enable nginxVerifique el funcionamiento abriendo en el navegador http://su_dirección_ip. Debería ver la página de bienvenida de Nginx.
2.2. Instalación de PHP y PHP-FPM
Para frameworks modernos, use PHP 8.x:
sudo apt install php8.1-fpm php8.1-mysql php8.1-xml php8.1-mbstring php8.1-curl php8.1-zip php8.1-gd -yVerifique la versión e inicie PHP-FPM:
php -vsudo systemctl start php8.1-fpmsudo systemctl enable php8.1-fpm2.3. Instalación de MySQL
sudo apt install mysql-server -ysudo mysql_secure_installationCree una base de datos para su aplicación:
sudo mysql -u root -pCREATE DATABASE nombre_de_su_base_de_datos;CREATE USER 'su_usuario'@'localhost' IDENTIFIED BY 'su_contraseña';GRANT ALL PRIVILEGES ON nombre_de_su_base_de_datos.* TO 'su_usuario'@'localhost';FLUSH PRIVILEGES;EXIT;3. Configuración del host virtual y deploy de la aplicación
3.1. Creación del host virtual de Nginx
Cree un archivo de configuración para su dominio:
sudo nano /etc/nginx/sites-available/sudominio.comInserte la siguiente configuración (adáptela a su proyecto):
server { listen 80; server_name sudominio.com www.sudominio.com; root /var/www/sudominio.com/public;
index index.php index.html;
location / { try_files $uri $uri/ /index.php?$query_string; }
location ~ \\.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; }
location ~ /\\.ht { deny all; }}Active el sitio:
sudo ln -s /etc/nginx/sites-available/sudominio.com /etc/nginx/sites-enabled/sudo nginx -tsudo systemctl reload nginx3.2. Deploy del código mediante Git
Instale Git y clone el repositorio:
sudo apt install git -ycd /var/wwwsudo git clone https://github.com/su_usuario/su-repositorio.git sudominio.comConfigure los permisos:
sudo chown -R www-data:www-data /var/www/sudominio.comsudo chmod -R 755 /var/www/sudominio.com/storagesudo chmod -R 755 /var/www/sudominio.com/b