Skip to main content

Command Palette

Search for a command to run...

Part 1: Installing and Configuring the Base Ubuntu Server

Updated
β€’3 min read
Part 1: Installing and Configuring the Base Ubuntu Server
F

Technical leader and architect with 20+ years of experience designing secure, scalable enterprise platforms across cloud, hybrid, and on-prem environments. Currently leading technical architecture and cross-functional teams delivering mobility and compliance systems used by 300+ organisations across Australia and New Zealand.

Proven track record of translating complex compliance frameworks (HIPAA, ISO 27001) into production-grade systems. Skilled in Azure cloud migration, secure software development, and risk-driven design. Focused on architecting resilient platforms that enhance public safety, operational efficiency, and long-term engineering excellence. Based in Melbourne, Australian citizen, and a clear communicator with a strategic mindset.

Welcome to Part 1 of my multi-part series on setting up a headless Ubuntu home lab server tailored for developers. This post covers the installation of Ubuntu Server, setting up your development environment, and installing essential tools to get started.

πŸ’‘ This setup is intended for a personal home lab, not a production environment.


πŸ–₯️ Step 1: Install Ubuntu Server

  1. Download the ISO: Grab the latest Ubuntu Server ISO.

  2. Create a bootable USB with the ISO downloaded. How to do this step differs with different operating systems.

  3. Boot and Install:

    • Insert the USB drive into your server and boot from it.

    • Follow the on-screen instructions.

    • During installation:

      • Choose to install OpenSSH Server.

      • Select Use SSH via GitHub (adds your GitHub keys to enable SSH).

πŸ” Ensure your GitHub account has your SSH public keys added before installation.

  1. Static IP Recommendation:
    Assign a static IP for your server in your router (outside the DHCP range).

πŸ”„ Step 2: Update the System

Run the following to make sure the system is up-to-date:

sudo apt update && sudo apt upgrade -y

🧰 Step 3: Install Programming Languages & Frameworks

Create a setup script to install all your preferred tools in one go.

1. Create Setup Directory and Script

mkdir ~/setup
nano ~/setup/install_from_file.sh

Paste the following into the file:

#!/bin/bash

# Java Runtime Environment
sudo apt install -y default-jre

# Python and Pip
sudo apt install -y python3 python3-pip python3-venv python3-debugpy

# NodeJS
curl -fsSL https://deb.nodesource.com/setup_23.x | sudo -E bash -
sudo apt install -y nodejs

# Golang
sudo apt install -y golang

# Lua
sudo apt install -y lua5.4 luarocks

# .NET SDK
wget https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update
sudo apt install dotnet-sdk-8.0 -y

# Sqlite3
sudo apt install -y sqlite3

2. Make It Executable and Run

chmod +x ~/setup/install_from_file.sh
sudo ~/setup/install_from_file.sh

πŸ” Step 4: Verify Installations

Check the versions to verify the tools are installed:

java --version
python3 --version
pip3 --version
node -v
npm -v
go version
dotnet --list-sdks

πŸ”„ Step 5: Install and Configure Git & GitHub SSH

1. Verify Git Installation

sudo apt install -y git
git config --global user.name "Your Name"
git config --global user.email "you@example.com"

2. Create SSH Key and Add to GitHub

ssh-keygen -t ed25519 -C "you@example.com"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
cat ~/.ssh/id_ed25519.pub

Copy the output and add it to GitHub:

  • GitHub β†’ Profile β†’ Settings β†’ SSH and GPG keys β†’ New SSH Key

  • Title: Homelab - <your-server-hostname>

  • Paste key and save

Now you can git clone via SSH securely. The same steps could be repeated for Bitbucket or other source control tools if required.


In the next part, we'll install essential terminal tools and boost productivity with a custom shell setup, Neovim, TMUX, and more.

Stay tuned for Part 2: Essential Terminal Tools for Productivity!


Have questions or feedback? Drop a comment below or reach out via GitHub.

Ubuntu home lab for developers

Part 6 of 6

This blog series guides you through setting up a secure, containerised, developer-friendly headless Ubuntu home serverβ€”from OS install to deploying self-hosted services with Podman. Perfect for devs and homelab enthusiasts alike.

Start from the beginning

Part 6: Nginx Reverse Proxy for Clean URLs

Welcome to Part 6 of the Ubuntu home lab series. Now that we have several apps running on different ports, it’s time to simplify access using Nginx as a reverse proxy. This lets us use URLs like http://jellyfin.myserver.home instead of IP:port combos...

More from this blog

A

Art of coding

15 posts

A technical leader and software engineer with 20+ years experience designing enterprise platforms. If you are interested in software development and architecture, feel free to follow and subscribe.