Skip to content

Instantly share code, notes, and snippets.

@Pedramx
Last active May 17, 2025 13:16
Show Gist options
  • Select an option

  • Save Pedramx/a6446a447e395c8d2750e46217c83cd0 to your computer and use it in GitHub Desktop.

Select an option

Save Pedramx/a6446a447e395c8d2750e46217c83cd0 to your computer and use it in GitHub Desktop.

πŸš€ Developer Setup Guide for Ubuntu (24.04 LTS)

This document guides new developers through installing essential tools for Java development, DevOps tasks, and everyday productivity.

βœ… Step 0: Update Ubuntu Packages

sudo apt update && sudo apt upgrade -y

πŸ”§ Step 1: Basic Utilities

sudo apt install -y curl wget git unzip zip htop tree tmux jq

πŸ”‘ Step 2: Git and GitHub CLI

sudo apt install -y git

curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli.gpg] \
https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list
sudo apt update && sudo apt install -y gh

β˜• Step 3: SDKMAN! (Java & Tools Manager)

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

sdk install java 21.0.3-tem
sdk install maven
sdk install gradle

πŸ“¦ Step 4: Docker & Docker Compose

sudo apt install -y docker.io docker-compose
sudo systemctl enable --now docker
sudo usermod -aG docker $USER

Logout and login again to use Docker without sudo.

docker run hello-world

⚠️ Important Caution (Network Conflict with Docker):

By default, Docker uses the 172.17.0.0/16 subnet for its bridge network. If your company VPN or internal network also uses this range, you may lose access to internal services or experience routing issues.

βœ… Solution: Change Docker’s default subnet by creating/editing /etc/docker/daemon.json:

{
  "bip": "172.50.0.1/16"
}

Then restart Docker:

sudo systemctl restart docker

You can confirm the change with:

ifconfig docker0

πŸ“£ Ask your IT team for a safe subnet to use before making this change.


☸️ Step 5: Kubernetes Setup (Minikube & kubectl)

kubectl (CLI):

sudo apt install -y apt-transport-https ca-certificates curl

sudo curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key \
| sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] \
https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' \
| sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt update
sudo apt install -y kubectl

Minikube (local K8s cluster):

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube start

πŸ“ Step 6: IDEs & Editors

Visual Studio Code:

curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/ms.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ms.gpg] \
https://packages.microsoft.com/repos/code stable main" | sudo tee /etc/apt/sources.list.d/vscode.list
sudo apt update && sudo apt install -y code

IntelliJ IDEA Community:

sudo snap install intellij-idea-community --classic

πŸš€ Step 7: Cursor IDE (AI-powered)

Download Cursor AppImage from cursor.sh:

sudo apt install -y libfuse2
mkdir -p ~/Applications
mv ~/Downloads/cursor*.AppImage ~/Applications/cursor.AppImage
chmod +x ~/Applications/cursor.AppImage

Alias (optional):

echo "alias cursor='~/Applications/cursor.AppImage --no-sandbox'" >> ~/.bashrc
source ~/.bashrc

πŸ”’ Step 8: V2Ray VPN Client

sudo bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)
sudo systemctl enable --now v2ray

Edit config:

/usr/local/etc/v2ray/config.json

Restart:

sudo systemctl restart v2ray

πŸ–₯️ Step 9: Zsh & Oh My Zsh

sudo apt install -y zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
chsh -s $(which zsh)

βœ… Post-install Checklist

git --version
gh --version
docker --version
docker-compose --version
kubectl version --client
minikube version
java -version
mvn -version
gradle -version
code --version
zsh --version
v2ray --version
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment