In uncertain times self reliant hosting is becoming more relevant than ever. I printed an aluminium heatsink case for a raspberry pi0w, optimized it to the best of my abilities and attached it to a solar powered battery to essentially keep it running indefinitely or at least until component failure.

Made possible thanks to the generous support of PCBway

There's a common assumption that personal hosting requires a proper server, a VPS, or at least something more powerful than a $15 microcomputer smaller than the size of a credit card. I wanted to challenge that. This is the story of running a personal website and a file sharing service on a Raspberry Pi Zero W — and the real performance data that shows it holds up surprisingly well.

The Hardware

The Pi Zero W is about as minimal as computing gets. A single ARM processor running at around 1GHz, 512MB of RAM, no ethernet port, and a 2.4GHz WiFi chip. That's it. It sips power — around 1 to 2 watts at idle — and makes no noise. The one I'm using has been running continuously for over three months without a single intervention, and its processor temperature sits at a steady 29°C without any active cooling. Just a bare board attached to the case of my 3d printer.

It's attached to a cheap allpowers power station which is using LiFePO 4 for longevity and reduction of fire hazard. That one in turn is attached to two 100w panels, which are essentially overkill but power other parts of my workshop as well. It can run for a week without requiring any sunlight.

What It's Running

Rather than a full Linux distribution, the server runs Alpine Linux in diskless mode — meaning the entire operating system lives in RAM, not on the SD card. This has two practical benefits: it dramatically reduces SD card wear (the card is mounted read-only), and it makes the system faster, since RAM is much quicker than flash storage. Two services run at all times:

  • lighttpd, a lightweight web server, handles the public-facing websites, sites have various optimizations like web compression and no scripting
  • DuckieBox, a small Python file sharing application

Combined, these Two processes use about 27MB of RAM at idle — leaving over 400MB completely untouched.

The Stress Test

To get real numbers, I ran a series of load tests from another machine on the same network, hitting the web server with simultaneous requests and measuring how it responded under pressure.At 25 concurrent users making continuous requests for 30 seconds, the Pi served 29.7 pages per second with a 100% success rate and an average response time of 831 milliseconds. Not instant, but consistent and completely reliable.Pushing it harder to 50 concurrent users — well beyond anything a typical personal site would see — the server reached 38.8 requests per second, still with zero failed transactions. Response time climbed to about 1.3 seconds per request, which is noticeable but not broken. The Pi was handling more simultaneous connections than it has cores, and it didn't drop a single one.For file transfers over WiFi, upload and download both came in around 1 to 1.3 MB per...

Read more »