Slow server keeping you up at night? Let’s fix that.
I used to babysit a server that acted like a sleepy puppy. The moment you added a new site, it groaned under its own weight. 1.5 GB of RAM, just sitting idle.
That changed the day I stopped installing *everything* Ubuntu pushed on me. I went lean—no icons, no mouse cursor, no fluffy desktop. My green-screen monster now drinks 500 MB at rest and still outruns the neighbors. Here’s the exact playbook so you can do the same.
Why the GUI is secretly picking your pocket
Picture a restaurant that insists on bringing every single condiment even when you only ordered water. That’s the Ubuntu default install.
- Memory: Every panel, theme, and background burns 300-800 MB you will never touch.
- CPU: Background eye-candy steals 5-15 % of your cycles.
- Boot time: Those pretty splash screens add 20-40 seconds every reboot.
- Security: Each extra doorbell you never wired is another way for someone to ring it.
So yeah—less is more. **Much more.**
The ten-minute blueprint
1. Snag the right ISO
Skip the shiny “Desktop” download button. Grab the plain Ubuntu Server 22.04 LTS. If you want to be *especially* picky, pick the *Minimal CD* tucked under *Alternative Downloads*. Think of it as ordering à la carte instead of the buffet.
2. Pretend the GUI doesn’t exist
During install, you’ll reach **Software Selection**. Here’s your Jedi moment: un-tick everything except Standard System Utilities.
No, you don’t need the SSH option ticked here; we’ll install SSH ourselves in forty seconds. Trust the process.
3. First boot housekeeping
sudo apt update && sudo apt upgrade -y
sudo apt purge snapd cloud-init ubuntu-advantage-tools -y
sudo apt autoremove --purge -y
Took me two minutes. Snapped away forty megs I’ll never miss.
4. Install only the tools you’ll actually use
sudo apt install openssh-server htop ufw fail2ban
OpenSSH: so you can sip coffee and still ssh into the box from your couch.
UFW: lock it down.
Fail2ban: because password scanners never sleep.
5. A thirty-second security lock-down
sudo ufw enable
sudo ufw allow ssh
sudo sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl restart ssh
Done. **80 % of automated attacks bounce off right there**, according to a recent SANS report.
Before and after snapshots from my lab
| Metric | Fully-loaded Ubuntu | Minimal install |
|---|---|---|
| Idle RAM | 1.5 GB | 450-500 MB |
| Boot time | 45 s | 19 s |
| Attack surface (CVE count) | ~120 | ~40 |
| Disk used by OS | 11 GB | 2.1 GB |
That extra RAM? I later fired up a Redis cluster and it purred like a kitten.
Quick head-scratchers and fixes
“I can’t reach the internet after install.”
Run ip a. If your NIC shows “DOWN,” either plug in Ethernet or edit /etc/netplan/00-installer-config.yaml. One line edit usually brings it right up.
“Bluetooth error on my server—why does a server even load Bluetooth?”
Because the kernel is polite. One deactivation ends the madness:
sudo systemctl disable bluetooth.service
“I need Node or Python later.”
Install exactly when you need them. Engineers call this “just-in-time provisioning.” I call it “not paying interest on packages you might someday use.”
Living the lean life after day one
Think of your new server like an empty studio apartment. Furnish it only when the lease is signed:
# I needed a static binary late one night
sudo apt install build-essential git
# Finished the compile? Remove the tools the next day
sudo apt remove build-essential
Rinse, repeat. Disk space, RAM, and sanity stay intact.
The million-dollar question: “Should I do this in production?”
Yes. DigitalOcean, AWS, and Linode all hand you **minimal images by default** because they, too, pay the electric bill at the end of the month. If it’s good enough for their bottom line, it’s good enough for yours.
Grab the ISO tonight. Thirty minutes to install, another fifteen to lock it down. Tomorrow you’ll wake up to faster sites, smaller bills, and a server that actually earns its keep.
