In the first episode of this series we figured out what we’re building: a home server split into a private zone (accessible only via VPN) and a public zone (websites, mail, reverse proxy). Now it’s time to get our hands on the hardware and install the operating system. This episode is deliberately hands-on: by the end you’ll have a server powered on, reachable on your local network, and ready to receive everything we’ll install in the coming episodes.
Which hardware to use
The good news is you don’t need to buy anything new. A laptop retired within the last ten years is more than enough. The real minimum requirements — not the ones in the documentation — are: 4 GB of RAM (8 GB is better), a 64-bit processor, and at least 60 GB of disk space. With this setup you can run WireGuard, Vaultwarden, Nginx Proxy Manager and a few more services simultaneously without breaking a sweat.
Laptops have a concrete advantage over desktops: the built-in battery acts as a UPS. If the power goes out for a few seconds, the server doesn’t shut down abruptly. It’s a detail that makes a real difference for the integrity of the data on disk.
What to check before you start: make sure the BIOS supports automatic startup after a power interruption (the “Power On After AC Loss” option or similar — set it to “Power On”). This ensures the server comes back online on its own after a blackout, without you having to intervene physically. Also check that Wi-Fi works on Linux or, better still, use an ethernet cable: a wired connection is more stable and doesn’t depend on problematic drivers.
Why Ubuntu Server (and not Desktop)
Ubuntu Server is the version of Ubuntu without a graphical interface. At first it can seem intimidating, but it’s the right choice for three reasons. First: it consumes fewer resources — no GPU, no compositing, no graphical processes running in the background. Second: it’s designed to stay powered on untouched, with automatic security updates and optimizations for uptime. Third: you learn to use the terminal, which is the most transferable skill you can acquire in tech.
The recommended version is Ubuntu Server 24.04 LTS (Long Term Support): it receives security updates until 2029, and it’s the base on which most of the Docker guides we’ll be using are built.
Step-by-step installation
1. Create the installation USB stick. Download the ISO from ubuntu.com/download/server and use Balena Etcher (free, available on Mac, Windows and Linux) to write it to a USB stick of at least 4 GB. The process erases everything on the stick.
2. Boot from USB. Insert the stick into the laptop that will become your server, turn it on, and enter the boot menu (usually F12, F2 or Esc depending on the manufacturer). Select the USB stick as the boot device.
3. Follow the installer. Ubuntu Server has a text-based but guided installer. The important choices: select “Ubuntu Server” (not the minimized version), let the installer partition the disk automatically (unless you have specific requirements), and enable OpenSSH server when the installer asks — that’s the door we’ll use to manage the server remotely.
4. Create the user and choose the hostname. Pick a simple username (e.g. admin) and a recognizable hostname for your network (e.g. homeserver). The password must be strong: you’ll rarely use it, but it’s the last line of defense.
5. First boot and update. After installation, the laptop will reboot into the terminal. Run this right away:
sudo apt update && sudo apt upgrade -y
This updates all packages to the latest version. Reboot with sudo reboot.
Setting a static IP on the local network
The last step before wrapping up this episode is to assign the server a fixed IP on the local network. Without this, every time the router hands the server a different IP, all the configurations we’ll do in the coming episodes stop working.
The simplest way is to do it from the router: look for the “DHCP reservations” or “Static DHCP” section and associate your server’s MAC address with a fixed IP (e.g. 192.168.1.100). Alternatively, you can configure it directly on Ubuntu by editing the Netplan file in /etc/netplan/.
Once that’s done, try connecting via SSH from your main computer with:
ssh username@192.168.1.100
If you see the server’s terminal prompt, you’re done. The server is ready.
Conclusion
You have an Ubuntu server powered on, reachable via SSH, with a fixed IP on the local network. It’s a solid foundation — and from here on everything gets more interesting. In the next episode we’ll install WireGuard with wg-easy: the VPN that will make the private zone accessible only to those who hold the right keys. It’s the most important component of the entire architecture, and you’ll see it’s not complicated to configure at all.
Sources: