Cómo instalar LAMP en Debian 9 Stretch

En este tutorial vamos a aprender cómo instalar la pila LAMP en Debian 9 Stretch ó, para ser más exactos, cómo crear un servidor o VPS Debian con Apache, MariaDB (o MySQL) y PHP para tener la base sobre la que instalar aplicaciones web o alojar sitios gracias a cualquiera de los muchos CMS disponibles.

Antes de instalar LAMP en Debian 9

Para seguir los pasos de esta guía de instalación LAMP en Debian 9 Stretch necesitarás cumplir estos requisitos:

  • Un sistema Debian 9 Stretch actualizado.
  • Acceso a línea de comandos con un usuario con permisos de sudo o el mismo root (menos recomendable).
  • Conexión a Internet.

También necesitaremos algunas utilidades y herramientas del sistema, que obtendremos desde los directorios de Debian 9, así que actualizamos las listas de paquetes:

~$ sudo apt update

E instalamos estas herramientas:

~$ sudo apt -y install apt-transport-https ca-certificates dirmngr

Cómo instalar LAMP en Debian 9

Actualmente no es interesante usar exclusivamente los paquetes presentes en los repositorios oficiales de Debian 9, por lo que instalaremos PHP y MariaDB desde repositorios alternativos. Si prefirieras MySQL en lugar de MariaDB tienes explicados todos los pasos en la guía de instalación de MySQL en Debian 9 Stretch.

PHP 8.0 ó 7.4

En caso de necesitar una versión de PHP superior a la 7.0 (algo más que probable) debemos instalar un repositorio adicional, de modo que podremos disfrutar de las versiones 7.4, 8.0 e incluso los próximos lanzamientos para nuestra pila LAMP.

Descargamos la clave pública para comprobar las firmas del nuevo repositorio:

~$ sudo wget -O /etc/apt/trusted.gpg.d/php-sury.org.gpg https://packages.sury.org/php/apt.gpg

Creamos el nuevo archivo para la información del repositorio:

~$ sudo nano /etc/apt/sources.list.d/php-sury.org.list

Añadimos esta línea al nuevo archivo:

deb https://packages.sury.org/php/ stretch main

Guardamos los cambios y cerramos el archivo.

MariaDB 10.5 ó 10.4

La versión incluida en los repositorios de Debian 9 Stretch es MariaDB 10.1, por lo que puede que no sea una opción muy interesante. En su lugar podemos instalar el repositorio oficial de MariaDB para otras versiones superiores, por ejemplo para la versión 10.5, creando el archivo de repositorio:

~$ sudo nano /etc/apt/sources.list.d/mariadb.org-10.5.list

Añadimos la configuración del repositorio:

deb http://mirrors.chroot.ro/mariadb/repo/10.5/debian stretch main

Una vez guardado el archivo, importamos la clave pública con la que se firman los paquetes de este repositorio:

~$ wget -O- 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xF1656F24C74CD1D8' | sudo apt-key add -

Cómo instalar Apache, MariaDB y PHP en Debian 9

Los paquetes que necesitaremos para la instalación son apache2, libapache2-mod-php, mariadb-server, y php_mysql. Empezaremos actualizando el sistema:

~$ sudo apt update && sudo apt upgrade -y

Y ya podemos instalar todos los paquetes. Si no indicamos número de versión en el nombre de los paquetes de PHP, se instalará la considerada como última versión estable en ese momento.

El problema que tiene esa forma de hacer la instalación es que cuando aparezca una nueva versión y el mantenedor del repositorio la considere como estable, una actualización rutinaria de paquetes podría hacernos cambiar a dicha nueva versión, lo que podría provocar que ciertas aplicaciones web dejaran de funcionar por no estar preparadas.

Lo recomendable es especificar la versión exacta que deseamos indicando dicho número de versión en el nombre de los paquetes; por ejemplo, para PHP 8.0:

~$ sudo apt -y install apache2 libapache2-mod-php8.0 mariadb-server php8.0-mysql

O para PHP 7.4:

~$ sudo apt -y install apache2 libapache2-mod-php7.4 mariadb-server php7.4-mysql

Y si entiendes el riesgo de no especificar el número de versión, puedes instalar la última disponible:

~$ sudo apt -y install apache2 libapache2-mod-php mariadb-server php-mysql

Estado de los servicios tras la instalación

Una vez descargados, desempaquetados e instalados los paquetes y sus dependencias podemos comprobar en qué estado se encuentran los servicios. Veremos que tanto el servicio de Apache como el de MariaDB están iniciados mediante el comando systemctl status apache2 mariadb:

como instalar lamp en debian 9 stretch

Ambos servicios no sólo están funcionando, sino que están activados para iniciar con el sistema, cada vez que este sea reiniciado.

Configurar el firewall

Si tienes activado el firewall UFW necesitarás añadir algunas reglas para tu sistema LAMP en Debian 9.

Para permitir el protocol HTTP estándar:

~$ sudo ufw allow http

Y si piensas ofrecer conexión segura, habrá que permitir también el protocolo HTTPS seguro:

~$ sudo ufw allow https

Cómo configurar la pila LAMP en Debian 9 Stretch

Con los servicios con la configuración por defecto, es necesario realizar algunos pequeños ajustes. En realidad es poca cosa, en unos instantes lo tendremos todo listo.

Configuración rápida de PHP

Para ajustar la configuración por defecto de PHP para Apache, debemos editar el archivo /etc/php/X.X/apache2/php.ini, donde X.X variará de 7.0 a 8.0 dependiendo de si has elegido la versión nativa PHP 7.0 de Debian o las versiones de PHP 7 y 8 del repositorio de sury.org.

Por ejemplo, para la versión 7.4:

~$ sudo nano /etc/php/7.4/apache2/php.ini

Algo que es muy recomendable es ajustar la zona horaria del servidor, a través de la cláusula date.timezone del archivo de configuración. Por defecto no viene configurada ninguna zona:

...
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone =
...

En este ejemplo configuraremos la zona horaria de España peninsular:

...
date.timezone = Europe/Madrid
...

Los valores para cualquier zona horaria que necesites los puedes encontrar en http://php.net/manual/es/timezones.php.

Información sobre errores

La configuración por defecto de PHP en cuanto a información de errores del código de las aplicaciones web está orientada a entornos de producción. Esto significa que cuando PHP encuentra un error en una aplicación la detiene sin informar en el navegador sobre qué está ocurriendo. Un comportamiento así es el adecuado para un servidor de producción, pero para un servidor de desarrollo preferiremos que PHP nos ayude a depurar los errores con mensajes de error.

Sólo si el servidor LAMP que estás preparando es para pruebas o desarrollo y quieres obtener los posibles mensajes de error en el navegador, buscaremos las siguientes cláusulas en php.ini y cambiaremos sus valores por los que te muestro en este ejemplo:

...
error_reporting = E_ALL
...
display_errors = On
...
display_startup_errors = On
...

Después de hacer cualquier cambio en la configuración de PHP hay que recargar la configuración de Apache manualmente:

~$ sudo systemctl reload apache2

Comprobación rápida del funcionamiento de PHP

Si a estas alturas no puedes esperar a ver si PHP y Apache están correctamente integrados, lo comprobaremos con un pequeño script de PHP, que guardaremos, por ejemplo, en /var/www/html/info.php:

~$ sudo nano /var/www/html/info.php

El contenido será solamente este:

<?php phpinfo();

Como la raíz de documentos web de Apache se encuentra por defecto en /var/www/html/ este archivo info.php será accesible desde direcciones como http://localhost/info.php, http://127.0.0.1/info.php o desde el exterior del servidor mediante su dirección IP o nombre de dominio cualificado (si lo tiene) añadiendo /info.php:

instalar lamp en debian 9 stretch
Servidor LAMP funcionando correctamente en Debian 9 Stretch

Si nos decantamos por PHP 8, se mostrará igualmente la página de información de esta versión:

instalar y configurar la pila lamp en debian 9 stretch

Configurar rápidamente MariaDB

La configuración por defecto de MariaDB viene sin usuarios anónimos y sin bases de datos de pruebas. Además, el usuario root no tiene contraseña, ya que está configurado con el plugin de autenticación unix_socket, lo que implica que sólo se podrá acceder desde la cuenta de Debian 9 de root o cualquier otro usuario con privilegios de sudo.

Si consideras que es importante que el usuario root de MariaDB inicie sesión con contraseña, habrá que desactivar el plugin unix_socket.

Conectamos al servicio con el cliente mysql y sudo:

~$ sudo mysql

En MariaDB 10.5 ó 10.4

Sólo será necesario crear una contraseña para el usuario root:

> alter user root@localhost identified by 'XXXXXXXX';

Refrescamos la tabla de permisos y cerramos la conexión:

> flush privileges;
> exit

En MariaDB 10.1

Desactivamos el plugin de autenticación, limpiando el contenido de ese campo (lo que provocará que se use el plugin por defecto, que es el que usa contraseña):

> update mysql.user set plugin='' where user='root';

Y asignamos una contraseña para root:

> set password for root@localhost = password('XXXXXXXX');

Sólo queda actualizar los permisos de la tabla de usuarios y salir del cliente:

> flush privileges;
> exit

Probando el cambio

Hemos accedido como root sin contraseña, y se la hemos asignado. A partir de este momento no es posible acceder como root si no se especifica la contraseña:

~$ sudo mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
~$ mysql -u root -p
Enter password:
...

MariaDB [(none)]>

Solucionado este detalle, continuamos.

Base y usuario de pruebas

Para comprobar que PHP puede trabajar con bases de datos MariaDB, vamos a crear una base y un usuario de pruebas en MariaDB que posteriormente emplearemos en un pequeño script PHP. Conectamos a MariaDB Server con el cliente de consola mysql y creamos la base, el usuario y los permisos de este sobre la base:

> create database pruebas;
> create user usuario@localhost identified by '1234';
> grant all privileges on pruebas.* to usuario@localhost;
> flush privileges;
> exit

Ya tenemos todo configurado y listo para probarlo.

Cómo comprobar el servidor LAMP Debian

Para comprobar que todos los elementos de nuestro servidor LAMP Debian encajan unos con otros, escribiremos un pequeño archivo PHP para testear el funcionamiento. Lo podemos crear en una ruta fácilmente accesible desde el navegador, como /var/www/html/test.php:

~$ sudo nano /var/www/html/test.php

El contenido sería el siguiente:

<?php
$enlace = mysqli_connect("127.0.0.1", "usuario", "1234", "pruebas");

if (!$enlace) {
    echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
    echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL;
    echo "error de depuración: " . mysqli_connect_error() . PHP_EOL;
    exit;
}

echo "<h1>Éxito: ¡Se realizó una conexión apropiada a MySQL!</h1>" . PHP_EOL;
echo "<h2>Información del host: " . mysqli_get_host_info($enlace) . "</h2>" . PHP_EOL;

mysqli_close($enlace);

Hemos empleado los datos de conexión del ejemplo anterior. Si has creado una base y un usuario distintos, cámbialos en el script PHP.

Al introducir la URL correspondiente en el navegador veremos algo como esto:

lamp en debian 9 stretch
Comprobación del funcionamiento del nuevo servidor LAMP en Debian 9

Y si obtenemos esta pantalla en lugar de un mensaje de error, es que todo ha funcionado como esperábamos. Ya estamos listos para empezar a desarrollar nuestras aplicaciones web o a instalar tu CMS favorito, por ejemplo.

Conclusión

Ahora que ya sabes cómo instalar LAMP en Debian 9 estás listo para desarrollar aplicaciones complejas basadas en frameworks como Yii, CodeIgniter, etc. o instalar el CMS de tu elección. Un servidor LAMP siempre es el cimiento sobre el que se basan estos sistemas, por lo que es interesante saber desplegarlo de forma rápida y eficaz.

Es cierto que existen paquetes «todo en uno» que realizan estas tareas de forma más automatizada, pero muchos preferimos conocer cómo funciona cada pieza del sistema y cómo configurarla de forma específica.

Si te ha quedado alguna duda, o tienes preguntas o sugerencias sobre nuevos artículos, déjame un mensaje.

Y si has encontrado verdaderamente útil este artículo y quieres agradecérmelo, puedes hacerlo dejando 1 $ de propina desde PayPal:

O, si te sientes especialmente agradecido, puedes invitarme a un café:

¡Gracias!

5/5 - (2 votos)

4 comentarios en «Cómo instalar LAMP en Debian 9 Stretch»

  1. Hola, Chacho, muchas gracias por tu aporte, me sirvió.
    Un tema, en el código del archivo test.php no utilizas el cierre de PHP, yo lo puse y cuando corrí el programa me dio error, cuando lo saque, medio el mensaje de que todo está bien conectado, ¿por qué sucede esto?
    Saludos.

    Responder
    • ¡Hola, Gustavo! Se considera buena práctica no aplicar la etiqueta de cierre en los archivos que contienen exclusivamente código. En cualquier caso, he colocado dicha etiqueta ?> al final del ejemplo test.php y funciona correctamente.

      Responder
    • ¡Hola! El cliente de consola es una de las dependencias del servidor, por lo tanto está disponible al instalar todos los paquetes para la pila LAMP.

      Responder

Deja un comentario

Este sitio esta protegido por reCAPTCHA y laPolítica de privacidady losTérminos del servicio de Googlese aplican.

El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.