The cloud is just someone else’s computer with a monthly invoice attached. If you are done renting your digital life, it is time to bring it home. That dusty laptop under the bed can become a tiny data centre that you actually control. No contracts. No mystery fees. Just your files, your apps and your rules.
In the video I show how easy this is in practice, but you can follow along right here. We will install Ubuntu Server, give it a rock solid static IP, and switch on SSH so you can run everything from your main computer. Keep it lean without a desktop, or add a lightweight one later if that feels friendlier. By the end you will have a clean, reliable base you can build on, whether you want your own media library, private storage or a home for experiments.
Make a brew, rescue that old machine and let’s turn it into your piece of the cloud.
You will need:
Ubuntu Server 22.04 LTS or 24.04 LTS on a USB stick
Ethernet cable to your router (wired first, Wi-Fi is possible later)
A monitor or TV for the first boot
Another computer on the same network for SSH
Decide on your network details:
Router or gateway address (often 192.168.1.1)
Your server’s static IP (pick an unused one, for example 192.168.1.120)
DNS (router or 1.1.1.1, 8.8.8.8)
Subnet: /24 which is the same as 255.255.255.0 for most home networks
Tiny install and firmware checklist:
In your UEFI or BIOS, select the USB device as the boot target (often shown as UEFI: <USB brand>).
Optional, verify the ISO checksum:
sha256sum ~/Downloads/ubuntu-24.04-live-server-amd64.iso
Basic health checks for old hardware, you can run these after install:
sudo apt install -y smartmontools memtester sudo smartctl -a /dev/sda
TV tip: if your screen is a TV, rename its HDMI input to PC. This often unlocks a proper 1:1 picture mode that avoids cropping later.
Tip: if your router supports DHCP reservations, bind the server’s MAC to your chosen IP. Otherwise, pick an IP outside the DHCP pool. For example, if the pool is 192.168.1.100–199, choose .50 or .210.Find the server’s MAC on Linux:
ip link show | awk '/link\/ether/{print $2}'
During the installer:
Select your network interface, choose Edit IPv4, then Manual
Enter values like:
Subnet: 192.168.1.0/24 (CIDR /24 equals netmask 255.255.255.0)
Address: 192.168.1.120
Gateway: 192.168.1.1
Name servers: 192.168.1.1, 1.1.1.1, 8.8.8.8
Search domains: leave blank
Tick Install OpenSSH server
Finish the install and reboot
Some screens show a Netmask field, others want CIDR like 192.168.1.0/24. Same idea, different box.
ip a # check the interface has your static IP
ping -c 3 192.168.1.1 # can you reach the router
ping -c 3 8.8.8.8 # can you reach the internet
Edit networking later if needed:
sudo nano /etc/netplan/*.yaml # addresses: [192.168.1.120/24]
sudo netplan apply
YAML is fussy. Mind your spaces like they are rare Pokémon.
Working from your laptop is nicer than crouching by a humming box.
sudo systemctl status ssh
# if it is not active:
sudo systemctl enable --now ssh
# IMPORTANT: allow SSH BEFORE enabling UFW, so you do not lock yourself out
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status
From Windows PowerShell, macOS Terminal, or Linux:
ssh <your-ubuntu-username>@192.168.1.120
First time: type yes to trust the fingerprint, then your password.
Windows note: Windows 10 and 11 usually include the OpenSSH client. If not, install it via Settings, Optional Features, Add a feature, OpenSSH Client.
Passwords are fine. SSH keys are finer. They are easier daily and more secure.
ssh-keygen -t ed25519 -C "ubuntu-server"
# press Enter to accept defaults, add a passphrase if you want
ssh-copy-id <your-ubuntu-username>@192.168.1.120
Now log in using the key:
ssh <your-ubuntu-username>@192.168.1.120
Keep one SSH session open while you do it, just in case.
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart ssh
On the server console:
# confirm your username
whoami
id <your-ubuntu-username>
# reset your password if needed
sudo passwd <your-ubuntu-username>
# make sure SSH accepts passwords if you have not switched to keys yet
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?UsePAM.*/UsePAM yes/' /etc/ssh/sshd_config
sudo systemctl restart ssh
# firewall check
sudo ufw status
# watch logs while attempting a login from your laptop
sudo tail -f /var/log/auth.log
If you see Failed password for <user>, suspect a typo, keyboard layout, or the wrong username. If it says publickey only, password auth is still disabled.
sudo apt update && sudo apt upgrade -y
Unattended security updates:
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades
Advanced, set an auto reboot time:
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
# Unattended-Upgrade::Automatic-Reboot "true";
# Unattended-Upgrade::Automatic-Reboot-Time "01:00";
sudo mkdir -p /srv/data
sudo chown -R $USER:$USER /srv/data
You can mount extra disks to /srv/data later and point your services at it.
When you add a second disk later, example:
lsblk
sudo mkfs.ext4 /dev/sdb1
sudo mkdir -p /mnt/data
echo 'UUID='$(blkid -s UUID -o value /dev/sdb1)' /mnt/data ext4 defaults 0 2' | sudo tee -a /etc/fstab
sudo mount -a
Set a friendly hostname, it shows in your prompt:
sudo hostnamectl set-hostname homeserver
Set the correct timezone for logs and reboots:
sudo timedatectl set-timezone Europe/London
Create a second admin, safer than only one:
sudo adduser admin2
sudo usermod -aG sudo admin2
Password policy later, if you like:
sudo apt install -y libpam-pwquality
Avoid exposing SSH to the internet unless you know what you are doing. If you must, change the port, use keys only, and consider fail2ban:
sudo apt install -y fail2ban
Handy logs:
# Network issues
journalctl -u systemd-networkd --no-pager
# SSH attempts
sudo tail -f /var/log/auth.log
Some people love a desktop. Others think a GUI on a server is like alloy wheels on a tractor. Here is the balanced view.
Easier discovery and learning. Click around, browse files, peek at logs.
Lower fear factor for beginners.
Remote desktop workflows via RDP or VNC.
Resources. Expect 300 to 600 MB of RAM at idle, sometimes more, plus a little CPU.
Bigger attack surface. More packages and services to patch.
Most admin is faster in SSH anyway.
Summary: if a GUI helps you get work done, install a lightweight one and keep the server booting to console by default.
# 1) Update package lists
sudo apt update
# 2) Install a lightweight desktop and display manager, no giant extras
sudo apt install -y --no-install-recommends xfce4 lightdm xorg
# During install, if asked, choose: lightdm
Keep booting to console, start GUI on demand:
sudo systemctl set-default multi-user.target
sudo systemctl start lightdm
Boot to desktop automatically, if you really want:
sudo systemctl set-default graphical.target
sudo apt install -y xrdp
sudo systemctl enable --now xrdp
sudo ufw allow 3389/tcp
Connect from your other computer to:
<your-server-ip>:3389
Log in with your Ubuntu username and password.Tip: if prompted for a session, choose XFCE, or create ~/.xsession with startxfce4.
Skip the desktop and use a web console like Cockpit for dashboards, logs, updates, storage, and a built in terminal. Low resource, still GUI like.
sudo systemctl set-default multi-user.target
sudo systemctl stop lightdm
sudo apt purge -y xfce4 lightdm xorg
sudo apt autoremove -y
If your telly is auditioning for a crop top, this section is for you.
sudo dpkg-reconfigure console-setup
Choose UTF-8, a clear font such as Fixed or TER if offered, and a large size such as 16x32 or larger. Then:
sudo update-initramfs -u
sudo reboot
First, try the TV: set Picture Size to Just Scan, 1:1, Full Pixel, or Screen Fit. Renaming the HDMI input to PC often unlocks those options.
If the TV will not cooperate:
Find your connected display name, use this exact connector later:
grep . /sys/class/drm/*/status
# note the one that says: connected for example, card1-DVI-I-1
Use a slightly smaller console mode so it fits:
sudo nano /etc/default/grub
Add or update the following, adjust the connector name:
GRUB_GFXMODE=1184x664
GRUB_GFXPAYLOAD_LINUX=keep
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=DVI-I-1:1184x664@60"
Then:
sudo update-grub
sudo reboot
If there is still a tiny crop, reduce the numbers a touch, for example 1152x648, and repeat. It is a small Goldilocks exercise, but you will find just right quickly.
If you run Ubuntu Server as a VM rather than bare metal, remember the host needs RAM for itself plus what you assign to the guest, and some CPU headroom. Two VMs at 4 GB each means more than 8 GB total in the host.
You now have a rock steady static IP, clean SSH access, updates sorted, and a tidy place for your files, with optional GUI and TV tweaks. From here, add whatever you like: media server, file sync, Docker, homelab wizardry. The world is your apt repository.