Cómo instalar LAMP en Debian 9 Stretch

Cómo instalar LAMP en Debian 9 Stretch

  • Autor de la entrada:
  • Categoría de la entrada:Linux
  • Comentarios de la entrada:4 comentarios

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

Partiendo de una nueva instalación básica de Debian 9 si tienes tiempo puedes revisar entradas anteriores para llegar a este resultado:

Pero si tienes algo de prisa, en esta entrada tienes la receta completa y resumida.

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.
  • Los paquetes ca-certificates y gnupg.
  • Acceso a línea de comandos con un usuario con permisos de sudo o el mismo root (menos recomendable).
  • Conexión a Internet.

Si estás consultando este tutorial es porque ya los cumples, así que pongámonos manos a la obra.

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 el software que aparte de Apache, PHP y MariaDB lo instalaremos desde repositorios alternativos. Si prefirieras MySQL en lugar de MariaDB se necesitan repositorios adicionales, todo lo tienes explicado en la guía de instalación de MySQL en Debian 9 Stretch.

PHP 7.4

Si necesitas una versión de PHP superior a la 7.0 entonces sí que debemos instalar un repositorio adicional. Sigue estos pasos sólo si quieres disfrutar de PHP 7.4 y las próximas versiones.

Instala el paquete apt-transport-https:

~$ sudo apt -y install apt-transport-https

Descarga 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

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

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

Añade esta línea al nuevo archivo:

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

Guarda los cambios y cierra el archivo.

MariaDB 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 creando el archivo de repositorio:

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

Añadimos la configuración del repositorio:

deb http://ftp.ddg.lth.se/mariadb/repo/10.4/debian stretch main

Guardado el archivo, instalamos algunas herramientas necesarias para importar la clave pública con la que se firman los paquetes de este repositorio:

~$ sudo apt install -y curl dirmngr

E instalamos la clave pública:

~$ 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:

~$ 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/7.X/apache2/php.ini:, donde X variará de 0 a 4 dependiendo de si has elegido la versión nativa PHP 7.0 de Debian o PHP 7.4 del repositorio de sury.org. En este ejemplo nos decantaremos por PHP 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

 

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.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, ¡siempre puedes invitarme a un café!

 

O si te resulta más cómodo, puedes dejar 1 $ de propina en PayPal:

¡Gracias!

 

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (12 votos, promedio: 5,00 de 5)
Cargando…

Esta entrada tiene 4 comentarios

  1. ruben

    falto instalar el cliente mysql

    1. chachocool

      ¡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.

  2. Gustavo

    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 esta bien conectado, por que sucede esto ??.
    Saludos;

    1. chachocool

      ¡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.

Deja una respuesta