Cloudflare Tunnel for Umbrel
Cloudflare has a service called Tunnels – a lightweight VPN-like daemon, cloudflared, once installed on a machine creates outbound-only connections to their global network, making possible serving content accessible from the Internet without having a dedicated (white) IP address.
I wanted to use Tunnel to make few apps on my Umbrel home server accessible from the Internet. The tunneling daemon can only be set up from a terminal, which is totally fine, but I had an idea that a human-friendly user interface for it could be nice and useful for me and other people. I found only one project called cloudflared-web providing a simple web UI, but I strongly disliked it loading the daemon as an NPM dependency – as this software may handle sensitive unencrypted data, I wanted to only run the official binaries. Having no alternative implementations, I've made a web UI myself. The app was styled according to Umbrel's design system, hence, in my humble opinion, it nicely fits the Umbrel ecosystem.
- The app allows setting up the tunnel using the service start command shown in the Cloudflare dashboard
- With this app you can expose both public apps and those protected by Umbrel auth following the detailed guide
- Once set up, the app shows active routes: public endpoints and corresponding local URLs
From a technical perspective, the app is a Docker Compose deployment with two containers:
- Web UI controlling the tunnel – a SvelteKit app with backend and frontend
- Connector – the official cloudflared binary combined with a simple control loop bash script
If you like this app and want to support the project, you can make a donation with your preferred payment method. I am very grateful to everyone supporting my work