# 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

1. **Download the ISO**: Grab the latest [Ubuntu Server ISO](https://ubuntu.com/download/server).
    
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.*

4. **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:

```bash
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

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

Paste the following into the file:

```bash
#!/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

```bash
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:

```bash
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

```bash
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

```bash
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*](https://github.com/febinjoy)*.*
