Instalar un stack LAMP en Ubuntu 24.04 y 22.04: Apache2, PHP 8, MySQL y phpMyAdmin

Publicado el Actualizado el 8 min de lectura

Apache2, PHP 8, MySQL o MariaDB y phpMyAdmin en Ubuntu 24.04 LTS o 22.04 LTS: toda la instalación paso a paso, incluida la protección posterior.

¿Quieres instalar Apache2, PHP 8, MySQL y phpMyAdmin, es decir, un stack LAMP completo, en tu servidor Ubuntu 24.04 LTS o Ubuntu 22.04 LTS? Esta guía te lleva paso a paso por toda la instalación, desde el servidor web hasta un acceso seguro a la base de datos.

Una ventaja frente a Debian: Ubuntu tiene los dos servidores de bases de datos en sus repositorios, tanto mysql-server como mariadb-server. Puedes elegir libremente. Debian, en cambio, solo ofrece MariaDB. Esta guía muestra las dos variantes, el resto de los pasos son idénticos.

Requisitos

Necesitas un acceso SSH con permisos de root (o un usuario con permiso sudo) en un Ubuntu actual. Se recomiendan Ubuntu 24.04 LTS "Noble Numbat" y Ubuntu 22.04 LTS "Jammy Jellyfish". Ubuntu 20.04 LTS llegó al final de su soporte estándar en mayo de 2025 y ya no debería usarse en producción.

Actualiza primero la lista de paquetes e instala las actualizaciones disponibles:

apt update && apt upgrade -y

Instalar Apache2 y los paquetes base

Instala el servidor web junto con los paquetes auxiliares que vas a necesitar en los siguientes pasos:

apt install -y nano curl wget unzip ca-certificates apt-transport-https lsb-release gnupg software-properties-common apache2

Abre después en el navegador http://<IP-DE-TU-SERVIDOR>/. Si aparece la página estándar de Apache2, el servidor web ya está funcionando.

Si en el servidor hay un firewall activo, abre los puertos del servidor web:

ufw allow "Apache Full"

Instalar PHP 8

La versión de PHP que obtienes de los repositorios depende de tu distribución. Por eso, un comando con número de versión fijo como apt install php8.3 falla en Ubuntu 22.04 LTS. Esta tabla muestra la versión incluida en cada caso (datos de julio de 2026):

DistribuciónVersión de PHP en los repositorios
Ubuntu 24.04 LTSPHP 8.3
Ubuntu 22.04 LTSPHP 8.1

Utiliza por eso los metapaquetes sin número de versión. Instalan automáticamente la versión que corresponde a tu distribución y funcionan igual en cualquier Ubuntu:

apt install -y php php-cli php-common php-curl php-gd php-intl php-mbstring php-mysql php-opcache php-readline php-xml php-zip php-bz2 libapache2-mod-php

Si prefieres ejecutar PHP mediante FPM en lugar del módulo de Apache, vale el mismo principio. También aquí el metapaquete lleva al objetivo de forma fiable, mientras que un nombre con versión como php8.3-fpm solo existe en Ubuntu 24.04 LTS:

apt install -y php-fpm

Para saber qué versión se ha instalado realmente:

php -v

Si necesitas una versión que tu edición de Ubuntu no incluye (por ejemplo PHP 8.4), añade el conocido repositorio de PHP de Ondřej Surý:

add-apt-repository ppa:ondrej/php

apt update

add-apt-repository guarda la clave de firma automáticamente en un archivo de keyring propio y la asigna exactamente a ese repositorio. El comando apt-key, muy extendido antiguamente, está obsoleto y ya no debería usarse, porque una clave registrada así valdría para todos los repositorios del sistema.

Solo a través de ese repositorio están disponibles los nombres de paquete con versión para todas las ediciones de Ubuntu. A continuación instalas la versión de PHP que quieras junto con las extensiones habituales:

apt install -y php8.4 php8.4-cli php8.4-common php8.4-curl php8.4-gd php8.4-intl php8.4-mbstring php8.4-mysql php8.4-opcache php8.4-readline php8.4-xml php8.4-zip php8.4-bz2 libapache2-mod-php8.4

Si después conviven varias versiones de PHP en paralelo, define cuál debe usar Apache2:

a2dismod php8.3

a2enmod php8.4

systemctl restart apache2

Con php -v compruebas qué versión está activa en la línea de comandos.

Instalar y asegurar el servidor de bases de datos

Ubuntu te ofrece los dos servidores de bases de datos habituales, en estas versiones:

PaqueteUbuntu 24.04 LTSUbuntu 22.04 LTS
mysql-serverMySQL 8.0.46MySQL 8.0.46
mariadb-serverdisponibledisponible

Para MySQL, es decir, el original de Oracle:

apt install -y mysql-server mysql-client

mysql_secure_installation

Para MariaDB, el servidor surgido de MySQL, que habla el mismo protocolo y el mismo lenguaje de consultas:

apt install -y mariadb-server mariadb-client

mysql_secure_installation

Instala solo una de las dos variantes, porque ambas ocupan el mismo puerto. Para los siguientes pasos de esta guía da igual cuál hayas elegido.

El script mysql_secure_installation hace varias preguntas. Las versiones actuales de MariaDB preguntan primero si quieres cambiar a la autenticación por unix_socket. Esta opción tiene sentido, porque así el usuario de base de datos root solo puede iniciar sesión como usuario del sistema root. Al resto de las preguntas (eliminar usuarios anónimos, prohibir el acceso remoto de root, borrar la base de datos de prueba, recargar los privilegios) responde siempre con y. Asigna además una contraseña de base de datos robusta.

Comprueba después si el servicio está en marcha. El nombre de la unidad de systemd depende del servidor elegido:

systemctl status mysql

systemctl status mariadb

Instalar phpMyAdmin

Para phpMyAdmin tienes dos opciones. El paquete phpmyadmin está en los repositorios de todas las versiones actuales de Ubuntu y se instala en un solo paso:

apt install phpmyadmin -y

Es cómodo, pero la versión suele ir por detrás de la del fabricante. Si prefieres la edición más reciente, descarga phpMyAdmin directamente. Ese es justo el camino que describen los siguientes pasos:

cd /usr/share && wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip -O phpmyadmin.zip && unzip phpmyadmin.zip && rm phpmyadmin.zip && mv phpMyAdmin-*-all-languages phpmyadmin && chmod -R 0755 phpmyadmin

Crea a continuación el archivo de configuración:

cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

phpMyAdmin necesita un valor aleatorio como blowfish_secret, con el que se cifran los datos de sesión de la cookie. Genera un valor así:

openssl rand -base64 32

Introdúcelo después en el archivo de configuración:

nano /usr/share/phpmyadmin/config.inc.php

La línea correspondiente es:

$cfg['blowfish_secret'] = 'INTRODUCE_AQUI_EL_VALOR_GENERADO';

Enlazar phpMyAdmin con Apache2

Crea un archivo de configuración de Apache2 propio para phpMyAdmin:

nano /etc/apache2/conf-available/phpmyadmin.conf

El contenido de phpmyadmin.conf:

#Configuración de PHPMyAdmin para Apache2

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
</Directory>

<Directory /usr/share/phpmyadmin/templates>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
    Require all denied
</Directory>

Activa la configuración, recarga Apache2 y crea el directorio temporal con los permisos adecuados:

a2enconf phpmyadmin && systemctl reload apache2 && mkdir -p /usr/share/phpmyadmin/tmp/ && chown -R www-data:www-data /usr/share/phpmyadmin/tmp/

Crear un usuario de base de datos

Inicia sesión en la base de datos como usuario del sistema root:

mysql -u root

Crea ahora un usuario de base de datos propio. Para ello no uses "root", "admin", "user" o "username" como nombre, sino un nombre de usuario propio y una contraseña larga y aleatoria:

#¡IMPORTANTE! SUSTITUYE USER Y PASSWORD POR TUS PROPIOS DATOS DE ACCESO.

CREATE USER 'USER'@'localhost' IDENTIFIED BY 'PASSWORD';

GRANT ALL PRIVILEGES ON *.* TO 'USER'@'localhost' WITH GRANT OPTION;

FLUSH PRIVILEGES;

Para aplicaciones concretas deberías crear además usuarios con permisos limitados, que solo puedan acceder a su propia base de datos:

CREATE DATABASE miapp;

CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'PASSWORD';

GRANT ALL PRIVILEGES ON miapp.* TO 'appuser'@'localhost';

FLUSH PRIVILEGES;

Puedes salir de la consola de base de datos en cualquier momento con:

exit

Probar el stack LAMP

Abre phpMyAdmin en http://<IP-DE-TU-SERVIDOR>/phpmyadmin e inicia sesión con el usuario que acabas de crear. Si el inicio de sesión funciona, Apache2, PHP y tu servidor de bases de datos trabajan correctamente juntos.

La conexión de PHP la compruebas además con un pequeño archivo de prueba:

echo "<?php phpinfo();" > /var/www/html/info.php

Después de abrir http://<IP-DE-TU-SERVIDOR>/info.php, borra el archivo sin falta, porque revela detalles de la configuración de tu servidor:

rm /var/www/html/info.php

Recomendaciones de seguridad para el uso en producción

Un stack LAMP recién instalado todavía no está asegurado. Deberías completar estos puntos:

  • phpMyAdmin es un objetivo de ataque frecuente. Limita el acceso a tu propia dirección IP usando en el bloque Directory Require ip 203.0.113.10 en lugar de la autorización abierta.
  • Configura HTTPS para que las contraseñas no viajen en texto plano. Sin cifrado, tus datos de acceso se pueden leer por el camino hasta el servidor.
  • Mantén phpMyAdmin actualizado. Como lo has instalado manualmente, apt upgrade no lo actualiza automáticamente.
  • Crea backups periódicos de la base de datos y guárdalos fuera del servidor.

Errores frecuentes y soluciones

El navegador descarga el archivo PHP en lugar de ejecutarlo: el módulo de PHP no está activo en Apache2. Actívalo con a2enmod php8.4 y reinicia el servidor web con systemctl restart apache2.

phpMyAdmin muestra "The configuration file now needs a secret passphrase": en config.inc.php falta el valor de blowfish_secret. Genéralo con openssl rand -base64 32 e introdúcelo ahí.

"Access denied for user" al iniciar sesión en phpMyAdmin: tras mysql_secure_installation, el usuario de base de datos root usa por regla general la autenticación por unix_socket y por eso no puede entrar a través de la interfaz web. Utiliza el usuario adicional que has creado.

Apache2 ya no arranca después de un cambio en la configuración: comprueba la configuración con apachectl configtest, la salida indica el archivo y la línea del error.

Preguntas frecuentes

¿Debo instalar MySQL o MariaDB en Ubuntu?
Ubuntu ofrece las dos opciones: mysql-server instala MySQL 8.0.46 y mariadb-server el servidor MariaDB surgido de él. Para esta guía la elección no supone ninguna diferencia. Instala solo una de las dos variantes, porque ambas ocupan el mismo puerto. Debian, por cierto, no tiene paquete mysql-server, allí solo queda MariaDB.
¿Qué versión de PHP incluye Ubuntu?
Ubuntu 24.04 LTS trae PHP 8.3 y Ubuntu 22.04 LTS trae PHP 8.1. Utiliza por eso los metapaquetes sin número de versión, es decir, php o php-fpm. Un comando con número fijo como apt install php8.3 falla en Ubuntu 22.04 LTS.
¿Cómo consigo una versión de PHP más reciente que la de Ubuntu?
Añade el conocido repositorio de PHP con add-apt-repository ppa:ondrej/php. El comando guarda la clave de firma automáticamente en un archivo de keyring propio y la asigna exactamente a ese repositorio. Solo después están disponibles nombres de paquete como php8.4-fpm.
¿Por qué el navegador descarga el archivo PHP en lugar de ejecutarlo?
En ese caso el módulo de PHP no está activo en Apache2. Actívalo con a2enmod y el nombre de tu versión de PHP, por ejemplo a2enmod php8.4, y reinicia después Apache2 con systemctl restart apache2.
¿Por qué no puedo iniciar sesión en phpMyAdmin como root?
Tras ejecutar mysql_secure_installation, el usuario de base de datos root usa por regla general la autenticación por unix_socket y por eso no puede entrar a través de la interfaz web. Crea para ello un usuario de base de datos propio.

LAMP Apache2 PHP MariaDB MySQL phpMyAdmin Ubuntu 24.04 Ubuntu