8 de sept de 2026
Exponer apps de Coolify a través de un Cloudflare Tunnel
Cómo crear un Cloudflare Tunnel, instalar el conector en tu servidor y enrutar tus dominios a través de él hasta Coolify, para que tus apps estén online sin un solo puerto abierto.

Introducción
Un Cloudflare Tunnel es una conexión saliente desde tu servidor hacia la red de Cloudflare. Un daemon chico llamado cloudflared corre en la máquina, se conecta a Cloudflare y, a partir de ahí, Cloudflare reenvía por esa conexión las solicitudes a tus dominios. El servidor nunca tiene que aceptar tráfico entrante: sin puertos abiertos, sin necesidad de IP pública, y nadie puede encontrar la dirección de tu origen con solo resolver tu dominio.
En este artículo te muestro cómo crear un tunnel, instalar el conector en el servidor y enrutar tus dominios a través de él hasta el proxy de Coolify, para que cada app que despliegues sea accesible a través de Cloudflare en vez de por puertos abiertos. Continúa justo donde terminó mi post sobre cómo instalar Coolify.
Para esta guía asumo que ya tenés una instancia de Coolify corriendo en un servidor Linux y un dominio administrado por Cloudflare.
Qué necesitás
- Un dominio cuyos nameservers apunten a Cloudflare. Los tunnels solo funcionan para zonas que administra Cloudflare.
- Una cuenta de Cloudflare con Zero Trust habilitado. El plan gratuito alcanza, aunque Cloudflare pide un método de pago durante el onboarding; no te van a cobrar.
- Un servidor con Coolify instalado. Ya no necesita IP pública, pero sí salida a internet.
Creando el tunnel
Abrí el panel de Zero Trust y andá a Networks -> Tunnels -> Create a tunnel. Elegí Cloudflared como tipo de conector, ponele un nombre al tunnel (yo lo llamo coolify) y guardalo.
La pantalla siguiente muestra los comandos de instalación para cada sistema operativo, cada uno con un token largo. Ese token es la credencial del tunnel: quien lo tenga puede conectar una máquina a tu tunnel, así que tratalo como una contraseña.
Instalando el conector en el servidor
Entrá por SSH al servidor y ejecutá los comandos del panel. En Debian instalan el paquete cloudflared y lo registran como servicio de systemd con tu token:
curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
dpkg -i cloudflared.deb
cloudflared service install <YOUR_TUNNEL_TOKEN>De vuelta en el panel, el conector debería aparecer unos segundos después con estado Healthy. Si no aparece, revisá el servicio:
systemctl status cloudflared
journalctl -u cloudflared -fdocker run -d --name cloudflared --restart unless-stopped \
--network coolify \
cloudflare/cloudflared:latest tunnel --no-autoupdate run --token <YOUR_TUNNEL_TOKEN>Enrutando un dominio a Coolify
Con el tunnel conectado, abrí su pestaña Public Hostname y hacé clic en Add a public hostname. Acá es donde le decís a Cloudflare qué dominio va a dónde:
- Subdomain: el nombre de tu app, por ejemplo
blog. - Domain: tu zona de Cloudflare,
example.com. - Service: tipo HTTP, URL
localhost:80. Ese es el proxy de Coolify (Traefik), que va a mirar el header Host y enrutar la solicitud al contenedor correcto.
Guardá, y Cloudflare crea el registro DNS por vos: un CNAME proxied de blog.example.com a la dirección del tunnel. Sin registro A, sin IP en ningún lado.
*.example.com CNAME <TUNNEL_ID>.cfargotunnel.com (proxied)Configurando la app en Coolify
Abrí el recurso en Coolify y configurá su dominio como http://blog.example.com. Sí, http, y este es el detalle que hace tropezar a la mayoría.
El TLS termina en el edge de Cloudflare: los visitantes hablan con Cloudflare por HTTPS, el tunnel en sí va cifrado, y Traefik solo ve HTTP plano en el puerto 80. Si ponés el dominio con https://, Traefik intenta obtener un certificado de Let's Encrypt que no puede conseguir (el puerto 80 ya no es accesible desde internet) y redirige cada solicitud HTTP a HTTPS, que el tunnel vuelve a mandar como HTTP. El resultado es un loop de redirecciones.
Guardá y volvé a desplegar el recurso. Después, en el panel de Cloudflare de tu zona, andá a SSL/TLS -> Edge Certificates y activá Always Use HTTPS para que a los visitantes que escriban la dirección sin https los redirija Cloudflare, no Traefik.
Cerrando los puertos
El objetivo de todo esto es no tener nada expuesto, así que cuando tus apps respondan a través del tunnel, cerrá HTTP y HTTPS en el firewall:
ufw delete allow 80/tcp
ufw delete allow 443/tcp
ufw statusDejá SSH abierto por ahora, o pasalo también por el tunnel (más abajo te cuento). Si en el post anterior configuraste un dominio para el propio panel de Coolify, dale también un public hostname para que siga accesible, esta vez apuntando a localhost:8000: es el puerto propio de Coolify, no hace falta pasar por Traefik.
Bonus: servidores sin IP pública
Como la conexión es saliente, el mismo truco funciona para una máquina que no es accesible en absoluto: una compu en tu casa, una Raspberry Pi, una VM detrás del NAT de una empresa. Instalale el conector con su propio tunnel y Coolify puede administrarla como un servidor más.
Agregá un public hostname de tipo SSH apuntando a localhost:22, por ejemplo ssh-home.example.com. Después, en Coolify, andá a Servers -> + Add, usá ese hostname como dirección y activá la opción Cloudflare Tunnel en la configuración del servidor. Coolify abre entonces su conexión SSH a través de Cloudflare en vez de conectarse a una IP, y las apps que despliegues ahí se exponen con public hostnames exactamente igual que arriba.
Poniéndolo a prueba
Desde tu computadora, verificá que el dominio responda y que la respuesta venga de Cloudflare:
curl -I https://blog.example.comHTTP/2 200
server: cloudflare
cf-ray: 8c1f2a3b4d5e6f70-EZELos headers server: cloudflare y cf-ray te dicen que la solicitud pasó por la red de Cloudflare. Después probá la misma solicitud contra la IP del servidor en el puerto 443: debería dar timeout, porque ya no hay nada escuchando hacia afuera.
¡Eso es todo! Tus apps se sirven a través de Cloudflare, la IP de tu origen queda fuera de escena y el servidor no tiene puertos entrantes abiertos. Cualquier recurso nuevo que despliegues en Coolify está a un public hostname de estar online.
