Introducción: ¿Por qué VPS es la mejor opción para un proyecto PHP?
Desarrollar una aplicación web en PHP es solo la mitad del trabajo. La segunda parte, igualmente importante, es un despliegue adecuado. Si has superado el hosting compartido con sus limitaciones y deseas tener control total sobre el entorno, un servidor virtual privado (VPS) es la solución ideal. En este artículo, recorreremos el camino desde la compra del servidor hasta la puesta en marcha de tu aplicación PHP en modo producción. Aprenderás a configurar el stack Nginx + PHP-FPM + MySQL, configurar el dominio, el certificado SSL y automatizar las actualizaciones de código.
Paso 1: Configuración inicial del VPS y conexión
1.1 Elección del SO y acceso inicial
Recomendamos usar Ubuntu 22.04 LTS, una versión estable con soporte a largo plazo. Después de comprar el VPS, recibirás una dirección IP y una contraseña de root.
Nos conectamos por SSH:
ssh root@tu_IP_del_servidor1.2 Creación de usuario y configuración de seguridad
Trabajar como root es una mala práctica. Crearemos un usuario separado con permisos sudo:
adduser deployerusermod -aG sudo deployerAhora configuraremos las claves SSH para un acceso cómodo y seguro. En tu máquina local, genera una clave (si no la tienes):
ssh-keygen -t rsa -b 4096Copia la clave pública al servidor:
ssh-copy-id deployer@tu_IP_del_servidorDespués de verificar el acceso por clave, desactiva el acceso por contraseña y el acceso root:
sudo nano /etc/ssh/sshd_config# Cambia:PermitRootLogin noPasswordAuthentication no# Reinicia SSH:sudo systemctl restart sshdPaso 2: Instalación y configuración del stack LEMP (Nginx, PHP, MySQL)
2.1 Instalación de Nginx
Actualizamos los paquetes e instalamos el servidor web:
sudo apt update && sudo apt upgrade -ysudo apt install nginx -yVerificamos el estado:
sudo systemctl status nginx2.2 Instalación de PHP 8.x y extensiones necesarias
Añadimos el repositorio con la versión actual de PHP:
sudo apt install software-properties-commonsudo add-apt-repository ppa:ondrej/phpsudo apt updatesudo apt install php8.2 php8.2-fpm php8.2-mysql php8.2-xml php8.2-mbstring php8.2-curl php8.2-zip -y2.3 Instalación de MySQL (MariaDB)
sudo apt install mariadb-server mariadb-client -ysudo mysql_secure_installationCreamos la base de datos y el usuario para tu aplicación:
sudo mysql -u rootCREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'strong_password';GRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost';FLUSH PRIVILEGES;EXIT;Paso 3: Configuración del host virtual (Server Block) en Nginx
Creamos un archivo de configuración para nuestro dominio (por ejemplo, myapp.es):
sudo nano /etc/nginx/sites-available/myappInserta la siguiente plantilla para PHP-FPM:
server { listen 80; server_name myapp.es www.myapp.es; root /var/www/myapp/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.2-fpm.sock; }
location ~ /\\.ht { deny all; }}Activamos el sitio y recargamos Nginx:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/sudo nginx -t # Verificar configuraciónsudo systemctl reload nginxPaso 4: Despliegue del código de la aplicación (Git + Composer)
4.1 Clonación del repositorio
Creamos el directorio para el proyecto y clonamos el código (por ejemplo, desde GitHub):
sudo mkdir -p /var/www/myappsudo chown -R deployer:depl