Exposición segura de servicios Docker
Exponer los sitios web alojados en mi servidor local de manera segura usando un túnel de Cloudflare, evitando exponer toda mi red. Los servicios corren en contenedores Docker sobre una Raspberry Pi Zero 2 W. Este proyecto sirve como laboratorio de prácticas de administración de servidores y seguridad.
Nombre del contenedor | Imagen | Puerto interno | Puerto host | Propósito |
---|---|---|---|---|
nginx_server | nginx | 80 | 80 | Reverse proxy |
josmacpac-site | nginx | 80 | 8080 | Sitio estático |
flask_app | app-flask | 8000 | — | Aplicación Flask |
sudo docker network connect NOMBRE_RED NOMBRE_CONTENEDOR
docker network ls
docker network inspect NOMBRE_RED
Verificamos si todos los contenedores están en la misma red:
docker network inspect NOMBRE_RED
Editamos el archivo de configuración de NGINX montado en la Raspberry y reiniciamos el contenedor.
La idea es que el túnel acceda a un único puerto, y NGINX actúe como reverse proxy hacia cada servicio.
server {
listen 80;
server_name app.dominio.com;
location / {
proxy_pass http://flask_app:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 80;
server_name web.dominio.com;
location / {
proxy_pass http://josmacpac-site:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Cloudflared permite crear un túnel seguro entre la Raspberry Pi y Cloudflare, sin abrir puertos en el firewall.
sudo apt update
sudo apt upgrade
curl -L https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-archive-keyring.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/cloudflare-archive-keyring.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
cloudflared tunnel login
cloudflared tunnel create NOMBRE_TUNEL
cloudflared tunnel route dns NOMBRE_TUNEL subdominio.dominio.com
Después de configurar el subdominio, se puede acceder desde el navegador: http://subdominio.dominio.com
Este método permite exponer solo los servicios necesarios desde la red local sin abrir puertos directamente. Es ideal para prácticas de administración de servidores y despliegue seguro con Raspberry Pi.