Despliegue de aplicación PHP en VPS: guía paso a paso de la A a la Z

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: por qué VPS es la solución ideal para un proyecto PHP

\n

Desarrollar una aplicación PHP es solo la mitad del trabajo. La segunda parte, igualmente importante, es un despliegue adecuado en el servidor. Un Servidor Privado Virtual (VPS) ofrece flexibilidad, control y rendimiento que no están disponibles con el hosting compartido. Obtienes acceso root, la posibilidad de ajustar finamente el entorno y un aislamiento completo de recursos.

\n

En esta guía, recorreremos el camino desde la compra del servidor hasta la aplicación en funcionamiento, usando como ejemplo PHP 8.x, Nginx, MySQL y Git. Todos los pasos están descritos para el sistema operativo Ubuntu 22.04 LTS, la distribución más popular para servidores web.

\n\n

1. Configuración inicial del VPS y conexión

\n\n

1.1. Elección y compra del VPS

\n

Para una aplicación PHP, los requisitos mínimos son: 1 vCPU, 1 GB de RAM, 20 GB SSD. Recomendamos proveedores con buena reputación: DigitalOcean, Linode, Vultr o los locales Timeweb, Beget.

\n

Después de la compra, recibirás una dirección IP, una contraseña de root (o una clave SSH).

\n\n

1.2. Conexión por SSH y creación de usuario

\n

Nos conectamos al servidor (reemplaza 192.168.1.1 con tu IP):

\n
ssh root@192.168.1.1
\n

Creamos un usuario no privilegiado para el trabajo diario:

\n
adduser deployer\nusermod -aG sudo deployer
\n

Configuramos las claves SSH para un inicio de sesión seguro:

\n
mkdir -p /home/deployer/.ssh\ncp ~/.ssh/authorized_keys /home/deployer/.ssh/\nchown -R deployer:deployer /home/deployer/.ssh\nchmod 700 /home/deployer/.ssh\nchmod 600 /home/deployer/.ssh/authorized_keys
\n

Deshabilitamos el inicio de sesión root con contraseña, editamos /etc/ssh/sshd_config:

\n
PermitRootLogin prohibit-password\nPasswordAuthentication no
\n

Reiniciamos SSH: systemctl restart sshd

\n\n

1.3. Seguridad básica del servidor

\n
    \n
  • Actualizamos paquetes: apt update && apt upgrade -y
  • \n
  • Instalamos fail2ban: apt install fail2ban -y
  • \n
  • Configuramos UFW (cortafuegos):
  • \n
\n
ufw allow OpenSSH\nufw allow 'Nginx Full'\nufw enable
\n\n

2. Instalación y configuración del stack LEMP (Linux, Nginx, MySQL, PHP)

\n\n

2.1. Instalación de Nginx

\n
apt install nginx -y\nsystemctl enable nginx\nsystemctl start nginx
\n

Verifica su funcionamiento abriendo la dirección IP del servidor en el navegador. Deberías ver la página de bienvenida de Nginx.

\n\n

2.2. Instalación de PHP 8.x y PHP-FPM

\n

Añadimos el repositorio para la versión actual de PHP:

\n
apt install software-properties-common -y\nadd-apt-repository ppa:ondrej/php -y\napt update\napt install php8.2-fpm php8.2-mysql php8.2-xml php8.2-curl php8.2-mbstring php8.2-zip php8.2-gd -y
\n

Verificamos el estado de PHP-FPM:

\n
systemctl status php8.2-fpm
\n\n

2.3. Instalación de MySQL (MariaDB)

\n
apt install mariadb-server -y\nsystemctl enable mariadb\nsystemctl start mariadb
\n

Ejecutamos el script de seguridad:

\n
mysql_secure_installation
\n

Creamos la base de datos y el usuario para la aplicación:

\n
mysql -u root -p\nCREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\nCREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'strong_password';\nGRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost';\nFLUSH PRIVILEGES;\nEXIT;
\n\n

2.4. Configuración del host virtual de Nginx

\n

Creamos el archivo de configuración para nuestro dominio (por ejemplo, myapp.com):

\n
nano /etc/nginx/sites-available/myapp
\n

Contenido del archivo:

\n
server {\n    listen 80;\n    server_name myapp.com www.myapp.com;\n    root /var/www/myapp/public;\n    index index.php index.html;\n\n    location / {\n        try_files $uri $uri/ /index.php?$query_string;\n    }\n\n    location ~ \\.php$ {\n        fastcgi_pass unix:                

Blogs

Book Recommendations