Part 1: Installing and Configuring the Base Ubuntu Server

Febin JoyFebin Joy
3 min read

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.

0
Subscribe to my newsletter

Read articles from Febin Joy directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Febin Joy
Febin Joy

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.