How to Turn a Raspberry Pi into a Home Server (Headless Setup to First App)

A Raspberry Pi home server: 5 watts, silent, no monitor needed.

A Raspberry Pi costs less than a tank of petrol, uses about as much power as a phone charger, and makes no noise. It won't host a busy website, but for Pi-hole, a VPN, Uptime Kuma, Home Assistant or a small Nextcloud it's ideal. Everything in this series works on it — the only difference is how you get started, because there's no USB installer and usually no monitor.

Quick reference

StepWhat
ToolRaspberry Pi Imager on your PC or Mac
OSRaspberry Pi OS Lite (64-bit) — no desktop
Before writingEdit settings: hostname, user, Wi-Fi, SSH on
First loginssh john@pihome.local
StoragemicroSD to start; USB SSD for anything that writes a lot
ThenFollow tutorials 3 to 7 (keys, sudo, updates, firewall, Fail2ban)

1. Flash the card with SSH already on

  1. Download Raspberry Pi Imager from raspberrypi.com/software.
  2. Choose your Pi model, then Raspberry Pi OS (other) → Raspberry Pi OS Lite (64-bit). Lite has no desktop — a server doesn't need one.
  3. Choose the microSD card.
  4. Click Next, then Edit Settings:
    • Hostname: pihome
    • Username and password: your own
    • Wi-Fi: your network name and password, plus country (skip if using Ethernet — which is better for a server)
    • Services tab: Enable SSH, and paste your public key if you have one (tutorial 3)
  5. Save, Yes, and write.

That's the headless trick: no monitor or keyboard ever needs touching the Pi.

2. First login

Put the card in, power up, wait a minute:

ssh john@pihome.local

If .local doesn't resolve, find the Pi's IP in your router's device list and use that. Then:

sudo apt update && sudo apt full-upgrade -y
sudo reboot

3. The settings tool

sudo raspi-config

Worth a look: System → Boot (make sure it's console, not desktop), Localisation (time zone), Advanced → Expand Filesystem (older images), and Performance → GPU Memory set to 16 since you're not using graphics.

4. Move to an SSD (recommended)

microSD cards are slow and wear out, especially with a database writing constantly. A cheap USB SSD (or NVMe HAT on a Pi 5) is the single biggest upgrade:

  1. Flash the SSD exactly as in step 1, using a USB adapter.
  2. On a Pi 4 or 5, plug it in and remove the microSD. It boots from USB by default.
  3. If it doesn't, boot from the card once, run sudo raspi-config → Advanced → Boot Order → USB Boot, and try again.

Keep the card as a rescue copy.

5. Which Ubuntu tutorials apply?

All of them. Raspberry Pi OS is Debian underneath, the same family as Ubuntu, so apt, systemctl, ufw, Docker and everything else behave identically. The few differences:

6. What a Pi can and can't do

Fine on a Pi 4 (4 GB) or Pi 5Struggles
Pi-hole, WireGuard, Uptime KumaTranscoding video (Plex/Jellyfin 4K)
Home Assistant, Node-REDBig Nextcloud with many users
Samba share of a USB driveMinecraft with many players
Small WordPress, Gitea, VaultwardenAnything compiling or running AI models

A Pi 5 with 8 GB and an NVMe drive is a genuinely capable little server. A Pi Zero is for one job at a time.

Troubleshooting

Can't find pihome.local. Windows sometimes needs a minute; or use the IP from the router. Make sure Wi-Fi details were right — a typo means it never joins the network and you'll need to re-flash.

Red light only, no green flicker. The card isn't readable. Re-flash, or try another card.

Random reboots or "under-voltage" warnings. Cheap power supply. Use the official one; a Pi 5 wants 5 V at 5 A.

USB SSD not detected. Some USB-SATA adapters don't work with the Pi. Try sudo nano /boot/firmware/cmdline.txt and add usb-storage.quirks= with the adapter's ID — or just use a different adapter.

Slow with lots of Docker containers. You're on a microSD. Move to an SSD.

Wrapping up

Imager with SSH and your user pre-set, log in by name, update, move to an SSD when you can. From there it's the same apt, docker compose and ufw as any other server — just quieter, cheaper, and sitting on top of the router.

Call us