Part 1: Installing and Configuring the Base Ubuntu Server


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
Download the ISO: Grab the latest Ubuntu Server ISO.
Create a bootable USB with the ISO downloaded. How to do this step differs with different operating systems.
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.
- 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.
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
A software engineer with over 20 years of experience in designing and developing solutions for various domains and industries with expertise in OOD, SOLID principles, Software Architecture, and Design patterns.