Un SSD reciclado, una Raspberry Pi y una web en internet sin tocar el router.
La máquina es una Raspberry Pi 4 de 8GB, metida en una caja DeskPi Pro V3 de 52Pi, con Debian sin entorno de escritorio. El disco es un SSD que rescaté de un portátil viejo que ya no usaba (el mismo que el del Post 2). Empezó siendo un nodo de observabilidad (para todo el Homelab) y con el tiempo pasó también a servir a internet.
Servir un sitio web desde casa tiene un obstáculo importante: Tener abrir un puerto en el router y exponer tu IP a todo internet. Es la parte que más respeto impone, con razón, pero existe una solución.

Desarrollado con
- Nginx como servidor web: recibe la petición del navegador y devuelve los archivos.
- Cloudflare Tunnel (el binario se llama cloudflared) para publicar sin abrir puertos.
Instalación
Como ya sabrás, Nginx sale directo de los repositorios de Debian:
sudo apt update
sudo apt install nginx Con cloudflared hay un paso extra: no está en los repos oficiales de Debian, así que hay que añadir el de Cloudflare y luego instalar como cualquier otro paquete:
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg \
| sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] \
https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" \
| sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update
sudo apt install cloudflared Y ya está. Los dos servicios quedan gestionados por systemd (systemctl status nginx, systemctl status cloudflared) y arrancan solos al reiniciar la Raspberry.
Nginx + Cloudflare Tunnel
Cloudflare Tunnel evita el puerto abierto de una forma sencilla: en vez de esperar conexiones entrantes, la Raspberry abre una conexión saliente hacia Cloudflare y la mantiene viva. Cuando alguien visita la web, la petición llega a Cloudflare y esta la reenvía por ese túnel. El router sigue sin un puerto abierto. No hay puerta que tocar.
Una configuración básica es ultra simple y esa es la gracia. Un bloque de nginx:
server {
listen 8080;
server_name tudominio.com;
root /var/www/tuweb;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}Nginx escucha en HTTP plano porque el cifrado ya lo pone Cloudflare en el tramo público. Y el túnel apuntando al puerto en cuestión puerto:
tunnel: <tunnel-id>
credentials-file: /etc/cloudflared/<tunnel-id>.json
ingress:
- hostname: tudominio.com
service: http://localhost:8080
- service: http_status:404
Sin certificados que renovar a mano, sin tener en cuenta NAT, sin nada que abrir. Del caos...

Al orden... pero como tú quieras. Cuestiona cada parte, cambia lo que no te guste. La idea no es copiar esto línea por línea, sino entender el concepto.
Lo que de momento este sistema sirve a internet
Detrás de ese nginx corre meowrawr.org, una wiki sobre felinos. Cómo está construida por dentro (generación estática con 11ty, de dónde salen los datos de cada especie) está contado en su página sobre el proyecto.

Fin
No hace falta gastar en hosting ni exponer tu IP para tener algo tuyo en internet. Con una Raspberry Pi que ya tengas por casa y una tarde libre, esto se replica.
Si tienes cualquier duda, estaremos encantados de que contactes e intentemos resolver cualquier problema que te surja.