๐Ÿ  home.vsk36.online Served live from my laptop
Home lab ยท Self-hosting

I Turned My Old Laptop Into a Free Home Server

File sharing, remote access, and the website you're reading now, all running on a laptop at home, for โ‚น0 a month and without touching my router.

October 2026 ยท 8 min read

Why bother?

I had a Windows laptop with a 1 TB disk, half of it completely empty, sitting on my desk all day anyway. Meanwhile I was paying for cloud storage, emailing files to myself, and wishing I had somewhere to put small projects online.

So I gave the laptop a second job. Today it:

No new hardware, no monthly bills, and no router changes. Here's exactly how.

Step 1: Keep it awake

A server that falls asleep after 30 minutes isn't much of a server. Mine was set to sleep after 30 minutes and hibernate after 3 hours, which is sensible for a laptop and useless for a server. When it's plugged in, it now:

On Windows that's four commands:

powercfg /change standby-timeout-ac 0
powercfg /change hibernate-timeout-ac 0
powercfg /change monitor-timeout-ac 10
powercfg /setacvalueindex SCHEME_CURRENT SUB_BUTTONS LIDACTION 0

Battery tip: a laptop plugged in 24/7 slowly wears out its battery. Most brands have a "conservation mode" in their own app that stops charging at about 60โ€“80%. Turn it on.

Step 2: Share files at home

The empty half of the disk became a shared folder. Windows has file sharing built in (it's called SMB), and every phone and computer can already talk to it:

Two details matter. First, the folder is protected by my Windows password, and Windows won't even allow network access to an account without one. Second, sharing is switched on only for my home network, which Windows calls a "Private" network. On cafรฉ Wi-Fi it stays off.

Step 3: Reach it from anywhere

The classic way to reach a home computer from outside is "port forwarding" on your router. I skipped it for two reasons:

  1. It's risky. Bots scan the internet around the clock for open file-sharing ports.
  2. It often doesn't work anyway. Many Indian ISPs put customers behind CGNAT, meaning hundreds of homes share one public IP, so there's nothing for you to forward.

Instead I used Tailscale, which is free for personal use. You install it on the laptop and on your phone, sign in with the same account, and they can see each other privately from anywhere in the world. Traffic is encrypted, and only my devices can connect.

With mobile data on and Wi-Fi off, my phone opens the shared folder exactly as it does at home.

Step 4: Host a website

A website is just files, plus a program that hands them to browsers. Python includes one, so the whole "web server" is a few lines:

import http.server

class Handler(http.server.SimpleHTTPRequestHandler):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, directory="site", **kwargs)

http.server.ThreadingHTTPServer(("0.0.0.0", 8080), Handler).serve_forever()

It starts automatically when the laptop boots, serves the site folder on port 8080, and refuses to show folder listings. To publish a change I just edit the HTML file and refresh. There's no build step and nothing to deploy.

Step 5: Make it public on my own domain

Making a site public normally means a static IP, port forwarding, and setting up HTTPS certificates. I used Cloudflare Tunnel instead, which is also free:

You โ”€โ”€httpsโ”€โ”€โ–บ home.vsk36.online โ”€โ”€โ–บ Cloudflare โ”‚ (outbound tunnel, started by the laptop) โ”‚ โ–ผ laptop :8080 โ”€โ”€โ–บ this page

The key idea is that the laptop connects out to Cloudflare, and visitors come in through that connection. Nothing on my home network is opened to the internet, CGNAT doesn't matter, and Cloudflare provides the HTTPS certificate automatically.

Setting it up took four commands and one browser login:

cloudflared tunnel login
cloudflared tunnel create homeserver
cloudflared tunnel route dns homeserver home.vsk36.online
cloudflared service install

The tunnel runs as a Windows service, so after a power cut it reconnects on its own.

No domain? Tailscale has a feature called Funnel that makes a site public at a free something.ts.net address with one command: tailscale funnel --bg 8080.

What it costs

ThingCost
LaptopAlready owned
Windows file sharingFree (built in)
Tailscale (remote access + Funnel)Free for personal use
Python web serverFree
Cloudflare Tunnel + HTTPSFree
Domain nameAbout โ‚น800โ€“1,200 a year (optional)
ElectricityA laptop with its screen off uses roughly 10โ€“20 W, a few hundred rupees a year

Lessons learned

1. Read the error, not the symptom

My first web server "worked" (it was listening on the port) but dropped every request. The cause: I'd started it with pythonw, the windowless Python, and the server tried to log each request to a console that didn't exist. Sending the log to a file fixed it.

2. Some doors should never be opened

File sharing and databases stay private: only my own devices can reach them, through Tailscale. Only the website is public, and only through a tunnel.

3. Check before you overwrite

My domain already had a site on www. Instead of replacing it, I put this server on a subdomain, home., and both live happily side by side.

4. Write it down

Every step, address and command lives in a README and a docs folder next to the site, so future-me knows how it all fits together.

Try it yourself

If you have an old laptop or desktop lying around, you can do all of this in an afternoon:

  1. Stop it from sleeping when plugged in.
  2. Share a folder, protected by a password.
  3. Install Tailscale on it and on your phone.
  4. Put an index.html in a folder and serve it with Python.
  5. Publish it with tailscale funnel, or with Cloudflare Tunnel if you have a domain.

Next on my list: a database for my side projects (private, of course), streaming my movie collection with Jellyfin, and automatic backups.

If you build one, send me the link. I'd love to see it. ๐Ÿ‘‹