I had been meaning to set up a proper home server for over a year. I wanted something that could run a few lightweight services around the clock: a personal file share, a Pi hole ad blocker, and maybe a small web dashboard I could tinker with on weekends. The problem was money. Or, more accurately, the problem was my reluctance to spend serious money on something I might abandon after two weeks.
So I set a hard cap: $75 total, not counting stuff I already owned. The plan was to piece together a functional, always on server using a Raspberry Pi as the brain and whatever old accessories I had lying around. This is a step by step diary of how that went, the parts I chose, the setup process, the fire I nearly started (not literally, but close), and what I would do differently if I ever did it again.
The Parts List
Before ordering anything, I rummaged through my drawers. I already owned an old 1TB Western Digital external hard drive, a 32GB SanDisk microSD card, a 10 foot ethernet cable, and a spare phone charger that I thought might power the Pi. The hard drive was USB 2.0 and slow, but functional. The SD card was class 10, good enough for an OS. I had no idea yet that the phone charger would become my first major headache.
I bought a used Raspberry Pi 4 Model B with 2GB of RAM from an Amazon warehouse deal for $45. It had minor cosmetic scratches but tested fine. The official Raspberry Pi 4 power supply set me back $12. A cheap plastic case with a small heatsink cost $5, and a pack of adhesive rubber feet was $2. My total out of pocket spending came to $64, which left me $11 under budget. I felt smug. That feeling lasted about six hours.
Day 1: The First Boot and the Power Mistake
The Pi arrived on a Tuesday. I slotted the microSD card into my laptop and flashed Raspberry Pi OS Lite (64 bit, no desktop) using the official Raspberry Pi Imager. While flashing, I enabled SSH and set a hostname. I also pre configured the Wi Fi details, though I planned to use ethernet.
When the Pi booted for the first time, I connected it to my router, plugged in the phone charger, and waited. The red power LED came on, but the green activity LED stayed dark. I tried another cable. Still nothing. Then I actually read the manual: the Pi 4 needs a stable 5.1V supply delivering at least 3 amps, and my ancient phone charger topped out at 2 amps with terrible voltage regulation under load. I had known this, intellectually, but I had convinced myself it might work anyway. It did not.
I ordered the official power supply the same night, waited two days for shipping, and kicked myself for trying to save $12 I had already budgeted. Lesson one: do not gamble on power.
Day 2 to 3: Setting Up the OS and Basic Hardening
With the proper power supply, the Pi booted instantly. I SSHed in, changed the default password, and ran sudo apt update && sudo apt full-upgrade. The 32GB SD card was a tight fit for an OS plus future services, so I disabled swap and set log rotation to keep things trim. I also enabled unattended-upgrades for security patches because I knew myself: I would forget to manually update this thing for months.
Next, I attached the 1TB external drive. The Pi recognized it immediately, but the drive was formatted as NTFS from its Windows days. I debated reformatting to ext4, but I still occasionally needed to plug it directly into my Windows laptop. I settled on keeping NTFS and installed ntfs-3g. This was a compromise I would later regret.
Day 4: The Pi hole Install That Went Too Smoothly
My first real service was Pi hole. Installation took about fifteen minutes, following the one line script from the Pi hole website. I set it as my router’s primary DNS and watched the dashboard fill up with blocked domains. It was genuinely satisfying. My network felt cleaner. Pages loaded faster. My partner, who had not known what a DNS was that morning, asked why a lot of mobile game ads had mysteriously vanished. I tried explaining. She nodded politely.
The Pi hole ran perfectly for three days. CPU usage hovered around 2%, RAM stayed under 200MB, and the Pi’s temperature was a cool 42 degrees Celsius inside its cheap case with a small heatsink attached. I began to think this whole project was going to be boringly smooth. Then I tried to set up a file share, and the universe pushed back.
Day 5: Samba and the Permission Maze
I installed Samba to create a shared folder on the external drive. This was supposed to be straightforward: install Samba, edit smb.conf, create a share, set permissions, done. Instead I spent four hours in a permissions nightmare.
The NTFS drive mounted with root as the owner, and all files appeared with 777 permissions, which Samba interpreted as wide open. But when I tried to connect from my Windows laptop, I got an endless loop of authentication errors. It turned out the NTFS driver was mapping user IDs incorrectly, and Samba’s force user directive was not playing nice. After much forum crawling, I found a fix: I had to mount the NTFS drive with the uid and gid options pointing to the pi user, then set create mask inside Samba. It worked, but the transfer speeds were sluggish. USB 2.0 capped me at about 25MB/s, and the NTFS overhead dropped that further to 18MB/s for large files. For occasional document backups, it was fine. For anything heavier, it was a crawl.
I made a mental note: next time, use a native Linux filesystem for the server drive, even if it means losing direct Windows compatibility. And get a drive with USB 3.0.
Day 6: Docker and the Dashboard Temptation
With Pi hole and Samba running, I still had about 1.5GB of RAM free. I got ambitious. I installed Docker Engine and pulled three containers: Portainer for managing containers, Homepage (a simple dashboard), and Uptime Kuma for monitoring. All three ran well simultaneously, but the Pi’s 2GB of RAM started hitting 80% usage. The CPU, a quad core Cortex A72, handled it without complaint, but I noticed that when I ran a large file transfer over Samba, the Pi hole dashboard would briefly spike in latency. The shared USB bus was a bottleneck, and everything was competing for bandwidth.
I decided to stop at four services. The server was not a beast, and I needed it to be boring and stable, not exciting and crashing.
Day 7 to 14: The Two Week Stress Test
I let the server run untouched for a fortnight. No restarts, no manual interventions. The Pi hole hummed along, blocking an average of 14% of DNS queries each day. The file share stayed available. Uptime Kuma pinged all my services and sent me a Discord alert whenever something went down. This happened exactly once, when my router rebooted for an overnight firmware update and the Pi did not reacquire its DHCP lease fast enough. A quick sudo dhclient fixed it, but I later set a static IP in the Pi’s network config to prevent that from happening again.
The only other hiccup was the SD card. After two weeks, fsck found a few corrected errors on the boot partition. MicroSD cards are not designed for constant write cycles, and even with log rotation, the OS was doing enough small writes to make me nervous about long term reliability. I started looking up solutions, but a USB SSD was outside my $75 budget, so I deferred that upgrade.
What I’d Do Differently
This project succeeded: I now have a functional home server that runs 24/7, cost under $75, and uses about 5 watts of electricity. But if I could go back and talk to myself on day one, here are the three things I would change.
Buy the Official Power Supply from the Start
Trying to reuse an old phone charger wasted two days and caused needless frustration. The Pi 4 is power sensitive, and under voltage issues cause weird, hard to diagnose bugs. The $12 official charger is boring, but it works.
Use an External SSD Instead of a Spinning Hard Drive
The 1TB drive I had was free, so I used it. But the USB 2.0 bottleneck and NTFS permission headaches were constant reminders that old hardware drags down the whole experience. If I were doing this again with a slightly bigger budget, I would get a 120GB SATA SSD and a USB 3.0 enclosure (around $25 total) and format it as ext4. The speed difference and reliability gain would be worth every cent.
Boot from a USB Drive, Not the microSD Card
This is the single most important upgrade. The Pi 4 supports USB booting natively, and a cheap USB flash drive (or that SSD I just mentioned) is far more resilient than a microSD card for constant read and write operations. I learned this the hard way when I had to reflash the SD card three months later due to corruption. USB booting adds maybe $10 to the cost and eliminates the weakest point of the whole setup.
What’s Running Now (and What I’m Planning)
After six months, the server is still going. It runs Pi hole, Samba (for light backups), Uptime Kuma, and a simple Node.js dashboard I built for tracking my home lab stats. I have since migrated the OS to a USB SSD, and the system is noticeably snappier. RAM usage sits at 55% on an average day, and I have had exactly zero downtime in the last two months.
I am not going to pretend this $75 setup is a powerhouse. It cannot transcode Plex streams or run a full CI/CD pipeline. But for a lightweight, always on home server that teaches you the fundamentals, it is perfect. And the process of building it, troubleshooting power issues, navigating permissions, and learning which corners not to cut, was more valuable than any tutorial I could have watched.
If you have got an old Pi in a drawer and an afternoon to spare, build something. Just buy the official power supply, okay?
