Remember when I introduced Project Swordfish back in 2022? That end-to-end encrypted secret sharing tool started its life on AWS, running on CloudFront with load-balanced Docker containers. It worked beautifully! But the price tag made me wince every month.
Fast forward to early 2024, and I migrated Swordfish off AWS onto a NUC running in my home lab. The cost savings were immediate and dramatic.
But I wasn’t done.
Today, Project Swordfish runs on something much more interesting: a self-managed Kubernetes cluster powered by my own infrastructure management platform. Meet Displace Technologies.
From Docker Compose to Kubernetes
The transition from a simple Docker Compose setup to Kubernetes might seem a bit overkill. Especially for a simple, mostly static application with a stateless Redis backend.
The thing about my infrastructure tools: it’s never just about the current project. I’m building a foundation that can scale.
Moving the project to my homelab solved an immediate problem. I was demoralized by AWS costs and needed to save money. As I moved additional tools, though, the limitations of a single NUC and Docker Compose became apparent.
How to I manage multiple applications with similar exposed ports? How do I roll out updates? Is Cloudflare really the best way to manage TLS termination? How do I monitor everything effectively?
These questions led me down the path of building something more robust.
Enter the Kubernetes Experiment
Kubernetes has a reputation for being complex. It’s a well-earned reputation that has many professionals explaining “k8s is overkill” to newcomers. That complexity serves a purpose – it gives you incredibly powerful abstractions for managing containerized applications at scale. The problem isn’t Kubernetes; it’s a matter of controlling for the complexity.
For my use case,1This use case is also identical to the way I usually manage applications in production for my day job. The lessons I’ve learned extend from the enterprise to the homelab. Kubernetes provides a consistent API for deploying and managing applications. Whether one service or fifty, the deployment patterns remain the same.
Setting up a single-node Kubernetes cluster on a NUC isn’t trivial, but it opened up possibilities I hadn’t considered before. Suddenly, I could deploy applications with proper health checks, automatic restarts, and rolling updates. Continuing to route traffic through Cloudflare keeps certificate management simple (and my homelab secure) as well.
But managing Kubernetes itself? That’s where things got interesting.
Building Displace: Infrastructure as a Product
I’ve worked with Kubernetes day-to-day for years in everything from the public to the private sector and now also my homelab. The platform is powerful, but the developer experience is horrible. Even simple tasks like checking status or viewing logs require memorizing kubectl
commands and navigating complex YAML manifests.
This friction led to the creation of Displace Technologies and our displace
CLI tool. This isn’t just a wrapper around Kubernetes. It’s an opinionated infrastructure management platform designed to make self-hosted infrastructure feel as simple as pushing to a Git repository.
Think of it as a bridge between the raw power of Kubernetes and the simplicity that developers actually want. You choose your cloud – Displace does the rest. No more wrestling with kubectl
or hunting through logs. No more bikeshedding about monitoring tools or alerts.
Build your application, deploy it, and let Kubernetes manage itself for you.
The Swordfish Migration: A Real-World Test
Migrating Project Swordfish to management through Displace was a perfect real-world test case. Here’s what that process looked like:
Before: SSH into the NUC, navigate to the project directory, run docker compose up -d
, hope everything works, manually configure Cloudflare Tunnel routing.
After: Push a deployment configuration to Displace, watch it automatically provision the necessary Kubernetes resources, configure ingress routing, and start serving traffic.
The application itself didn’t change – it’s still the same Redis + PHP stack that’s been running reliably for years. But the infrastructure around it became dramatically more sophisticated while actually becoming easier to manage.
What This Means for Future Projects
Having Swordfish running successfully on this new infrastructure validates the approach for similar applications. It’s a proven pattern. Containerized applications with minimal dependencies can be deployed and managed through Displace with less overhead than with traditional server management.
The door is open to other projects as well! Static sites, API services, WordPress blogs … everything becomes approachable when the deployment platform handles the infrastructure complexity for you.
The Broader Vision
Displace represents a different philosophy about infrastructure management. No more choosing between expensive cloud services or complex self-managed solutions. Leverage the years of experience of traditional SREs distilled down into a single, simple automation tool.
Infrastructure automation on the hardware (or cloud) of your choice.
For individual developers and small teams, this approach offers the best of both worlds. You get the deployment simplicity and operational benefits of modern platform-as-a-service offerings. You also get the cost control and data sovereignty of self-hosted, self-managed infrastructure.
The Displace tool is still in development, but you can follow along as it evolves by joining my email list. Let’s revolutionize infrastructure management together!
- 1This use case is also identical to the way I usually manage applications in production for my day job. The lessons I’ve learned extend from the enterprise to the homelab.