← All posts

Why bunny.net

Choosing a European Cloudflare-shaped platform. Magic Containers, EU sovereignty, and the one US link still in the chain.


I wanted Cloudflare's experience without Cloudflare's jurisdiction.

For the last few years I have been a happy Cloudflare user. I know the value of Workers, Pages, Containers, and a platform that lets you ship fast. But johnie.eu exists partly to move the stack onto European infrastructure, and I did not want to pretend a generic VPS was the same thing as a push-to-deploy edge platform. I went looking for the closest European version of that shape.

bunny.net, briefly

bunny.net is a Slovenian company based in Ljubljana. It is EU-owned, EU-incorporated, and operates under EU law. That is the whole reason it belongs in this stack: it gives me a Cloudflare-shaped platform without the US legal wrapper that comes with Cloudflare.

Magic Containers

bunny.net

The feature that sold me was Magic Containers. It is the closest thing I have found to Cloudflare Containers outside Cloudflare: give it a Docker image, get a globally deployed container service back. It is not a Workers replacement. It is the Cloudflare Containers analogue, which is what I needed.

How the deploy loop works

Every push to main runs a Forgejo workflow on Codeberg. Buildah builds a linux/amd64 image, pushes it to a registry, and a small curl call tells Bunny to redeploy:

PATCH https://api.bunny.net/mc/apps/$APP_ID/containers/$CONTAINER_ID
{ "id": "...", "imageTag": "latest" }

bunny.net pulls the new image and rolls it out. That matters because the deploy story stays plain: a Dockerfile and an HTTP request. If I ever leave, I leave with the same image.

The one US link in the chain

Docker

Today, Magic Containers can only pull images from Docker Hub or GitHub Container Registry, both US-hosted services. So johnie/johnie-eu still lives on docker.io. That is the one part of this stack I have not moved to Europe.

I still shipped with the asterisk because the registry is the easiest part to swap. GitLab Container Registry, the Forgejo package registry on Codeberg, or a self-hosted Harbor would close the loop in one workflow change. When bunny.net adds support for another registry source, I will move the image.

What I got

johnie.eu is hosted in the EU, served from EU edge nodes, owned by an EU company, and governed by EU law, with one Docker Hub asterisk left on the registry side. The developer experience is close to what I had on Cloudflare, which is the main reason bunny.net made the cut.

If you want a European alternative to Cloudflare for container-based hosting, bunny.net is worth an afternoon. The Codeberg post covers the source side of the same stack, and the Mistral post covers the build side.