Introducción: del desarrollo local al servidor de producción
Desarrollar una aplicación PHP en una máquina local es solo la mitad del trabajo. El verdadero dominio comienza cuando el código llega al servidor y comienza a atender a usuarios reales. El despliegue avanzado de PHP en VPS no es simplemente copiar archivos por FTP. Es un proceso integral que incluye configuración del entorno, seguridad, automatización y monitoreo.
En este artículo, analizaremos cómo configurar un VPS para el alojamiento profesional de aplicaciones PHP, utilizando herramientas modernas y prácticas de DevOps. Aprenderá cómo implementar una aplicación en el stack Nginx + PHP-FPM, configurar un pipeline de CI/CD, optimizar el rendimiento e implementar monitoreo.
Se asume que tiene conocimientos básicos de Linux, PHP y servidores web. Pasamos al nivel avanzado.
1. Preparación del VPS y configuración del entorno
Selección y configuración inicial del servidor
Para un despliegue avanzado, elija un VPS con al menos 2 GB de RAM y disco SSD. Los SO recomendados son Ubuntu 22.04 LTS o Debian 12. Después de obtener acceso por SSH, realice la configuración básica:
- Actualización de paquetes:
sudo apt update && sudo apt upgrade -y - Creación de un usuario con permisos sudo:
sudo adduser deployer && sudo usermod -aG sudo deployer - Configuración de claves SSH (deshabilite el inicio de sesión con contraseña)
- Instalación de fail2ban para protección contra fuerza bruta
- Configuración de UFW (permitir puertos 22, 80, 443)
Instalación del stack LEMP (Nginx + PHP-FPM + MySQL)
Usamos Nginx como servidor frontend y PHP-FPM para procesar PHP. Instale todos los componentes con un solo comando:
sudo apt install nginx mysql-server php-fpm php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip composer git -yVerifique las versiones:
php -vnginx -vmysql --versionConfiguración de PHP-FPM para alto rendimiento
Para un despliegue avanzado, modifique la configuración de PHP-FPM. Edite el archivo /etc/php/8.3/fpm/pool.d/www.conf (la versión puede variar):
pm = dynamicpm.max_children = 50pm.start_servers = 5pm.min_spare_servers = 5pm.max_spare_servers = 35pm.max_requests = 500Configuraciones importantes de php.ini para producción:
memory_limit = 256Mupload_max_filesize = 64Mpost_max_size = 64Mmax_execution_time = 300date.timezone = Europe/MoscowReinicie PHP-FPM: sudo systemctl restart php8.3-fpm
2. Despliegue de la aplicación: de Git a producción
Clonación y configuración de permisos
Cree un directorio para el proyecto y clone el repositorio:
sudo mkdir -p /var/www/yourprojectsudo chown -R deployer:deployer /var/www/yourprojectcd /var/www/yourprojectgit clone git@github.com:yourusername/yourproject.git .Configure los permisos de acceso:
sudo chown -R www-data:www-data /var/www/yourproject/storagesudo chown -R www-data:www-data /var/www/yourproject/bootstrap/cachesudo chmod -R 775 /var/www/yourproject/storagesudo chmod -R 775 /var/www/yourproject/bootstrap/cacheConfiguración del host virtual de Nginx
Cree un archivo de configuración para su dominio:
sudo nano /etc/nginx/sites-available/yourprojectEjemplo de configuración avanzada con almacenamiento en caché y compresión:
server { listen 80; server_name yourdomain.com www.yourdomain.com; root /var/www/yourproject/public;
index index.php index.html;
charset utf-8;
location / { try_files $uri $uri/ /index.php?$query_string; }
location ~ \\.php$ { fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
location ~ /\