Cómo instalar y configurar XAMPP y phpMyAdmin en un VPS Ubuntu.

Configura un entorno equivalente a XAMPP en tu VPS Linux con Nginx, MariaDB, PHP-FPM y phpMyAdmin — guía completa en Ubuntu 24.04 para desarrolladores.

Esta guía está dirigida a quienes están configurando su primera VPS. Partimos del servidor recién provisionado hasta tener phpMyAdmin accesible desde el navegador con una página PHP funcionando.

Requisitos previos

Antes de empezar, confirma que tienes el entorno mínimo.

Requisitos previos

Necesitas una VPS con Ubuntu 24.04 LTS (Debian 12 también funciona con pequeños ajustes), acceso SSH como root o usuario con sudo, y al menos 1 GB de RAM libre. Ten a mano la IP pública de la máquina y, opcionalmente, un dominio apuntando a ella.

Sistema Ubuntu 24.04 LTS
RAM mínima 1 GB
Puertos necesarios 22, 80, 443, 3306
Acceso SSH con sudo

Ninguno de los paquetes de esta guía requiere compilación manual. Todo proviene de los repositorios oficiales de Ubuntu.

Actualización del sistema

Empieza con el sistema en estado limpio. Los repositorios desactualizados son la causa de la mitad de los problemas en tutoriales como este.

01

Actualiza el índice de paquetes y aplica las actualizaciones pendientes:

sudo apt update && sudo apt upgrade -y

Este comando lee los repositorios en /etc/apt/sources.list, descarga los manifiestos actualizados e instala cualquier versión más reciente de los paquetes ya presentes. Puede tardar entre 30 segundos y varios minutos.

02

Instala las utilidades básicas que usaremos en el proceso:

sudo apt install -y curl wget unzip software-properties-common

Instalación de Nginx

Nginx cumplirá el papel que Apache desempeña en el XAMPP estándar: recibir peticiones HTTP y, cuando el archivo es PHP, pasarlas a PHP-FPM a través del socket.

03

Instala el paquete de Nginx:

sudo apt install -y nginx
04

Habilita e inicia el servicio:

sudo systemctl enable --now nginx

Al acceder a http://TU_IP en el navegador deberías ver la página por defecto “Welcome to nginx”. Si el firewall está bloqueando el acceso, abre los puertos HTTP/HTTPS (80 y 443):

sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
sudo ufw enable
No olvides el SSH

Siempre abre el puerto 22 (OpenSSH) antes de activar UFW. Olvidar esta regla desconecta tu sesión actual y bloquea conexiones futuras. Necesitarías la consola de emergencia del panel de la VPS para recuperar el acceso.

Instalación de MariaDB

MariaDB es un fork drop-in de MySQL y es lo que trae por defecto el XAMPP actual. Los comandos mysql funcionan exactamente igual.

05

Instala el servidor:

sudo apt install -y mariadb-server
06

Ejecuta el asistente de seguridad para eliminar los valores por defecto inseguros:

sudo mysql_secure_installation

Responde a las preguntas de la siguiente manera:

  • Enter current password for root: déjalo en blanco (Enter)
  • Switch to unix_socket authentication: n
  • Change the root password?: Y — define una contraseña fuerte y anótala
  • Remove anonymous users?: Y
  • Disallow root login remotely?: Y
  • Remove test database?: Y
  • Reload privilege tables now?: Y
07

Crea un usuario administrativo separado para phpMyAdmin (más seguro que usar root):

sudo mysql -u root -p

Dentro del prompt de MariaDB:

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'CAMBIA_ESTA_CONTRASEÑA';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

Instalación de PHP-FPM

PHP-FPM (FastCGI Process Manager) es el proceso que Nginx invocará para ejecutar scripts PHP. En XAMPP esto está integrado en Apache a través de mod_php; con Nginx lo separamos en un daemon propio.

08

Instala PHP y las extensiones más comunes:

sudo apt install -y php-fpm php-mysql php-mbstring php-zip php-gd \
  php-curl php-xml php-bcmath php-intl

En Ubuntu 24.04 esto instala PHP 8.3 por defecto. Confírmalo con:

php -v
09

Verifica que el socket de PHP-FPM esté activo:

sudo systemctl status php8.3-fpm

Debe mostrar active (running). El socket se encuentra en /run/php/php8.3-fpm.sock — es esa ruta la que Nginx referenciará.

Configuración de Nginx para servir PHP

Ahora enlazamos los tres componentes. Crearemos un sitio dedicado que reemplaza la configuración por defecto.

10

Crea el directorio web y ajusta los permisos:

sudo mkdir -p /var/www/local
sudo chown -R www-data:www-data /var/www/local
11

Crea el archivo de configuración del sitio:

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

Pega el contenido siguiente (sustituye tu_dominio.com por tu dominio o por la IP de la VPS):

server {
    listen 80;
    server_name tu_dominio.com;

    root /var/www/local;
    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}
12

Activa el sitio, desactiva el predeterminado y recarga Nginx:

sudo ln -s /etc/nginx/sites-available/local /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx

El comando nginx -t valida la sintaxis antes de recargar. Si muestra syntax is ok y test is successful, todo está correcto.

13

Crea un archivo de prueba para confirmar que PHP está siendo procesado:

echo "<?php phpinfo(); ?>" | sudo tee /var/www/local/info.php

Accede a http://TU_IP/info.php en el navegador. Deberías ver la pantalla de colores de phpinfo() con toda la información de la versión. Una vez confirmado, elimina el archivo — expone detalles que no deben ser públicos:

sudo rm /var/www/local/info.php

Instalación de phpMyAdmin

Con Nginx, PHP y MariaDB funcionando, añadimos ahora el panel de administración de la base de datos.

14

Instala el paquete:

sudo apt install -y phpmyadmin

Durante la instalación:

  • Cuando pregunte Web server to reconfigure automatically, no selecciones nada (ni Apache ni Lighttpd) — pulsa Tab y Enter para omitir. Nginx no aparece en la lista.
  • En Configure database for phpmyadmin with dbconfig-common: Yes
  • Define una contraseña para el usuario interno de phpMyAdmin
15

Crea un enlace simbólico de phpMyAdmin al directorio web:

sudo ln -s /usr/share/phpmyadmin /var/www/local/phpmyadmin
16

Accede a http://TU_IP/phpmyadmin en el navegador. Inicia sesión con el usuario admin y la contraseña definida en el Paso 07.

Restringe el acceso a phpMyAdmin

Exponer /phpmyadmin públicamente es un vector habitual de ataques por fuerza bruta. En producción, añade restricción por IP en el bloque location o protégelo con autenticación básica de Nginx mediante auth_basic y archivo .htpasswd.

Verificación final

Una serie rápida de comprobaciones confirma que todo está conectado.

systemctl is-active nginx php8.3-fpm mariadb

La salida debe ser tres líneas con active. Si alguna muestra inactive o failed, ejecuta systemctl status NOMBRE_DEL_SERVICIO para ver el motivo.

En el navegador, valida los dos endpoints:

  • http://TU_IP/ — página en blanco o listado (sin index.php todavía, es lo esperado)
  • http://TU_IP/phpmyadmin — pantalla de login de phpMyAdmin

Resolución de problemas

Error 502 Bad Gateway al acceder a un archivo PHP

Casi siempre es una ruta incorrecta del socket de PHP-FPM. Verifica la versión real instalada:

ls /run/php/

Si el archivo es php8.2-fpm.sock en lugar de php8.3-fpm.sock, ajusta la línea fastcgi_pass en el archivo de configuración de Nginx y recárgalo.

phpMyAdmin devuelve 404

El enlace simbólico no se creó o el directorio web es diferente. Comprueba:

ls -la /var/www/local/phpmyadmin

Debe aparecer una flecha apuntando a /usr/share/phpmyadmin. Si no es así, rehaz el ln -s del Paso 15.

Acceso denegado al iniciar sesión en phpMyAdmin

El usuario admin debe existir en MariaDB. Entra como root:

sudo mysql -u root -p

Y ejecuta SELECT User, Host FROM mysql.user;. Si admin no aparece, repite el CREATE USER del Paso 07.

Próximos pasos

Con la stack funcionando, considera los siguientes puntos:

  • HTTPS con Let’s Encrypt: instala certbot y genera un certificado gratuito para tu dominio con sudo certbot --nginx.
  • Copias de seguridad automáticas de MariaDB: configura mysqldump en un cron diario con rotación semanal.
  • Ajuste de pools de PHP-FPM: en /etc/php/8.3/fpm/pool.d/www.conf, calibra pm.max_children según la RAM disponible.
  • Usuario separado por sitio: ejecuta cada proyecto bajo un usuario Linux dedicado para aislar permisos.

Si vas a llevar esta stack a producción, una VPS Hostini ya incluye filtro de paquetes en kernel para mitigar ataques DDoS — relevante cuando phpMyAdmin queda expuesto, incluso con restricción por IP.

Preguntas frecuentes

¿Puedo instalar el XAMPP original en una VPS Linux en lugar de montar la stack manualmente?

Técnicamente sí, XAMPP tiene instalador `.run` para Linux, pero no se recomienda en servidor: se ejecuta como root por defecto, queda fuera del gestor de paquetes (sin actualizaciones de seguridad vía apt), incluye binarios propios que entran en conflicto con los del sistema y usa Apache. Para un entorno de producción, montar Nginx + PHP-FPM + MariaDB de forma nativa es más seguro y eficiente.

¿Por qué Nginx no aparece en la lista de servidores web al instalar phpMyAdmin?

El paquete `phpmyadmin` de Debian/Ubuntu solo ofrece configuración automática para Apache y Lighttpd. Para usarlo con Nginx, omites ese paso y creas manualmente un enlace simbólico del directorio `/usr/share/phpmyadmin` dentro de tu web root, tal como se muestra en el tutorial.

¿Cuál es la diferencia entre PHP-FPM y mod_php de Apache?

`mod_php` se ejecuta dentro del proceso de Apache, por lo que cada petición (incluso de archivos estáticos) carga el intérprete PHP en memoria. PHP-FPM es un daemon separado que procesa únicamente peticiones PHP, invocado vía FastCGI por Nginx. El resultado es un menor consumo de RAM y un mejor aislamiento entre el servidor web y el runtime de PHP.

¿Necesito reiniciar PHP-FPM cada vez que modifico un archivo PHP?

No. Los archivos `.php` se leen en cada petición de forma automática. Solo necesitas reiniciar PHP-FPM (`sudo systemctl restart php8.3-fpm`) cuando cambias configuraciones del propio PHP, es decir, archivos en `/etc/php/8.3/fpm/` como `php.ini` o los pools.

¿Es seguro dejar phpMyAdmin accesible en /phpmyadmin?

No en producción. Esa ruta es un objetivo constante de bots que intentan ataques por fuerza bruta. Las mitigaciones habituales son: moverlo a una URL no obvia (p. ej. `/admin-db-x7k2`), restringir por IP en el bloque location de Nginx (`allow IP; deny all;`), añadir autenticación HTTP básica antes del login de phpMyAdmin, o acceder solo a través de un túnel SSH.

¿Cómo sé qué versión de PHP se instaló y cómo la actualizo?

Ejecuta `php -v` para ver la versión actual. En Ubuntu 24.04 se instala PHP 8.3 por defecto. Para usar una versión más reciente (p. ej. 8.4) necesitas el PPA `ondrej/php`: `sudo add-apt-repository ppa:ondrej/php && sudo apt update && sudo apt install php8.4-fpm`. Recuerda actualizar la ruta del socket en Nginx al cambiar de versión.

Próximos pasos Cloud Ryzen con NVMe y protección DDoS siempre activa.Pon en producción en un VPS Hostini →
¿Te resultó útil este tutorial?
Hablar por WhatsApp