Instalar un stack LAMP en Ubuntu 24.04 y 22.04: Apache2, PHP 8, MySQL y phpMyAdmin
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ón | Versión de PHP en los repositorios |
|---|---|
| Ubuntu 24.04 LTS | PHP 8.3 |
| Ubuntu 22.04 LTS | PHP 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:
| Paquete | Ubuntu 24.04 LTS | Ubuntu 22.04 LTS |
|---|---|---|
| mysql-server | MySQL 8.0.46 | MySQL 8.0.46 |
| mariadb-server | disponible | disponible |
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.10en 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 upgradeno 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?
¿Qué versión de PHP incluye Ubuntu?
¿Cómo consigo una versión de PHP más reciente que la de Ubuntu?
¿Por qué el navegador descarga el archivo PHP en lugar de ejecutarlo?
¿Por qué no puedo iniciar sesión en phpMyAdmin como root?
2022-2026 KernelHost GmbH. Todos los derechos reservados. Esta guía está protegida por derechos de autor. Su publicación en otros sitios web, aunque sea de forma parcial o modificada, no está permitida sin nuestro consentimiento por escrito. Las citas con indicación de la fuente y un enlace son muy bienvenidas.

