Instalar y configurar un servidor web en RaspberryPi

Esta entrada es mas para consulta personal sobre como tener un entorno local de desarrollo para la construcción de paginas web en una RaspberryPi sin necesidad de tener que tener acceso a un servidor web en producción que es donde se colocaran finalmente las paginas. Es por eso que no es recomendable utilizar este manual para un servidor en producción simplemente para desarrollo y experimentación.

Estas notas se resumen en “Pasos” para facilitar su consulta.

Requisitos:

Necesitaremos una Raspberry Pi (en mi caso cuento con una 3B+) con RaspberryPi OS instalado. (No es la versión oficial de debian, si quieres usar la versión oficial de debian debes visitar el proyecto oficial que es https://raspi.debian.net/.

También necesitamos acceder a la terminal del sistema operativo de la Raspberry con permisos de SUPERUSUARIO.

Conexión a internet.

Paso 0: Actualizar el sistema operativo de la RaspberryPi

Para actualizar el sistema operativo de la RaspberryPi basta con escribir en la consola:

sudo apt update && apt upgrade -y

Esto actualizara el sistema operativo por completo y aplicara las actualizaciones sin preguntarnos.

Paso 1: Instalar Apache

Para instalar apache que es el servicio tal cual que nos permite tener un servidor web bastara con escribir la siguiente linea en la terminal:

sudo apt install apache2 -y

Paso 2: Instalar MariaDB

MariaDB es el servicio LIBRE que nos permite trabajar con bases de datos SQL, y funciona con los mismos comandos que MYSQL (que no es libre) pero hace muy bien su trabajo.

sudo apt install mariadb-server mariadb-client

Paso 3: Instalar dependencias (Según tus necesidades)

En mi caso utilizare dos CMS el primero Drupal y el segundo WordPress por lo que usan “casi” las mismas dependencias que instalare con el siguiente comando:

sudo apt install -y php php-mysql php-apcu php-gd php-mbstring php-uploadprogress php-xml

Paso 4: Revisar el status de Apache

Para revisar si esta funcionando apache podemos hacerlo de dos formas, la primera es de manera visual visitando la dirección IP de nuestra raspberryPi en un navegador donde si todo funciona bien, nos encontraremos con el siguiente contenido:

La segunda opción es ejecutando el siguiente comando en la terminal:

sudo systemctl status apache2

Si todo va bien nos dará como resultado lo siguiente:

Paso 5: Crear las carpetas para nuestras paginas

Aquí es donde se puede poner un poco mas difícil, pero tampoco tiene mucha ciencia, si logramos entender la lógica del servidor web. Por defecto las paginas que serán “Publicas” están dentro de la ruta /var/www/ por lo que tendremos que colocar una carpeta por cada pagina que querramos alojar en nuestro servidor, por ejemplo yo he creado dos carpetas: la primera llamada drupal y la segunda llamada wordpress:

Debemos tambien cambiar lel propietario de estas carpetas a el usuario www-data y al grupo www-data para poder ser visualizadas mediante la web. El siguiente ejemplo nos permite hacerlo de manera facil con #UnComando

sudo chown -R www-data:www-data /var/www/drupal/

ó

sudo chown -R www-data:www-data /var/www/wordpress/

Como podemos ver existe también una carpeta llamada html que es la que crea Apache como muestra y dentro tiene la pagina que vimos mas arriba con nombre index.html

Nota: el crear las carpetas no significa que ya podemos poner nuestras paginas ahí, ahora deberemos trabajar con apache para decirle que en esas carpetas también habrá paginas publicas ya que ahora mismo son privadas.

Paso 6: Configurar los Host Virtuales para cada carpeta

Apache tiene una manera muy particular de “habilitar” los sitios y esto es por medio de un archivo de configuración que se encuentra en la ruta /etc/apache2/sites-available/ que de momento sin hacer nada contiene lo siguiente:

Como podemos ver ahora mismo hay dos archivos con extensión .conf que son los archivos que tiene de ejemplo apache para conocer un poco su funcionamiento, uno para la configuración por default (que es la que ahora mismo esta funcionando) y se llama 000-default.conf y una llamada default-ssl.conf que es un ejemplo para configurar los certificados de seguridad, aunque yo prefiero hacer esto con CERTBOT de la EFF que lo hace mucho mas fácil.

El contenido de 000-default.conf es el siguiente:

No es muy difícil de entender pero tratare de explicar las lineas, señalando que lo que se ve con # o comentado en verde no es parte de la configuración sino unas notas explicativas:

<VirtualHost *:80> —> Es el puerto donde se recibirán las conexiones y es el 80 por que es el estándar de las conexiones web (para el caso de las paginas con certificado de seguridad el puerto es 443).

ServerAdmin –> Es el contacto de quien administra el servidor web por si se necesita contactar con ella/el/elle y se coloca el correo electronico.

DocumentRoot –> Es muy importante por que es la linea de la Raiz o WebRoot que es lugar donde se encuentra nuestra pagina dentro de la RaspberryPi. Como vemos este que esta habilitado nos direcciona a /var/www/html que es donde esta la pagina de ejemplo.

ErrorLog –> Donde se guardaran los Logs de los errores de nuestro sistema, es buena costumbre cambiarlos para cada pagina y encontrarlos mas fácilmente cuando algo malo sucede.

CustomLog –> Donde se guardaran todos los Logs que no son de error, así que los comunes (todos al mismo saco jejeje)

<VirtualHost> –> es donde termina nuestra configuración del virtual host.

Paso 6.1 Crear los host virtuales

Lo primero es crear los archivos dentro de /etc/apache2/sites-available/ en mi caso seran dos por lo que los puedo crear con el siguiente comando estando situado dentro de la carpeta mencionada:

sudo touch drupal.conf
sudo touch wordpress.conf

Eso me creara los dos archivos que ahora mismo están en blanco:

Ahora deberemos editar cada uno de los archivos con su configuración en mi caso agregare una serie de cosas mas que explicare en cada uno.

El primero sera drupal lo editare con el siguiente comando:

sudo nano drupal.conf

Y pondré la siguiente configuración:

Explicación de los argumentos (excepto los que ya explique mas arriba):

ServerName –> Es el nombre para que sea identificado nuestro sitio dentro de el “indice”.

ServerAlias –> Es el subdominio que cree para poder tener varios sitios en un mismo servidor. Cuando alguien vaya a 192.168.0.26 ira a la pagina default, pero si alguien va a drupal.192.168.0.26 visitara el sitio alojado en /var/www/drupal.

Directory> –> Es una orden que se aplicara al directorio y se abra con este comando y se cierra como se ve mas abajo. En el caso de drupal Existen unas cosas llamas URL amigables que nos permiten tener URLs que sean leídas de manera mas fácil por humanos. y se habilitan con la propiedad AllowOverrride All

Terminando esto podremos guardar comenzar con wordpress que es básicamente lo mismo y ya es gusto de cada quien poner la propiedad de drupal que en mi experiencia no afecta y solo tendríamos que cambiar el subdominio y la ruta de la carpeta quedando así:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName wordpress.192.168.0.26
        ServerAlias wordpress.192.168.0.26
        DocumentRoot /var/www/wordpress
        <Directory /var/www/wordpress>
                AllowOverride All
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


Guardados los host virtuales podemos ejecutar al siguiente comando para reiniciar el servicio apache y lea las nuevas configuraciones.

sudo systemctl restart apache2

Paso 7: Habilitar los host virtuales

No basta con crear las configuraciones ahora hay que habilitar los sitios con el siguiente comando:

sudo a2ensite drupal.conf

y para wordpress

sudo a2ensite wordpress.conf

Estos comandos hacen un enlace simbólico entre los archivos .conf y los enlazan a la carpeta /etc/apache2/sites-enabled y ahi si es donde están los sitios habilitados.

Para habilitar el modulo “Rewrite” en el host virtual basta con ejecutar el comando:

sudo a2enmod rewrite

Ahora solo nos queda reiniciar apache para que lea los cambios con:

sudo systemctl restart apache2

Paso 8: creando bases de datos para ambos sitios

Ahora crearemos las bases de datos para los sitios entrando en la consola de MariaDB con el comando:

sudo mysql

Ya dentro de la consola utilizaremos el siguiente comando para crear la primera base de datos y haremos lo mismo para la segunda:

create database drupal_db;

Ahora crearemos un usuario llamado xolotl (puedes elegir el que quieras) y su contraseña con el siguiente comando (también puede ser como root):

create user xolotl@'localhost' identified by 'TUCONTRASEÑA';

Para dar privilegios al usuario sobre la base de datos necesitaremos ejecutar el siguiente comando:

grant all privileges on drupal.* to xolotl@'localhost';

Hay que hacer este mismo paso para todas las bases de datos que queramos usar con el usuario.

Solo nos falta refrescar los privilegios con el siguiente comando:

flush privileges;

Y con esto hemos creado las bases de datos y el usuario para utilizar en nuestros servicios web como drupal, ahora solo basta salir de la consola de MariaDB con el comando:

quit

Apartir de aqui solo me centrare en la instalación de drupal ya que en wordpress es casi lo mismo.

Paso 9: Instalando Drupal

Para finalizar mostrare como extraer el servicio drupal en su carpeta correspondiente por lo que nos situaremos en su carpeta destinada, en mi caso /var/www/drupal y descargare la ultima versión con el siguiente comando:

sudo wget https://ftp.drupal.org/files/projects/drupal-9.1.6.zip

Esto nos descargara un zip que deberemos descomprimir con el siguiente comando:

sudo unzip drupal-9.1.6.zip 

Y nos quedara así:

En este caso dentro de la carpeta /var/www/drupal nos crea otra carpeta llamada “drupal-9.1.6” y es un poco engorroso que suceda eso pero bastara con mover todos los archivos dentro de drupal-9.1.6 un nivel arriba, es decir en /var/www/drupal (no olvidemos los archivos ocultos. La idea es que nos quede así:

Aqui ya podremos borrar la carpeta 9.1.6 y tambien el ZIP que descargamos, para que nos quede asi

Si todo ha ido bien podremos hacer la prueba de fuego pero antes es muy importante cambiar el dueño de la carpeta /var/www/drupal que en este momento son propiedad del usuario root y necesitamos que sean propiedad del usuario www-data y el grupo www-data con el siguiente comando:

sudo chown -R www-data:www-data /var/www/drupal/

Así se ve antes:

Así se ve después del cambio de dueño:

Ya para terminar reiniciamos apache para que lea los cambios.

sudo systemctl restart apache2

Paso 10: La prueba de fuego

Para poder acceder desde otra maquina en nuestra red yo utilizo un sistema debian desde mi computadora principal y para agilizar la conexión edito el archivo /etc/hosts poniendo la ip de mi Raspberry a un dominio imaginario como el que pusimos en la configuración de los host virtuales, algo así:

y ahora si en el navegador de internet ponemos el dominio que queremos visitar, en este caso drupal.webserver.org

Listo 🙂 ahora solo basta seguir los pasos de la instalación y colocar la base de datos que hemos creado cuando nos lo solicite:

Notas finales:

Como vemos es relativamente sencillo crear un servidor web en una RaspberryPi para un uso experimental, si lo vemos de una manera sencilla o burda podemos crear y probar servicios web de software libre y gratuitos cada uno con su host y su base de datos, a mi me gusta experimentar con nuevos programas que veo en diferentes sitios.

Espero que esto le sirva a alguien mas además de mi y que lo disfrute, espero ser claro pero si en algo no entienden pueden escribir un comentario y con gusto tratare de responderles.

Besito, besitos chao chao!!!!

Xolotl