The mere existence of this blog is actually an experiment. I wanted to see if it was possible to self-host a blog in a remote location and it is… sort of.
Everything on this page is coming at you from Wordpress hosted in a Kubernetes Cluster… made of nodes virtualised on a Raspberry Pi 4 using ESXi ARM fling… at the end of Cloudflare Tunnel… over a Load Balanced Starlink/4G connection… from rural Somerset. So yeah, ain’t going to be fast. It does however broadly work.
Although the Kubernetes nodes are virtualised, there are actually 3 physical on-prem machines involved in bringing you this traffic. One is x86 running pfSense to handle the Starlink and 4G connections, the others are Raspberry Pi 4s. The first is running my container registry (itself virtualised as a Docker container running in Portainer) as well as the Cloudflare Tunnel client and the DNS server (Pi hole). When traffic reaches the end of the tunnel, it is immediately directed to node1, a Debian 11 VM on the other Virtualised Pi. This node is the control plane for the Kubernetes cluster, the NFS server for persistent volumes and external load balancer for the cluster using HAProxy. Node1 plus worker nodes 2 and 3 make up the cluster and each have a Kubernetes NodePort open to the network which HAProxy balances between.
Inside the cluster, ingress traffic is managed by Traefik with the Pod consisting of the default Wordpress docker container plus Apache combined. Another Pod provides the SQL database.
Far more of an exercise in “could I” rather than “should I”, parts of this took far longer than they should but alas, here it is.
Starlink is a satellite internet service provided by SpaceX, which promises to provide high-speed internet connectivity to rural and remote areas. When we built our house here in rural Somerset, we attempted to get a BT line. That was a mistake, and my experience with BT was so so so bad that I never had…