Cloudflare tunnels in Python
Cloudflare provides a way to proxy traffic from the Cloudflare network to your origin servers, for more information see: https://github.com/cloudflare/cloudflared
Instead of using the cloudflared binary directly to set up the tunnel i decided to use the Cloudflare API.
Some example python code to use the Cloudflare v4 API to:
- Create a Cloudflare tunnel
- Route traffic to the tunnel via CNAME
- Show the tunnel token
And finally, connect your origin server to the tunnel with 'cloudflared' binary.
This code creates the tunnel and associated CNAME to the tunnel, prints out your TUNNEL_TOKEN that can be used with the 'cloudflared daemon' to connect your origin server.
When you have the $TUNNEL_TOKEN you can start proxy traffic to your server via Cloudflare with:
or with docker-compose:
Your application on http://localhost:8000 that is publicly reachable from https://demoapp.example.com is now being served by Cloudflare global CDN and will speed up delivery by using the edge servers closest to you, and as you will get the normal WAF and DDOS protection functionality provided by Cloudflare.
By using multiple cloudflared instances you can now provide high-availability and zero-downtime upgrades to your application.
See the below diagram for the traffic flow between Cloudflare and your origin server that hosts your application:
This could be used to easily demo an application or to create multiple environments hosted for testing, staging and production.