Configurar un Servidor Web LAMP En Una Raspberry Pi en 2022

Configurar un servidor web puede ser útil para varios proyectos. Desafortunadamente, no es realmente sencillo, especialmente si necesitas PHP y una base de datos MySQL. Yo también soy un desarrollador web y he construido muchos proyectos web, así que estoy acostumbrado. Pero entiendo que puede ser abrumador para algunos de vosotros.
Vamos a ver cómo configurar un servidor web de la manera correcta.

Estos son los pasos necesarios para configurar un servidor web en una Raspberry Pi:

  • Se recomienda instalar Linux, Raspberry Pi OS.
  • Instalar Apache, para responder a las peticiones HTTP.
  • Instalar PHP y configurar Apache para permitir el contenido dinámico.
  • Instalar MariaDB (MySQL), el servidor de bases de datos más popular.

Ahora aprenderemos a completar cada paso en detalle. También te mostraré cómo instalarlos y configurarlos para que funcionen juntos. Y terminaré este tutorial con algunos consejos extra.

Componentes del servidor web: Una introducción

Antes de profundizar en los pasos de instalación, quiero asegurarme de que todo el mundo entiende lo que estamos haciendo y cómo funciona un servidor web.

Apache

El objetivo principal del servicio Apache es responder a las solicitudes en los puertos HTTP y HTTPS de tu Raspberry Pi.
HTTP y HTTPS son los principales protocolos de Internet para la navegación web.
Funciona porque Apache está aquí para responder a las peticiones del navegador en los puertos 80 y 443.

Cuando Apache recibe una solicitud en tu dirección IP de Raspberry Pi (por ejemplo: http://192.168.1.10), tiene que mostrar algo, dependiendo de su configuración de Apache.
Por lo general, es una página HTML para su sitio web o la aplicación que está utilizando en la Raspberry Pi.

Ejemplo de página HTML

HTML es un lenguaje servido por Apache y legible por su navegador para mostrar páginas web.

PHP

PHP está aquí para aportar contenido dinámico a sus páginas web.
El HTML es un lenguaje de páginas estáticas que puedes ampliar con código PHP que se ejecuta en el servidor para que tu página tenga un aspecto diferente en función de condiciones externas (idioma del visitante, historial del mismo, hora del día, etc.).

Esto es lo que ocurre cuando un visitante ve tu página:

  • PHP compila el código PHP en tu página (a través de un módulo de Apache).
  • PHP genera un código HTML específico.
  • Apache siempre muestra el código HTML estático, pero esta vez PHP lo ha generado antes.

Te mostraré ejemplos más adelante en este post para entender mejor esta parte.

Añadir código PHP en su página HTML, permitiendo un contenido dinámico.

MySQL

MySQL es un sistema de gestión de bases de datos que permite alojar una base de datos y almacenar cualquier dato que necesite mantener en su sitio.
Por ejemplo, en RaspberryTips, hay una base de datos con todos los posts, todos los enlaces de imágenes, todos los comentarios, etc.

MySQL incluye tres partes:

  • Un servidor: para almacenar datos en archivos y responder a las solicitudes.
  • Un cliente: para conectar el servidor de forma local o remota.
  • Un lenguaje específico (SQL): para obtener los datos necesarios desde la base de datos (desde PHP, por ejemplo).

PHP incluye funciones que permiten hacer peticiones a la base de datos MySQL, y mostrarlas en el sitio web.

MySQL es mi sistema de gestión de bases de datos favorito, pero hay otras opciones disponibles, como las que se enumeran en este artículo: ¿Qué base de datos es mejor para Raspberry Pi? (Mi Top 5). (en inglés)

¡Hola!
Inscríbete para recibir mis últimos tutoriales cada semana.

Configurar un servidor web en Raspberry Pi

Llegados a este punto, deberías entender qué es cada componente (Apache, PHP y MySQL), y si los necesitas o no.
Si quieres crear un servidor web básico y estático, entonces Apache será suficiente.
O si quieres páginas dinámicas pero no necesitas guardar datos en el servidor, Apache y PHP serán suficientes.

Dejaré que elijas y que te saltes las partes innecesarias en el siguiente proceso.

Paso 1: Instalar y actualizar el sistema operativo

Para empezar, estos son los requisitos previos necesarios:

  • Instala Raspberry Pi OS en tu Raspberry Pi si no lo has hecho ya.
    Haz clic en el enlace para leer mi tutorial completo sobre esto si es necesario. Cualquier versión está bien.
  • Crea el usuario por defecto y conecta tu dispositivo a Internet.
  • Actualiza tu sistema para obtener la última versión de cada paquete:
    sudo apt update
    sudo apt upgrade

Una vez hecho esto, estás listo para comenzar con la instalación del primer componente de tu servidor web: Apache.

Paso 2: Instalar Apache

El siguiente paso es instalar Apache en tu Raspberry Pi.
Para ello, podemos utilizar APT, con este comando:
sudo apt install apache2
Pulse «Y» para confirmar la instalación.

Una vez completada la instalación, confirmaremos que Apache está funcionando:

  • Encuentre la dirección IP de tu Raspberry Pi.
    Haz clic en el enlace si no sabes cómo hacerlo.
  • Abra un navegador web y ve a http://<RASPBERRY IP>.
    Por ejemplo, http://192.168.1.18.
  • Comprueba que aparece una página como ésta:

Como puede ver en el contenido de esta página, las páginas web se encuentran en /var/www/html en la Raspberry Pi.
Puedes editar index.html para cambiar esta página o añadir nuevas páginas en la misma carpeta.
Para ello necesita privilegios de administrador, así que asegúrese de utilizar «sudo» como prefijo para todos sus comandos (más detalles aquí).

Otra opción es eliminar esta página y sólo subir los archivos que quieras compartir en esta carpeta.
Por ejemplo, si sólo necesitas compartir archivos en tu red, elimina el index.html y pon tus archivos directamente en /var/www/html, Apache generará automáticamente una página web con enlaces a cada uno.

Paso 3: Instalar PHP

El siguiente paso es instalar PHP para añadir capacidades de contenido dinámico a nuestro servidor web.

Instalación

Para instalar PHP, necesitamos añadir dos paquetes:
sudo apt install php libapache2-mod-php

El primero añade los paquetes centrales para PHP y la posibilidad de ejecutar scripts PHP en un terminal.
El segundo mejora Apache con capacidad PHP, permitiéndonos poner código PHP en nuestras páginas HTML.

Primera página PHP

Una vez instalado PHP, debemos comprobar que todo está bien con nuestra instalación antes de seguir adelante.

Sigue estos pasos para crear un archivo PHP y probarlo en tu navegador:

  • Ve a la carpeta web de Apache:
    cd /var/www/html
  • Crea un nuevo archivo PHP:
    sudo nano test.php
  • Copia este código en él:
    <?php phpinfo(); ?>
    Esta es una función básica de PHP para mostrar la configuración de PHP en el navegador.
  • Guardar y salir(CTRL+O, CTRL+X).
  • Abre esta URL con tu navegador web: http://<RASPBERRY IP>/test.php.
  • Esto debería mostrar algo como esto:

Si ves esta página, todo está bien, los servidores Apache y PHP están instalados correctamente, y puedes usar código HTML y PHP en tus páginas.
Pasa a la siguiente sección si también necesitas usar MySQL.

Paso 4: Instalar MySQL

El último componente es MySQL, y de nuevo lo instalaremos con APT:
sudo apt install mariadb-server php-mysql

El primer paquete (mariadb-server) instala el servidor principal para tus bases de datos MySQL.
El segundo paquete añade la posibilidad de utilizar funciones de MySQL en el código PHP (como el enlace entre Apache y PHP).

Es necesario reiniciar Apache para añadir esta funcionalidad:
sudo service apache2 restart

Tengo un tutorial completo sobre MariaDB sólo si quieres aprender más sobre esto. Pero te daré la versión rápida aquí.

Crea tu primer usuario de MySQL

MySQL almacena datos. La autenticación es necesaria para asegurarte de que sólo las personas autorizadas pueden acceder a estos datos.

Para un comienzo rápido, crearemos un superusuario de MySQL para usarlo en nuestro código PHP más adelante.
Pero puedes crear tantos usuarios como quieras con diferentes privilegios:

  • Inicia sesión en la consola de MySQL:
    sudo mysql
  • Crea tu primera base de datos:
    CREATE DATABASE test;
  • Crear el primer usuario:
    CREATE USER 'webuser' IDENTIFIED BY 'password';
    Intenta usar una contraseña fuerte inmediatamente, especialmente si te olvidas de cambiarla más tarde.
  • Añade todos los privilegios de nuestra base de datos de prueba a este usuario:
    GRANT ALL PRIVILEGES ON test.* To 'webuser'@'localhost' IDENTIFIED BY 'password';
  • Guarde los cambios:
    FLUSH PRIVILEGES;
  • Salir de la consola de MySQL:
    quit

Crear una primera tabla en la base de datos

Ahora tenemos una base de datos de prueba y un usuario de prueba. Confirmaremos que todo funciona bien creando una primera tabla en la base de datos para utilizarla después en el código PHP.

Si eres nuevo con estas palabras de base de datos, imagina la base de datos como una hoja de cálculo de Excel y una tabla como una pestaña en esta hoja de cálculo. En esta tabla almacenaremos los datos.

  • Vuelve a la consola de MySQL, pero esta vez con el «webuser»:
    mysql -uwebuser -ppassword test
  • Crear una tabla básica:
    CREATE TABLE IF NOT EXISTS test ( line_id INT AUTO_INCREMENT, data VARCHAR(255) NOT NULL, PRIMARY KEY (line_id) );
    Obviamente, esta es una tabla básica inútil, si quieres usar algo más puedes hacerlo.
    Pulse ENTER después de pegar la solicitud.
  • Inserte una línea en esta nueva tabla:
    INSERT INTO test (data) VALUES ("This is a test string in my database");
    Añadimos una primera línea en su tabla, con la frase de prueba en el campo de datos.
    Sí, soy muy creativo con esto.
  • Salir:
    quit

Ahora estamos listos para pasar al código PHP.
Tenemos todo lo que necesitamos (base de datos, tabla y usuario).

Primer script PHP para conectarse a MySQL

Después de todos estos pasos de preparación ahora podemos comprobar si PHP puede hablar con MySQL:

  • Ve a la carpeta Apache:
    cd /var/www/html
  • Cree un nuevo archivo PHP:
    sudo nano test-mysql.php
  • Pega estas líneas en él:
    <?php
    $link = mysqli_connect("127.0.0.1", "webuser", "password", "test");
    if($link) {
    $query = mysqli_query($link, "SELECT * FROM test");
    while($array = mysqli_fetch_array($query)) {
    echo $array['data']."<br />";
    } }
    else {
    echo "MySQL error :".mysqli_error();
    }
    ?>

    Es posible que tengas que editar la primera línea para que se ajuste al nombre de usuario y contraseña.
    No voy a hacer una lección de PHP aquí, pero básicamente, este script intenta conectarse a tu servidor MySQL y leer la tabla «test». Si tiene éxito, muestra todo el contenido de la tabla «test» en su navegador web.
  • Guardar y salir (CTRL+O, CTRL+W).
  • Cambia al navegador web y comprueba la URL: http://<RASPBERRY IP>/test-mysql.php.
    Esto debería mostrar el contenido de su tabla de base de datos.

Ya sabes cómo instalar un servidor web básico y crear una primera página para conectarte a MySQL y mostrar algo de la base de datos.
Eres libre de adaptar la base de datos y el código PHP a tus necesidades.

Consejos adicionales

Te voy a dar dos consejos extra para mejorar tu servidor web o para facilitar su gestión.

PHPMyAdmin

Anteriormente en este post, realizamos todos los cambios en la base de datos MySQL de forma manual, haciendo las peticiones SQL directamente para crear usuarios, conceder accesos o insertar datos.
Pero hay una herramienta popular para hacer esto de forma más rápida e intuitiva: PHPMyAdmin.
Es una herramienta gratuita que proporciona una interfaz web para gestionar su servidor MySQL.

Para instalar PHPMyAdmin, siga estos pasos:

  • Instala el paquete con apt:
    sudo apt install phpmyadmin
  • Durante el proceso de instalación, seleccione estas opciones:
    • Seleccione Apache2 (pulse la barra espaciadora y luego la tecla «Enter»).
    • Configurar la base de datos para PHPMyAdmin with db-common: No
  • Después de la instalación, vaya a http://<RASPBERRY IP>/phpmyadmin.
  • Inicie la sesión con el usuario creado anteriormente.
  • Encontrarás tu base de datos en el menú de la izquierda, con la tabla dentro y los datos a la derecha.
    Algo así:
  • También encontrarás un menú intuitivo para hacer todo dentro de tu base de datos.

Anfitriones virtuales

Si quieres alojar varios sitios web o aplicaciones en tu Raspberry Pi, tienes dos opciones:

  • Utilizar una carpeta para cada aplicación, como http://192.168.1.1/app1 y http://192.168.1.1/app2.
  • Utilizar hosts virtuales para tener una dirección como http://app1.domain.com y http://app2.domain.com.

Para la primera opción, basta con crear tantas carpetas como necesites en /var/www/html.
Para la segunda, es necesario:

  • Añade subdominios en tu servidor DNS o en tu archivo de hosts.
  • Crea hosts virtuales en la configuración de Apache, uno para cada subdominio.

Puedes realizar esta configuración en la carpeta /etc/apache2/sites-enabled/.
Encontrarás toda la ayuda que necesita en esta página por ejemplo.

Conclusión

Espero que este artículo te ayude a instalar un servidor web básico en tu Raspberry Pi.
Creo que esto es más bien una guía para principiantes, y podría escribir mucho más sobre este tema.
Si te interesa, crearé otros posts sobre Apache/PHP/MySQL para ayudarte a dominar estos servicios principales en Linux.

Estos otros tutoriales pueden ser interesantes para continuar tu proyecto:

Además, si tu sitio web es algo esencial, como con aplicaciones reales que necesitan ser accesibles en todo momento, y los usuarios remotos, es probablemente una buena idea para poner algo en el lugar para supervisar. Puedes leer mi artículo sobre el tema aquí: La guía definitiva para supervisar un sitio web en Raspberry Pi (en inglés)

Publicaciones Similares