En este artículo explicamos cómo instalar la pila LAMP en Ubuntu 20.04 LTS Focal Fossa paso a paso, de modo que en muy pocos minutos dispondrás de Apache, MariaDB/MySQL y PHP integrados en tu servidor o VPS Ubuntu.
Ubuntu 20.04 LTS Focal Fossa no es la última versión de esta distribución. Si esta es la versión que te interesa puedes continuar con el tutorial, en caso contrario tal vez te interese consultar la guía de instalación de la pila LAMP en Ubuntu que sí cubre este proceso en la última versión. También dispones de versiones de este tutorial para lanzamientos anteriores de Ubuntu (y otros sistemas), que podrás encontrar fácilmente en nuestro buscador.
Contenido
Antes de instalar LAMP en Ubuntu 20.04 LTS
Para completar los pasos de esta guía de instalación de la pila LAMP Server en Ubuntu 20.04 sólo necesitas partir de los siguientes requerimientos básicos:
- Una instalación actualizada de Ubuntu 20.04 LTS Focal Fossa.
- Acceso a línea de comandos con un usuario con capacidades de sudo.
- Conexión a Internet.
Cómo instalar LAMP en Ubuntu 20.04
Vamos a instalar la pila LAMP en Ubuntu 20.04 LTS en su mayoría desde los repositorios de la distribución, por lo que el primer paso será actualizar las listas de paquetes:
~$ sudo apt update
¿PHP 8 en Ubuntu 20.04?
Con Ubuntu 20.04 LTS Focal Fossa disponemos por defecto de PHP 7.4 en los repositorios oficiales, pero ¿y si necesitas una versión posterior o anterior? Si necesitas la versión 8.3, 8.2, 8.1, 8.0, ó versiones anteriores como la 7.3 será necesario configurar un repositorio adicional:
~$ sudo add-apt-repository ppa:ondrej/php
Se nos mostrará un aviso informativo que pasaremos por alto pulsando la tecla <Intro>.
A partir de este momento, en cualquier paquete de PHP que necesitemos, debemos especificar el número de versión que nos interese, cambiando la partícula php por php7.x ó php8.x. Por ejemplo, si necesitamos el módulo de Apache para PHP 8.3, en lugar de instalar libapache2-mod-php instalamos el paquete libapache2-mod-php8.3.
¿MariaDB superior a la versión 10.3?
La versión de este motor de bases de datos incluida en Ubuntu 20.04 LTS es la 10.3, pero ya hay muchas aplicaciones que trabajan sobre la pila LAMP que requieren versiones superiores. Podemos usar una versión más reciente instalando el repositorio oficial.
Para ello instalamos la clave pública con la que poder verificar las firmas de los paquetes del repositorio:
~$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
Creamos el archivo de repositorio:
~$ sudo nano /etc/apt/sources.list.d/mariadb.list
Con este contenido:
deb [arch=amd64,arm64,ppc64el] http://mirror.wtnet.de/mariadb/repo/10.6/ubuntu focal main
La URL anterior corresponde a la versión 10.6, si quieres otra sustituye adecuadamente el número de versión. Otra versión muy recomendable es la 10.11.
Instalación de los paquetes
A continuación habrá que instalar los paquetes que componen los distintos elementos de la pila LAMP para Ubuntu 20.04 LTS, para lo que actualizaremos las listas de paquetes de la distribución y los repositorios adicionales:
~$ sudo apt update
Teniendo cuenta lo dicho antes sobre los nombres de paquetes de PHP, el siguiente comando instalaría PHP 7.4 si no has instalado el repositorio adicional, o la versión considerada por defecto en dicho repositorio alternativo si lo has instalado:
~$ sudo apt install -y apache2 libapache2-mod-php php-mysql mariadb-server
Si quieres instalar una versión concreta del repositorio alternativo habrá que indicarla en la nomenclatura de los paquetes; por ejemplo, para la versión 8.3:
~$ sudo apt install -y apache2 libapache2-mod-php8.3 php8.3-mysql mariadb-server
O para la 8.1:
~$ sudo apt install -y apache2 libapache2-mod-php8.1 php8.1-mysql mariadb-server
En unos instantes se descargarán e instalarán estos paquetes y sus dependencias, creándose los servicios apache2.service y mariadb.service, o apache2 y mariadb si prefieres los nombres cortos. Ambos servicios quedan iniciados y habilitados para su arranque automático junto a Ubuntu 20.04.
En cualquier momento puedes comprobar el estado de los servicios que forman la pila LAMP en Ubuntu 20.04 mediante el comando systemctl status apache2 mariadb
:
Configurar el firewall UFW de Ubuntu 20.04 LTS para la pila LAMP
Si tienes activado el firewall UFW en Ubuntu 20.04 LTS Focal Fossa y necesitas acceder desde red a los servicios que ofrece la pila LAMP, debes añadir algunas reglas.
Para permitir el acceso HTTP estándar:
~$ sudo ufw allow http
Para permitir el acceso HTTPS si estás ofreciendo conexiones seguras:
~$ sudo ufw allow https
Si quisieras permitir el acceso remoto al servicio de bases de datos (aunque no es recomendable):
~$ sudo ufw allow mysql
Estos cambios se aplican inmediatamente.
Configurar LAMP en Ubuntu 20.04 LTS
Para configurar los componentes de la pila LAMP en Ubuntu 20.04 LTS Focal Fossa realizaremos unos mínimos ajustes.
Apache
Es interesante para evitar alertas y eventos en los registros asignar un valor a la variable ServerName en el archivo de configuración principal:
~$ sudo nano /etc/apache2/apache2.conf
Al principio de la configuración global añadiremos esta directiva con el dominio, nombre o incluso dirección IP del servidor Ubuntu 20.04:
... #ServerRoot "/etc/apache2" ServerName ubuntu2004.local.lan:80 ...
Guardados los cambios, los aplicamos recargando la configuración del servicio:
~$ sudo systemctl reload apache2
PHP
El archivo de configuración principal es el famoso php.ini, que editaremos (modifica la ruta siguiente de acuerdo con la versión de PHP que hayas instalado):
~$ sudo nano /etc/php/7.4/apache2/php.ini
Un valor que es importante configurar es la zona horaria, para que las aplicaciones web calculen la hora correctamente, por lo que buscaremos la directiva date.timezone:
... ;date.timezone = ...
Por defecto esta directiva está desactivada, así que la activaremos eliminando el carácter ; inicial y le daremos el valor de la zona horaria que le interese:
... date.timezone = Europe/Madrid ...
Si no conoces el valor de la zona horaria que te interesa, puedes consultarlo en la documentación de PHP.
En cuanto al tratamiento de errores, la configuración por defecto está dirigida a entornos de producción, por lo que se ocultan los mensajes de error. Pero si tu entorno es de desarrollo, necesitarás activar los mensajes de error para facilitar la depuración. Habrá que modificar los valores de las siguientes directivas tal como se muestra a continuación:
... error_reporting = E_ALL ... display_errors = On ... display_startup_errors = On ...
En los comentarios figuran los valores de producción y desarrollo, por lo que es fácil revertir los cambios.
Guardados los cambios, los aplicamos recargando la configuración del servicio web:
~$ sudo systemctl reload apache2
Existe también otro archivo php.ini para la versión de PHP de consola o CLI. Podemos editarlo teniendo en cuenta su ruta de ubicación:
~$ sudo nano /etc/php/7.4/cli/php.ini
Haremos los cambios necesarios de modo similar, aunque en este caso los nuevos ajustes se aplican directamente.
MariaDB
La configuración por defecto de MariaDB prácticamente no necesita ajustes, ya que sus valores son operativos. Para conectar al servicio con el usuario root de MariaDB se necesita lanzar el cliente mysql con sudo:
~$ sudo mysql
Si prefieres acceder con root mediante contraseña, puedes cambiar la forma de autenticación una vez iniciada sesión:
> alter user root@localhost identified via mysql_native_password;
Hecho esto habrá que crear la contraseña:
> alter user root@localhost identified by 'XXXXXXXX';
Y actualizaremos la tabla de privilegios para aplicar los cambios de inmediato:
> flush privileges;
Ya podemos cerrar la conexión:
> exit
Desde este momento hay que especificar el usuario y solicitar contraseña para poder conectar:
~$ mysql -u root -p Enter password: ... MariaDB [(none)]>
En cualquier momento puedes volver al sistema de autenticación sin contraseña, por socket de Unix, iniciando sesión y cambiando de nuevo el método:
> alter user root@localhost identified via unix_socket;
Y conviene refrescar la tabla de permisos nuevamente:
> flush privileges;
Cómo probar la pila LAMP en Ubuntu 20.04
Para probar la pila LAMP en Ubuntu 20.04 crearemos un pequeño script en PHP fácilmente accesible vía web:
~$ sudo nano /var/www/html/info.php
El contenido será esta única línea:
<?php phpinfo();
Una vez, guardado el archivo podremos acceder desde un navegador. Bastará con introducir como URL la dirección IP o dominio del servidor Ubuntu 20.04 añadiendo la ruta /info.php (o como hayas decidido nombrar el archivo).
Por ejemplo, el servidor Ubuntu 20.04 sobre el que realizamos este tutorial es accesible en el dominio ubuntu2004.local.lan, por lo que accedemos con http://ubuntu2004.local.lan/info.php como dirección:
Esta página nos ofrecerá gran cantidad de información sobre la configuración del servicio web y PHP, extensiones disponibles, etc.
Por ejemplo, si hemos instalado una versión alternativa de PHP, como la 8.3:
Es buena idea, por seguridad, eliminar este archivo (o darle un nombre difícil de averiguar):
~$ sudo rm /var/www/html/info.php
Conclusión
Ahora que sabes cómo instalar y configurar la pila LAMP en Ubuntu 20.04 LTS Focal Fossa ya puedes comenzar a desarrollar potentes aplicaciones web, o establecer la base sobre la que se apoyan aplicaciones de terceros.
Si te ha surgido alguna duda o pregunta, quieres sugerir mejoras de este artículo o crees que necesita una actualización, notificar algún error, etc., puedes dejar un comentario que leeré encantado.
¡Apoya comoinstalar.me!
¿Ya tienes el entorno funcionando gracias a esta guía de instalación y configuración de la pila LAMP en Ubuntu 20.04? Si es así y quieres agradecérnoslo, cualquier pequeña ayuda contribuirá más de lo que imaginas al mantenimiento de este sitio y la elaboración de nuevos tutoriales sobre Ubuntu 20.04 o la pila LAMP.
Puedes ayudar dejando una propina de 1 $ con el saldo que no usas en PayPal:
O, si te sientes especialmente generoso, puedes invitarnos a un café:
¡Gracias!
He seguido el tutorial al pie de la letra, y el único problema que he tenido es con iniciar ubuntu2004… Sé que no tengo que usar ese dominio pero soy nuevo en esto y no tengo ni idea de qué dominio tendría que usar, he probado a poner mi dirección IP, pero tampoco funcionaba y no sé cómo solucionarlo.
Hola, Pablo. Si no sabes qué dominio usar es que no tienes dominio configurado. En caso de trabajar localmente podrías usar http://127.0.0.1 ó http://localhost (añadiendo el resto de la URL de que se trate). Después de realizar la configuración, ¿has repetido el comando systemctl status mostrado en el tutorial tras la instalación para comprobar que el servicio web sigue en pie?
Hola, gracias por la respuesta.
Sí, he comprobado que tras el comando systemctl todo sigue en pie, probando con http://127.0.0.1 ó http://localhost no me aparece nada, me dice que no se ha encontrado la URL en el servidor.
Para poder aclarar más cosas, estoy usando Virtualbox para usar Ubuntu, tenemos un dominio comprado en Ionos en el que hemos instalado GLPi, por eso estoy intentando instalar OCS, así que no sé si podría usar el dominio que tenemos en Ionos contratado para la instalación de LAMP en Ubuntu.
Pablo, el problema que tienes es que estás usando la dirección de la máquina anfitriona en lugar de la de la máquina virtual Ubuntu. Teclea en la consola de Ubuntu el comando ip a para obtener la dirección IP de la máquina Ubuntu. Si al crear la máquina virtual elegiste el tipo de red adecuado, podrás acceder desde la máquina anfitriona a la virtual vía IP.
Ya pude arreglarlo, lo que me comentas de la IP era lo que estaba haciendo mal, muchísimas gracias de verdad, ya conseguí que funcionase.
¡Estupendo, Pablo!
El directorio «/etc/php/7.4/apache2» no existe.
Aham, ¿y qué versión has instalado? ¿Has comprobado qué directorios existen en la ruta /etc/php/?
Lo he probado decenas de veces y ha sido imposible instalar la pila LAMP en Ubuntu 20.04.
Obviamente estarás haciendo algo mal, este es uno de los tutoriales más sencillos de nuestro sitio.
Actualizado con las versiones más recientes de MariaDB para la pila LAMP.
Excelente. Todo perfecto. ¡Gracias!
¡De nada!
Excelente tutorial, sólo tengo una pregunta, ¿cuál es la diferencia, aparte de la instalación, con las instalaciones que haces por medio de apt?
Hola, Rolando. Lo siento, pero no he entendido a qué te refieres.
¡Gracias!
Mi servidor ya listo para jugar un poco con él.
Estupendo, Changos. Aquí encontrarás material sobre qué poder hacer con tu servidor LAMP en Ubuntu 20.04 LTS.
Gracias por el tutorial, veo en el LAMP que no tengo instalado los drivers PDO, cuando hago la instalación de cierta aplicación no me deja avanzar.
Hola, Gabriel. Para instalar la aplicación a la que te refieres basta con instalar la extensión MySQL que menciona este tutorial. ¿Qué versión de PHP estás utilizando?
Para acceder a la URL, no es necesario especificar local.lan, sino simplemente el nombre de tu dominio en este caso ubuntu2004/info.php y debería funcionar sin problemas.
No solo no es necesario especificar local.lan, sino que no funcionará, a no ser que sea el dominio de tu red, por eso al principio del párrafo se especifica que es un EJEMPLO. Por otro lado, ubuntu2004 no es un dominio, sino el hostname o nombre de máquina. En caso de una red compleja o trabajar en un servidor o VPS en Internet, difícilmente se podrá acceder sólo con el nombre de máquina.
Tengo el problema de «Fernando alma de cántaro», la IP pública varía cada vez que accedes de nuevo… Cómo lo soluciono…
Gracias, magnífico artículo.
Hola, Emilio, el problema de Fernando es otro. Para lo que tú comentas investiga sobre DNS dinámico y si es aplicable en tu caso.
NO FUNCIONA. NO accede a http://ubuntu2004.local.lan/info.php.
Hice TODOS los pasos descritos pero NO FUNCIONA.
A ver, Fernando, alma de cántaro, lo que no funciona es tu comprensión lectora. Es normal que no puedas acceder a esa URL porque tal como se indica claramente, el subdominio ubuntu2004.local.lan pertenece a mi red local. Justo en el párrafo anterior se explica que debe utilizarse la dirección IP o dominio (si existe) de TU máquina Ubuntu 20.04 LTS.
La versión 7.4, por algún motivo no estaba instalada, la he instalado y me ha creado una carpeta en la ruta /etc/php/7.4/cli, la cual dentro tiene un php.ini, la ruta no es la misma, ¿pero debería funcionar esta instalación modificando ese archivo?
Hola, Brais. Ese php.ini corresponde a la versión de consola de PHP, la que llamas con el comando php. Creo que te falta instalar también el módulo de PHP 7.4 para Apache, que es el que crea el php.ini que te interesa.
Genial, he instalado el módulo de PHP 7.4, he hecho los cambios en php.ini y ha funcionado a la perfección, es extraño porque en teoría se me había instalado todo bien pero parece ser que lo que hizo fué saltarse la instalación de PHP sin dar ningún error y se me pasó, ya he conseguido ejecutar phpinfo sin problemas, eso quiere decir que está la pila LAMP correctamente instalada, ¿no?
Muchas gracias.
Sí, si no has olvidado instalar la extensión de PHP para MariaDB/MySQL, que es lo que une todos los elementos de la pila LAMP en Ubuntu 20.04 LTS.
Buenas tardes, he seguido el tutorial y todo bien hasta el momento de localizar la carpteta de PHP, accedo a /etc/php/7.4 y ahí dentro sólo está la carpeta llamada mods-available, no está el php.ini, en ninguna de las 2 rutas que se exponen, ¿a qué puede ser debido? Hasta ese momento no he tenido error alguno.
Un saludo.
Hola, Brais. ¿Qué versión de PHP has instalado? Puedes comprobarlo con el comando php -v.
Buenas noches. Cometí un error y ahora cada vez que quiero iniciar sesión con mysql me dice el error que el plugin ‘micontrasena‘ no está cargado. ¿Qué podría hacer?
¿El usuario afectado con el plugin erróneo es root o es otro usuario?
Era el usuario root, pero ya inicié MySQL en modo seguro y arreglé eso, gracias.
¡Estupendo, Pedro!
Hola, muy buen trabajo.
Les felicito, muy claro y cada comando funciona.
¡Gracias, Erwin!
No consigo entrar con el comando sudo mysql, me da error.
sudo mysql
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)
Hola, valek. ¿Has comprobado que el servicio MariaDB esté funcionando? Por ejemplo con systemctl status mariadb. Si el servicio no está en funcionamiento quizá puedas encontrar el motivo en el registro de errores, en el archivo /var/log/mysql/error.log.
Muy bueno este tutorial, aclaré muchas dudas, gracias por su dedicación.
¡De nada, Carlos! Me alegra que te haya servido.
Hola,
No consigo ver la información del info.php creado con el tutorial…
No sé si quizá es por que cometí algún fallo al seguir tus pasos.
Hola, Roberto. Deberías indicar algo más de información sobre tu problema.
¿Accedes local o remotamente? ¿Puedes acceder a la página web principal del servidor LAMP (sin añadir /info.php)? ¿Con qué URL completa visitas la página info.php? ¿Qué errores o qué comportamiento obtienes al acceder?
Tengo el mismo problema, no puedo ver la información del PHP, mientras tanto sí puedo ver la información del Apache pero cuando agrego el /info.php se queda en blanco.
¡Hola, Iván! Revisa el contenido del archivo info.php, puede que haya algún error. Si crees que todo está correcto revisa el archivo de registro de Apache, en /var/log/apache2/error.log, donde quizás encuentres información sobre el problema.