Tool Friday #13 — Docker + Tailscale: The Stack That Ran Without Me for a Week
I spent last week in Italy, working part-time. My Mac Mini — a small computer sitting on a shelf in Barcelona — ran the whole time.
25 AI agents. 8 automations. 7 Telegram bots. My content engine. A competitive intelligence pipeline. All of it, a thousand kilometers from my keyboard.
I touched it twice in 7 days. Both times from an iPhone, on café wifi. Both fixes took under 3 minutes.
Here’s how that setup works.
TL;DR: Docker runs each app in its own little box on the Mini. If a box crashes, it restarts. If the Mini reboots, all the boxes come back. Tailscale acts like a private cable between my phone, laptop, and the Mini — so I can log in from anywhere as if I were at home. Total cost: €699 for the Mini (one time), zero monthly fees.
Why run things on my own machine
Every AI workflow I rely on — Claude Code, n8n, Ollama — can be rented from the cloud. But renting adds up. n8n Cloud alone is $20/month for the Pro tier, and you hit limits quickly. Add a small rented server for each bot, and you’re at $100-200/month before you’ve done anything serious.
The other reason is control. If the company I’m renting from changes prices overnight (it happens — Anthropic just did it to subscription users of tools like OpenClaw), my whole setup has to be rebuilt (unless you used nanoClaw as I suggested - that still works fine). On my own machine, nobody can change the terms.
The trade-off: I’m the one fixing things when they break. If a server goes down at 3am, there’s no support ticket — there’s just me (power can go down at night and you figure out in the morning).
That trade-off only works if things rarely break. Docker and Tailscale are the two tools that make “rare” possible.
Docker: each app in its own box
Docker takes an app — say, n8n — and wraps it in a self-contained “box” (the technical word is container). The box has everything the app needs: the right version of Node, the right database, the right settings. If you copy the box to another machine, it just works.
The magic setting is two words: restart: unless-stopped.
services:
n8n:
image: n8nio/n8n:latest
restart: unless-stopped
ports:
- "5678:5678"
volumes:
- n8n_data:/home/node/.n8n
That tells Docker: if the app crashes, start it again. If the Mac itself reboots (software update, power blip, me tripping over a cable), Docker brings all the boxes back the moment the computer wakes up.
I have three layers of resilience stacked:
- Docker restarts apps that crash
- The Mac starts Docker automatically when I log in
- The Mac logs in automatically and powers on after any power outage
One week of vacation. Zero manual interventions needed.
Tailscale: a private cable between my devices
Tailscale is the part that’s almost magic. Once you install it on each of your machines (Mini, laptop, phone) and sign in with the same account, they form a small private network. Every device gets a memorable address. You can reach any device from any other, anywhere in the world, as if they were all plugged into the same home router.
No router settings. No opened ports. No messing with IP addresses. It just works — even from a phone on café wifi.
My setup is three steps:
- Install Tailscale on the Mini. It becomes reachable at a stable address like
matteos-mac-mini. - Install Tailscale on my MacBook Air and iPhone.
- From anywhere, I can log into the Mini by typing
ssh mini(a shortcut I configured once).
That’s the whole thing. Works on hotel wifi, cellular data, airplane wifi over the Atlantic. If the connection drops, it reconnects on its own.
Last week, a Slack alert popped up while I was waiting for a coffee. One of my automations was erroring. From my phone, in 3 minutes: log in, check the logs, restart the box. Back to the espresso.
What Docker can’t fix on its own
Docker restarts things that crash. That covers most of what goes wrong on a quiet Mini. But there’s a category of breaks it can’t self-heal — anything where the app is running fine on your side, but something on the other side said no.
Login tokens that expire. API rate limits. SSL certificates. An email provider that wants you to re-authorize. For all of those, the app isn’t dead — it’s just asking for something it can’t get anymore. Docker sees a running process, keeps it running, and the error keeps happening until a human steps in.
That’s why Tailscale is the essential half of this setup. The one or two times a week (or month) something needs attention, I don’t need to be at a desk. I need to log in, refresh the thing, and move on. Phone is enough.
What I’d add next: a simple uptime monitor (free tools like UptimeRobot) that pings each automation once a minute and alerts me if it goes quiet. Right now I rely on Slack alerts inside the workflows themselves — which only fire if the workflow can still reach Slack. If it can’t, silence. An external watcher would catch that.
What this costs vs. renting from the cloud
| Setup | Cost |
|---|---|
| Mac Mini M2 (base, one-time) | €699 |
| Electricity (7W idle, 20W busy) | ~€2/month |
| Docker | Free |
| Tailscale (personal, up to 100 devices) | Free |
| Year 1 total | ~€723 |
| Year 2 onwards | ~€24/year |
For comparison, renting the same setup in the cloud: n8n Cloud Pro ($20/mo) + 2-3 small servers for bots ($15-30/mo each) + pass-through for AI tokens = $80-150/month minimum. That’s $1,000-1,800/year.
The Mini pays itself back in 6-9 months. From year two onward, I’m saving 40-75x vs. renting.
Who this is for
Yes, if: you run more than 2-3 automations seriously, you’re OK reading a log file when something’s weird, and you’d rather stop paying monthly for tools that could run on a shoebox.
No, if: you need guaranteed 24/7/365 uptime for paying customers (one house power outage takes you offline — cloud is better), or you really don’t want to learn Docker (there’s a real learning curve the first time).
I’m in the first camp. Most builders running their own tooling are.
The verdict
Score: 9/10
Docker handles the “keeps running” part better than any rented platform I’ve tried, because I control every restart rule, every saved file, every setting. Tailscale handles the “reach it from anywhere” part with literally zero setup — the private network just exists.
The one point off: the first Docker setup takes hours if you’ve never touched containers before. The learning curve is real. You pay it once.
Docker: docker.com. Tailscale: tailscale.com. My Mini is still running in Barcelona as I type this — 1,500km away.
Tool Friday is a weekly series where I review one tool I actually use. This week is a two-tool special — the pair that lets my whole stack run without me.