VictorJAM.zapto.org
Informática  PHP  Raspberry Pi  MariaDB  Linux 

2025-07-02

Instalar raspberry os lite.

Este sitio web está en local y me sirve para anotar cosas que voy aprendiendo, pero tenía una raspberry pi 1 aburrida en casa y decidí que a lo mejor era una buena idea tener mi sitio web colgado en la red para poder consultarlo cuando me de apetezca. Así que vamos a allá.

Poner una IP fija a la raspberry pi.

Para la gestión de la red la raspberry pi usa NetworkManager por defecto en la versión bookworm, en otras versiones, puede que esto lo cambien.

Lo primero que hay que hacer es comprobar como se llama la conexión ethernet (eth0), para ello usaremos el comando nmcli.

nmcli conection show

y obtendremos como respuesta algo como esto:

NAME                UUID                                  TYPE      DEVICE
Wired connection 1  ef7db539-e246-39c0-a96c-c1f9e19970a3  ethernet  eth0
lo                  d6e9412d-6df8-43ac-81ed-7a773ae26fb9  loopback  lo

Donde vemos el nombre que usaremos luego para ejecutar esta serie de comandos:

sudo nmcli connection modify "Wired connection 1" ipv4.addresses 192.168.8.104/24
sudo nmcli connection modify "Wired connection 1" ipv4.gateway 192.168.8.1
sudo nmcli connection modify "Wired connection 1" ipv4.dns "1.1.1.1 8.8.8.8"
sudo nmcli connection modify "Wired connection 1" ipv4.method manual
sudo nmcli connection down "Wired connection 1"
sudo nmcli connection up "Wired connection 1"

Las tres primeras líneas establecen la IP, la puerta de enlace y el DNS. Con la cuarta establecemos la IP fija y las dos últimas "reinician" la conexión.

Si estamos usando una conexión terminal posiblemente al echar abajo la red nos encontraremos que el terminal se desconecta, por lo que tendremos que reiniciar la raspberry o ponerle un teclado para poder echar activar la red.

Instalar nginx.

Podemos usar apache o nginx como servidor web, pero nginx es mas ligero y he optado por él.

Primero instalar:

sudo apt update
sudo apt install nginx -y

Luego debemos iniciar el servidor y habilitarlo:

sudo systemctl start nginx
sudo systemctl enable nginx

"Teóricamente" ya podemos acceder a nuestro servidor tecleando la IP de nuestra raspberry PI.

Instalar PHP

Ahora vamos a instalar PHP y el módulo PHP-FPM (que es necesario para que funciona PHP).

sudo apt update
sudo apt install php php-fpm -y

Se nos instalará la versión actual del repositorio de PHP, en mi caso la 8.2.

Ahora debemos comprobar si está activo el servicio:

sudo systemctl status php8.2-fpm

Debería indicar que está "active", en caso contrario debemos iniciarlo:

sudo systemctl start php8.2-fpm

En el caso de que la versión no sea la 8.2 debemos cambiar este número en la línea de comandos.

Por último debemos configurar nginx para que use php. Debemos editar el archivo de configuración del sitio por defecto:

sudo nano /etc/nginx/sites-available/default

Buscaremos esta sección y modificaremos lo necesario para que quede mas o menos así:

index index.php index.html index.htm;

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock; # Cambia el número si tu versión es distinta
}

Ahora necesitamos reiniciar ngingx

sudo systemctl reload nginx

Y para probar si funciona podemos crear una pequeña página de prueba.

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

Al cargar nuestro sitio en el navegador debería aparecer información sobre php y el servidor.

Instalar MariaDB

MariaDB es una especie de fork de MySQL que se ha extendido notablemente ya que este se ha vuelto algo comercial y es menos libre, por lo que es la opción que muchos desarrolladores están escogiendo.

Para instalar MariaDB debemos teclear:

sudo apt update
sudo apt install mariadb-server -y

Luego debemos asegurar la instalación:

sudo mysql_secure_instalation

Te hará una serie de preguntas a lo que debes responder:

  • Contraseña de root: pon una fuerte.
  • Eliminar usuarios anónimos: sí.
  • Deshabilitar root remoto: sí.
  • Eliminar base de datos de prueba: sí.
  • Recargar privilegios: sí.

Y ahora procedemos a probar si funciona:

sudo mariadb

Si todo va bien, debería aparecer el interprete de comandos de MariaDB. Teclea EXIT para salir de él.

Instalar SQLite3 para php

Este sitio web usa SQLite en vez de MariaDB, por lo que no carga bien y da error ya que por defecto tampoco viene instalado.

Para instalar:

sudo apt install php8.2-sqlite3

Recuerda que 8.2 es la versión de php y que si tienes otra distinta tienes que cambiar el número.

Reinicia php-fpm y nginx para tener en cuenta los cambios.

sudo systemctl restart php8.2-fpm
sudo systemctl restart nginx

Lo mas complicado verlo por Internet.

Ya tenemos php+ngignx con sqlite funcionando, pero ahora viene lo difícil, hacer que se nos vea en internet.

En nuestra red el equipo tiene una IP fija, pero de cara al exterior tendremos una dirección "real". Podemos ver esta dirección usando:

curl -s ifconfig.me

Si ponemos esta IP en el navegador (siempre y cuando el estemos fuera de nuestra propia red) accederemos al sitio que hemos creado. Pero esa dirección "real" es variable, eso quiere decir que cambia cada cierto tiempo.

Para resolver esto no nos queda mas remedio que usar un servicio como No-IP (o alguno equivalente). Para ello debemos registrarnos y crear una DNS de las que nos ofrecen, por ejemplo, victorjam.zapto.org.

Una vez estemos registrados, en Windows existe un programa que se llama DUC, que se encarga de actualizar el enlace a nuestra página con la dirección IP "real". En Linux existe un programa similar, que podemos instalar en la raspberry, pero presenta un problema con el archivo de configuración y no se ejecuta correctamente.

Pero podemos usar este script que funciona bastante bien:

#!/bin/bash

# Configura tus datos aquí
USERNAME="tucorreo@ejemplo.com"
PASSWORD="tucontraseña"
HOSTNAME="victorjam.zapto.org"

# Obtener IP pública actual
IP=$(curl -s ifconfig.me)

# Hacer petición de actualización
RESPONSE=$(curl -s "https://$USERNAME:$PASSWORD@dynupdate.no-ip.com/nic/update?hostname=$HOSTNAME&myip=$IP")

# Registrar log
echo "$(date): $RESPONSE" >> ~/noip.log

Hace la misma función de DUC, pero no necesitamos instalar nada ya que utiliza la API de No-IP.

A este script hay que darle derechos de ejecución:

chmod +x ~/noip-updater.sh

Y luego usar crontab para que se ejecute cada cierto tiempo, por ejemplo, cada 30 minutos.

crontab

Y añadir al final:

*/5 * * * * /home/pi/noip-updater.sh

Para que todo funcione correctamente debemos poder configurar el router para que el puerto 80 esté abierto, si no, todo lo que hagamos será en balde.

Accediendo a nuestro servidor

Para acceder a nuestro servidor usaremos de momento WinSCP, para copiar los archivos y manejar nuestro sitio.

Ante de nada debemos darle permisos a la carpeta:

sudo chown -R user:www-data /var/www/html

Y cuando hayamos terminado volver a dejar los permisos como estaban.

sudo chown -R 755 /var/www/html

Una cajita para el servidor.

Una vez montado el servidor ya podemos meterlo en una caja y dejarlo en su sitio, al lado del router.

La caja está hecha de madera con un listón de 20mm de ancho y madera de contrachapado de 3mm. He montado un lateral para tener acceso al conector rj45 y los USB. También en la parte superior de la caja he dejado un hueco para acceder al HDMI y al USB C.

No me gusta mucho la idea de alimentar la raspberry via usb C, así que he optado por instalar un Jack-DC y usar una fuente de 12V. El router también se alimenta a 12V lo cual en un futuro me puede permitir poner una batería tampón.

Los 12V los reduzco a 5V con un LM2596 cuya salida va al conector GPIO. Para evitar problemas con el potenciómetro ajustable, lo he desoldado y sustituido por una resistencia de 1K dando a la salida el módulo unos 4.96V.

Y no necesitamos nada mas, ni teclado, ni ratón, ni pantalla. El servidor se queda funcionando para subir los artículos.

Referencias

Pinout de la Raspberry

Guía de placas Raspberry