Why Your Old Computer Is a Goldmine
That laptop with the cracked screen. The desktop you replaced three years ago. The PC your friend was about to recycle. These "useless" machines are exactly what you need to start self-hosting.
I run four services on a single 1GB VPS — and you can run the same services on hardware you already own. No monthly fees, no "your server is idle" warnings, just your own private cloud running in the closet.
If you've read our guide to building a website for under $30, you know that cheap hosting is possible. But with a home server, the cost drops to zero after setup — and you get far more power than a budget VPS.
What Can You Run on an Old PC?
Here's what people actually run on repurposed hardware — organized by difficulty:
Beginner (start today): | Service | What It Does | RAM Needed | |---------|-------------|------------| | Pi-hole | Blocks ads on your entire home network | 256 MB | | Nginx | Hosts websites, acts as reverse proxy | 128 MB | | Samba | File sharing across Windows/Mac/Linux | 256 MB | | Jellyfin | Your own Netflix — stream movies/music | 512 MB |
Intermediate (once you're comfortable): | Service | What It Does | RAM Needed | |---------|-------------|------------| | Nextcloud | Your own Google Drive alternative | 512 MB | | Home Assistant | Smart home control center | 1 GB | | Bitwarden (Vaultwarden) | Password manager you control | 256 MB | | Paperless-ngx | Document management with OCR | 512 MB |
Advanced: | Service | What It Does | RAM Needed | |---------|-------------|------------| | Proxmox | Virtual machine host (run VMs + containers) | 2 GB+ | | Frigate | AI-powered security camera NVR | 2 GB+ | | Immich | Self-hosted Google Photos alternative | 1 GB+ |
With a 4GB RAM machine (typical for a computer from 2018 onward), you can run Pi-hole + Jellyfin + Nextcloud + Home Assistant simultaneously — all in Docker containers, all isolated from each other.
Hardware Requirements — It's Easier Than You Think
Minimum: 2GB RAM, dual-core CPU, 32GB storage. Almost anything made in the last 15 years qualifies.
Recommended: 4GB+ RAM, quad-core CPU, 128GB+ SSD. The SSD matters more than CPU — server apps are I/O-bound, not compute-bound.
What works and what doesn't:
| Hardware | Verdict | Note |
|---|---|---|
| Old laptop | ✅ Perfect | Built-in UPS (battery)! Low power, compact |
| Old desktop | ✅ Great | Easy to add storage, good cooling |
| Raspberry Pi 4/5 | ✅ Good | Tiny, silent, 5W power. Limited RAM & I/O |
| 10+ year old PC | ⚠️ Test first | May work for Pi-hole. Power-hungry |
| Phone/tablet | ❌ No | Too locked-down, no real Linux support |
The power consumption question: an old laptop typically draws 15-30W under load. At $0.12/kWh (US average), that's $1.30-2.60/month. A Raspberry Pi draws 3-5W — under $0.50/month. Even the "wasteful" option is less than a coffee.
Step 1: Install Ubuntu Server
We'll use Ubuntu Server (no GUI — everything happens through the command line, which saves RAM and eliminates one attack surface). If you need a terminal refresher first, check our Linux Terminal Basics guide.
What you need: - A USB drive (4GB+) - Another computer to create the installer - Ethernet cable (Wi-Fi works, but wired is more reliable for a server)
Create the installer:
- Download Ubuntu Server 24.04 LTS from ubuntu.com/download/server
- Flash it to USB:
- Windows: Rufus or Balena Etcher
- Mac/Linux:
sudo dd if=ubuntu-server.iso of=/dev/sdX bs=4M status=progress
Boot and install:
- Plug the USB into your old computer, power on
- Press F2/F12/Del during boot to enter the boot menu (key varies by manufacturer)
- Select the USB drive to boot from
- Follow the installer prompts:
- Language: English
- Network: Connect to Ethernet if available
- Storage: "Use entire disk" (erase everything — this is the old PC, right?)
- Profile: Create a username and password (remember this — it's your server login)
- SSH Setup: CHECK the box for "Install OpenSSH Server" — this is critical
- Wait for installation (~5-10 minutes), then reboot and remove the USB
After reboot, you'll see a text-only login screen. This is your server now — no desktop, no icons, just raw computing power.
Step 2: Connect via SSH
Once Ubuntu Server is installed, you'll manage it from your main computer — no monitor, keyboard, or mouse attached to the server needed.
First, find the server's IP address. On the server's screen (with a keyboard plugged in if needed):
ip addr
Look for inet under eth0 or enpXsY — something like 192.168.1.105.
From your main computer:
ssh username@192.168.1.105
Replace username with the name you created during install, and the IP with your server's actual address.
New to SSH? We wrote a complete SSH guide that covers key-based authentication, the SSH config file, and troubleshooting. Read it in full — SSH is how you'll talk to your server every day.
Once you're in, run updates:
sudo apt update && sudo apt upgrade -y
Now unplug the monitor and keyboard from the old PC. You'll never need them again for this machine.
Step 3: Set a Static IP
Your router assigns the server a new IP whenever it reboots. A static IP prevents that — essential when you're running services that other devices need to find.
On the server, edit the Netplan config:
sudo nano /etc/netplan/50-cloud-init.yaml
Add a static IP configuration:
network:
ethernets:
enp0s3: # Your interface name (from 'ip addr')
dhcp4: no
addresses:
- 192.168.1.200/24 # Pick an IP outside your router's DHCP range
routes:
- to: default
via: 192.168.1.1 # Your router's IP
nameservers:
addresses: [192.168.1.1, 8.8.8.8]
version: 2
Apply changes:
sudo netplan apply
Now your server is always at 192.168.1.200. After applying, your SSH session may drop — reconnect using the new IP.
Step 4: Install Docker
Every service on our server will run in Docker containers. This keeps them isolated (one service's update doesn't break another) and makes setup dead simple. If Docker is new to you, our Docker Beginner's Guide covers containers, images, Dockerfiles, and Docker Compose in detail.
# Install Docker and Docker Compose
sudo apt install docker.io docker-compose -y
# Add your user to the docker group (no sudo needed)
sudo usermod -aG docker $USER
# Log out and back in for the group change to take effect
exit
ssh username@192.168.1.200
Verify it works:
docker run hello-world
If you see "Hello from Docker!", you're ready.
Step 5: Your First Service — Pi-hole (Network-Wide Ad Blocking)
Pi-hole blocks ads on every device connected to your network — phones, laptops, smart TVs, everything. No app to install on each device. One Docker command:
# Create a directory for Pi-hole's persistent data
mkdir -p ~/docker/pihole
# Run it
docker run -d \
--name pihole \
-p 53:53/tcp -p 53:53/udp \
-p 80:80 \
-e TZ="Asia/Shanghai" \
-v ~/docker/pihole:/etc/pihole \
--restart=unless-stopped \
pihole/pihole:latest
After it starts, get the admin password:
docker logs pihole | grep "password"
Open http://192.168.1.200/admin in your browser. Log in, then configure your router to use 192.168.1.200 as the DNS server. Every device on your network now blocks ads.
Step 6: Docker Compose for Multi-Service Management
When you run multiple services, managing them with individual docker run commands gets messy. Docker Compose solves this. Create ~/docker/docker-compose.yml:
version: "3"
services:
pihole:
image: pihole/pihole:latest
container_name: pihole
ports:
- "53:53/tcp"
- "53:53/udp"
- "8081:80" # Moved to 8081 so Nginx can use port 80
environment:
TZ: "Asia/Shanghai"
volumes:
- ./pihole:/etc/pihole
restart: unless-stopped
nginx:
image: nginx:alpine
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx:/usr/share/nginx/html
restart: unless-stopped
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
ports:
- "8096:8096"
volumes:
- ./jellyfin:/config
- /path/to/your/media:/media # Point this at your movies/music
restart: unless-stopped
One command to rule them all:
docker compose up -d # Start everything
docker compose down # Stop everything
docker compose restart # Restart everything
Power and Noise: Practical Considerations
Where to put it: - Laptops are quiet and fit anywhere — a shelf, closet, or under a desk - Desktops may have fan noise — spare room or garage works well - Basements are ideal (cool temperatures = longer lifespan)
Power management:
- Set the BIOS to auto-boot after power loss (look for "Restore on AC Power Loss")
- Configure Ubuntu to sleep disks when idle:
bash
sudo hdparm -S 120 /dev/sda # Spin down after 10 minutes of idle
- Measure actual consumption with a Kill-A-Watt meter — you might be surprised how little it draws
UPS (Uninterruptible Power Supply): A sudden power loss can corrupt files. A basic UPS ($40-60) gives you enough battery time for the server to shut down gracefully:
sudo apt install nut
NUT (Network UPS Tools) monitors the UPS and triggers a safe shutdown when battery runs low.
Security Basics for Home Servers
Your home server is only accessible from inside your home network by default. That's good — no one from the internet can reach it. But as you add services, keep these rules:
- Key-based SSH only — disable password login once keys work (covered in our SSH guide)
- Firewall:
sudo ufw enablethen only open ports services actually need - Update regularly:
sudo apt update && sudo apt upgrade -yweekly - Don't expose to the internet unless you understand the implications and use a reverse proxy with HTTPS
- Separate services with Docker — each container is sandboxed from the host
The Real Win: What You'll Learn
Setting up a home server teaches you:
- Linux administration — the skill behind every cloud job
- Networking — IP addresses, DNS, port forwarding, firewalls
- Containers — Docker is the industry standard for deploying applications
- Self-reliance — you control your data, your services, your uptime
Every professional system administrator started by tinkering with an old PC. You're following the exact same path.
When you're ready to go further, learn Docker in depth and start exploring the massive ecosystem of self-hosted apps. Your old PC can do far more than you ever expected — it just needs the right software and a little Linux know-how.
And if you ever need to connect to your server from outside your home, our SSH guide has you covered with secure remote access.