How an old gaming laptop became my homelab
A Lenovo Legion Y540, Arch Linux, SSH and Tailscale. How my "learn Linux" machine turned into the server that hosts my projects.
On this page
Windows is my everyday OS. But I wanted to actually learn Linux, not just use WSL, so I put Arch Linux on my old gaming laptop, a Lenovo Legion Y540. It didn't stay a learning machine for long.
The hardware
It's not what you'd buy as a server, but it's more than enough for one:
| Part | Spec |
|---|---|
| CPU | 9th-gen Intel Core i5 |
| RAM | 32 GB at 2666 MHz |
| GPU | GTX 1650, 4 GB VRAM |
| Storage | NVMe SSD for the system, plus a 1 TB HDD |
The GPU turned out to matter later: it's enough to run small local language models, which is how ExamX started.
Phase 1: a Linux desktop to learn on
The first setup was a normal desktop: KDE Plasma, the multilib repository enabled (needed for 32-bit libraries), Steam, and Chrome from the AUR. Doing all of that on Arch, by hand, is a good crash course: package management, the AUR, systemd, and reading the wiki until things make sense.
Phase 2: reachable from anywhere
The step that changed what the machine was for:
- OpenSSH, so I could work on it from my main laptop.
- Tailscale, so I could reach it from anywhere without opening any ports on my home router.
Once I could SSH in from my Windows laptop on any network, the Legion didn't need a screen or a keyboard. It became a box I log into.
Phase 3: hosting things
From there it was a short step to serving websites. Instead of port forwarding, public traffic arrives through a Cloudflare Tunnel, and Caddy routes each domain to the right app running in Docker. My first site went live from it, and the plan is for it to host my hackathon demo sites, so they stay online for my CV long after the event credits run out.
The longer-term plan is a general-purpose server: hosting, VMs, storage and experiments.
What I didn't do (yet)
I set it up to work, not to be robust. No firewall, password SSH still allowed, no backups.
Update: a few weeks later ShipDoc moved onto it, and I asked for a proper audit. It found out exactly how much I'd skipped.