Turning My Old Laptop Into a Homelab
There is an old laptop sitting in my drawer, and this week I decided it is going to become a server.
I’ve been wanting to self-host my homelab for a long time for the sake of being cool, but recently there’s been a bigger motivation. If you read the last post, you probably know the reason. Cloudflare Turnstile broke my free, opensource, awsome music downloader, and the fix is to send requests from a residential IP instead of from a datacenter. My laptop at home has exactly that kind of connection. So the plan is to move InstaPlayer onto it, and while I am there, turn the laptop into a cheap homelab for me to tinker around.
Here is the plan so far. Some of this I am honestly figuring out as I go.
My own PaaS
I used to deploy InstaPlayer on Zeabur (a Taiwan PaaS startup) and I loved how simple it felt. You can spin up instances of Docker, PostgreSQL and Redis very easily. I want that same from my homelab, so I choosed Coolify as it has the most similar features to Zeabur. My tech stack will be:
flowchart LR
P@{ icon: "logos:android-icon", label: "My phone", form: "square" }
L@{ icon: "logos:ubuntu", label: "Ubuntu + Coolify", form: "square" }
N@{ icon: "logos:chrome", label: "nodriver", form: "square" }
S@{ icon: "logos:cloudflare", label: "Music sources", form: "square" }
P -->|Tailscale| L
L -->|runs the app| N
N -->|residential IP| S- Ubuntu Server as the base
- Coolify on top to handle deployment, dashboard and HTTPS
- Tailscale to reach my server
- nodriver to solve the Turnstile captcha
Setting it up is not too bad. I install Ubuntu, make a normal user instead of living as root, run the Coolify install script, and put the laptop and my phone on the same Tailscale network. Then I deploy InstaPlayer straight from the dashboard and drop in my API key. Last time I set up Caddy to handle HTTPS, but Coolify comes with its own proxy so I probably won’t have to worry about that.
The catch
My server is not that powerful, with an 8th gen i5 with 8GB of RAM. Memory is my main worry because nodriver runs a real Chrome browser which eats up ~1GB. One upside is that my laptop has a battery so I don’t need a power supply in case of a blackout.
Another issue with nodriver. Getting it to run on a headless server is probably finicky. For now this is just the plan, and next week I find how much I need to fix.