Today I deployed The App. It’s running smoothly on a Raspberry Pi in my living room. No AWS bill to worry about; no crazy Kubernetes cluster orchestration; no security risks from accidentally leaking dev tokens. Deployment happens from a single command. No data ever needs to leave my local network.
All this might seem a bit over-the-top, but I’m not a tin-foil-behatted lunatic. Deploying this way was symbolic of what I want The App to be, and how I want it to work.
The App is lightweight.
The App is unconventional.
The App is scrappy.
The App is simple.
The App is flexible.
The App is handmade.
The App is personal.
The App is privacy-conscious.
The App is climate-conscious.
With those values in mind, it seemed far more appropriate to deploy it to a physical device that I own rather than a faceless virtual server in the cloud. Did I spend several days configuring and reconfiguring and banging my head against the desk? Yes I did. I think this says more about how much I’ve grown used to enterprise convenience, rather than how complex the setup truly was.
The toolchain consists of
- Raspberry Pi Model 4
- 128GB SD card
- Raspbian OS
- Ansible for deployment configuration
- Docker Compose for running applications
- Caddy for routing traffic internally
- acme.sh for managing TLS certificates
- GitHub deploy keys for cloning
With the exception of one step that required manually updating a DNS record, the whole setup is automated. Even that step could be automated, if I switch to a domain name provider with an API.
These are all modern tools with great developer experience and a smooth learning curve. While I did have to learn a few new bits and pieces, with frequent trips to the Ansible docs in particular, none of it felt massively out of my comfort zone. Each piece is under my control. I can swap it out any time I choose. All for the low low price of £0/month.
Oh, and The App itself? It’s ripper fast. I’m excited to share it the world later in the year.