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

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

Desarrollar una aplicación PHP es solo la mitad del trabajo. La segunda parte, igualmente importante, es el deploy, es decir, el despliegue del código listo en el servidor de producción. Muchos desarrolladores principiantes enfrentan dificultades al transferir un proyecto desde su máquina local a un VPS (Virtual Private Server). La configuración del entorno, el trabajo con el servidor web, las bases de datos y la seguridad pueden parecer complejos, pero en realidad es un proceso secuencial y comprensible.

En este artículo, analizaremos paso a paso cómo realizar correctamente el deploy de una aplicación PHP en un VPS. Aprenderá a preparar el servidor, configurar Nginx y PHP-FPM, conectar una base de datos MySQL y automatizar el despliegue de actualizaciones mediante Git. El material está dirigido a quienes ya tienen conocimientos básicos de Linux y Git, pero desean sistematizar sus conocimientos.



1. Preparación del servidor e instalación del stack LEMP

Lo primero es conectarse a su VPS por SSH e instalar el conjunto básico de programas conocido como LEMP (Linux, Nginx, MySQL, PHP).

Conéctese al servidor:

ssh root@su-dirección-ip

Actualice los paquetes e instale Nginx, MySQL y PHP con las extensiones necesarias:

sudo apt update && sudo apt upgrade -ysudo apt install nginx mysql-server php-fpm php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip -y

Después de la instalación, inicie los servicios y actívelos para que se inicien automáticamente:

sudo systemctl start nginxsudo systemctl enable nginxsudo systemctl start php8.1-fpm  # la versión puede variarsudo systemctl enable php8.1-fpm

En este punto, la infraestructura básica está lista. Ahora pasaremos a la configuración de la base de datos y del servidor web.



2. Configuración de MySQL y creación de la base de datos

La mayoría de las aplicaciones PHP (por ejemplo, WordPress, Laravel o proyectos personalizados) requieren una base de datos. Realice la configuración inicial de MySQL:

sudo mysql_secure_installation

Siga las instrucciones: establezca una contraseña para root, elimine usuarios anónimos, deshabilite el inicio de sesión remoto de root y elimine la base de datos de prueba.

Ahora cree una base de datos y un usuario para su aplicación. Ingrese a la consola de MySQL:

sudo mysql -u root -p

Ejecute las consultas SQL (reemplace myapp, myuser y mypassword con sus propios valores):

CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';GRANT ALL PRIVILEGES ON myapp.* TO 'myuser'@'localhost';FLUSH PRIVILEGES;EXIT;

La base de datos está lista. Anote el nombre de la base de datos, el usuario y la contraseña; los necesitará al configurar la aplicación.



3. Colocación del código y configuración del host virtual de Nginx

Ahora es el momento de transferir el código de su aplicación PHP al servidor. La forma más conveniente es usar Git. Supongamos que su proyecto está alojado en GitHub o GitLab.

Cree un directorio para el proyecto y clone el repositorio:

sudo mkdir -p /var/www/myappsudo chown -R $USER:$USER /var/www/myappgit clone https://github.com/su-usuario/su-repositorio.git /var/www/myapp

Si el proyecto usa Composer (por ejemplo, Laravel o Symfony), ejecute la instalación de dependencias:

cd /var/www/myappcomposer install --no-dev --optimize-autoloader

Configure los permisos de acceso. Normalmente, el servidor web debe tener acceso de escritura a algunas carpetas (por ejemplo, storage y bootstrap/cache en Laravel):

sudo chown -R www-data:www-data /var/www/myapp/storagesudo chown -R www-data:www-data /var/www/myapp/bootstrap/cache

Ahora crearemos la configuración del host virtual para Nginx. Cree el archivo:

sudo nano /etc/nginx/sites-available/myapp

Inserte la siguiente configuración (adapte

Blogs

Book Recommendations