000 — Pre-Bootcamp Setup Guide
000 — Pre-Bootcamp Setup Guide
⚠️ IMPORTANT: Complete this guide BEFORE Saturday's bootcamp. Estimated time: 45–90 minutes (depending on internet speed and OS).
If you get stuck, screenshot the error and send it to the group chat.
I have uploaded all the slide decks and reference PDFs to our secure drive.
👉 Download the Course PDFs Here
(Password to unlock folder: devops20260509!)
Table of Contents
- Create Required Accounts
- Install Development Tools (Windows)
- Install Development Tools (macOS)
- Generate SSH Key
- Add SSH Key to GitHub
- Configure Git Identity
- Clone Bootcamp Repository & Push to Your Account
- Install Additional Tools
- Verification Checklist
- Troubleshooting
1. Create Required Accounts
1.1 GitHub Account
If you don't already have one:
- Go to https://github.com/signup
- Create your account with a professional username (this will appear in your deployment URLs)
- Verify your email address (check inbox for verification email)
- Once created, send your GitHub username to the instructor so we can create your DNS record
📌 Note: Your GitHub username will become your subdomain (e.g.,
alidev.lazuar.dev). Choose a username you're happy seeing in a URL.
1.2 DigitalOcean Account
- Go to DigitalOcean
- Sign up (you can use your GitHub account to continue)
- Add a payment method (credit/debit card required — no charges during setup)
- Optional: use this referral link to get free credits for your account: Claim DigitalOcean Free Credit
💰 Cost expectation: The resources we create will cost approximately $6–12/month. You can destroy everything after the bootcamp if you don't want to keep it running.
2. Install Development Tools (Windows)
🖥️ Skip this section if you're on macOS. Jump to Section 3.
2.1 System Requirements
- Windows 10 version 2004+ (Build 19041+) or Windows 11
- At least 8GB RAM (16GB recommended)
- Virtualization enabled in BIOS/UEFI
Check your Windows version:
Press Win + R, type winver, press Enter. Your build number must be 19041 or higher.
2.2 Install WSL2
Open PowerShell as Administrator (right-click Start → "Windows Terminal (Admin)" or "PowerShell (Admin)"):
wsl --install
This command will:
- Enable WSL feature
- Enable Virtual Machine Platform
- Download and install Ubuntu (default)
⚠️ You MUST restart your computer after this step.
After restart, Ubuntu will open automatically and ask you to create a username and password. These are your Linux credentials (not your Windows password).
Verify WSL2 is working:
wsl --list --verbose
You should see:
NAME STATE VERSION
* Ubuntu Running 2
⚠️ If VERSION shows
1instead of2, run:wsl --set-version Ubuntu 2
2.3 Install Docker Engine Inside WSL
⚠️ We install Docker inside WSL2, NOT Docker Desktop. Docker Desktop is heavy and has licensing restrictions. Docker Engine inside WSL is lighter and free.
Open your Ubuntu terminal (search "Ubuntu" in Start menu):
# Update package lists
sudo apt update && sudo apt upgrade -y
# Install prerequisites
sudo apt install -y ca-certificates curl gnupg lsb-release
# Add Docker's official GPG key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add Docker repository
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Add your user to the docker group (so you don't need sudo)
sudo usermod -aG docker $USER
Now close and reopen your Ubuntu terminal (this applies the group change).
Start Docker daemon:
sudo service docker start
💡 Tip: Docker daemon doesn't auto-start in WSL2. You'll need to run
sudo service docker starteach time you open a new terminal, OR add it to your~/.bashrc:echo '# Auto-start Docker daemon if service docker status 2>&1 | grep -q "is not running"; then sudo service docker start >/dev/null 2>&1 fi' >> ~/.bashrcThen configure passwordless sudo for docker service:
sudo visudo -f /etc/sudoers.d/dockerAdd this line (replace
YOUR_USERNAMEwith your actual WSL username):YOUR_USERNAME ALL=(ALL) NOPASSWD: /usr/sbin/service docker *Save with
Ctrl+X, thenY, thenEnter.
Verify Docker installation:
docker --version
docker compose version
docker run hello-world
You should see a "Hello from Docker!" message. ✅
2.4 Install Git (inside WSL)
Git usually comes pre-installed with Ubuntu. Verify:
git --version
If not installed:
sudo apt install -y git
2.5 Important: Always Use WSL Terminal
For the rest of this guide and during the bootcamp, always use the Ubuntu/WSL terminal, not PowerShell or CMD.
You can access WSL from Windows Terminal by clicking the dropdown arrow and selecting "Ubuntu".
3. Install Development Tools (macOS)
🍎 Skip this section if you're on Windows. You should have completed Section 2.
3.1 Install Homebrew (if not already installed)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
After installation, follow the instructions printed in the terminal to add Homebrew to your PATH.
3.2 Install Docker Desktop for macOS
- Go to https://www.docker.com/products/docker-desktop/
- Download the version for your chip:
- Apple Silicon (M1/M2/M3/M4): "Mac with Apple chip"
- Intel Mac: "Mac with Intel chip"
- Open the
.dmgfile and drag Docker to Applications - Launch Docker Desktop from Applications
- Accept the terms and wait for Docker to fully start (whale icon in menu bar stops animating)
Verify Docker installation:
docker --version
docker compose version
docker run hello-world
3.3 Install Git
# Git comes with Xcode Command Line Tools
xcode-select --install
Or via Homebrew:
brew install git
Verify:
git --version
4. Generate SSH Key
🔐 This SSH key will be used to:
- Authenticate with GitHub (push/pull code)
- Connect to your DigitalOcean VPS
We'll generate one key and use it for both purposes.
4.1 Generate the Key
Run this in your terminal (WSL Ubuntu terminal for Windows, Terminal.app for macOS):
ssh-keygen -t ed25519 -C "your_email@example.com"
Replace your_email@example.com with the email you used for GitHub.
When prompted:
- File location: Press
Enterto accept default (~/.ssh/id_ed25519) - Passphrase: Press
Enterfor no passphrase (or set one if you prefer)
4.2 Start SSH Agent and Add Key
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
4.3 Copy Your Public Key
cat ~/.ssh/id_ed25519.pub
Copy the entire output (starts with ssh-ed25519 and ends with your email). You'll need this in the next steps.
💡 Windows/WSL Tip: To copy from WSL terminal, select the text and right-click (or
Ctrl+Shift+C).
5. Add SSH Key to GitHub
- Go to https://github.com/settings/ssh/new
- Title: Enter something like
Bootcamp LaptoporMy MacBook - Key type: Authentication Key
- Key: Paste the public key you copied in step 4.3
- Click Add SSH key
Test the connection:
ssh -T git@github.com
You should see:
Hi YOUR_USERNAME! You've successfully authenticated, but GitHub does not provide shell access.
⚠️ If you see "Permission denied (publickey)", see Troubleshooting.
6. Configure Git Identity
Set your name and email for Git commits:
git config --global user.name "Your Full Name"
git config --global user.email "your_email@example.com"
Set default branch name:
git config --global init.defaultBranch main
Verify:
git config --global --list
7. Clone Bootcamp Repository & Push to Your Account
🎯 In this step, you'll clone the bootcamp source code and push it to your own GitHub repository. This gives you full ownership of the code and allows you to set up your own CI/CD pipeline.
7.1 Create Your Repository on GitHub
- Go to https://github.com/new
- Repository name:
bootcamp - Visibility: Public
- ⚠️ Do NOT check "Add a README file"
- ⚠️ Do NOT add
.gitignoreor license - Click Create repository
You should see an empty repository page with setup instructions. Don't follow those instructions — we'll push code from the cloned repo instead.
📌 Your repository URL will be:
https://github.com/USERNAME/bootcamp(replaceUSERNAMEwith your actual GitHub username)
7.2 Clone the Bootcamp Codebase
Clone the instructor's source repository to your local machine:
git clone git@github.com:devopsmalaysia/bootcamp.git
Navigate into the project:
cd bootcamp
💡 This downloads the full application source code — the .NET API, Next.js web app, admin panel, Dockerfiles, CI/CD workflow, and all configuration.
7.3 Change Remote to Your Repository
The cloned repo currently points to the instructor's repository. Change it to point to YOUR repository:
git remote set-url origin git@github.com:USERNAME/bootcamp.git
⚠️ Replace
USERNAMEwith your actual GitHub username.
Verify the remote was changed:
git remote -v
You should see YOUR username (not devopsmalaysia):
origin git@github.com:USERNAME/bootcamp.git (fetch)
origin git@github.com:USERNAME/bootcamp.git (push)
7.4 Push Code to Your Repository
Push the entire codebase to your newly created repository:
git push origin main
Verify: Visit https://github.com/USERNAME/bootcamp in your browser. You should see all the project files.
🎉 You now own a complete copy of the bootcamp application!
7.5 (Optional) Add Upstream for Future Updates
If the instructor pushes updates to the original repo and you want to sync them later:
git remote add upstream git@github.com:devopsmalaysia/bootcamp.git
Verify all remotes:
git remote -v
Expected output:
origin git@github.com:USERNAME/bootcamp.git (fetch)
origin git@github.com:USERNAME/bootcamp.git (push)
upstream git@github.com:devopsmalaysia/bootcamp.git (fetch)
upstream git@github.com:devopsmalaysia/bootcamp.git (push)
To sync instructor updates in the future:
git fetch upstream
git merge upstream/main
git push origin main
📌 This step is optional. You don't need it to complete the bootcamp — it's just useful if the instructor releases fixes or new features after the initial setup.
8. Install Additional Tools
These tools will be needed during the bootcamp for local development.
8.1 Install Node.js (v20 LTS)
macOS:
brew install node@20
WSL/Ubuntu:
# Install Node.js 20 via NodeSource
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
Verify:
node --version # Should show v20.x.x
npm --version # Should show 10.x.x
8.2 Install pnpm
npm install -g pnpm
Verify:
pnpm --version # Should show 9.x.x or higher
8.3 Install .NET SDK 10 (Optional — only needed for local API development)
📌 Note: This is optional for the bootcamp. The API runs inside Docker during deployment. Only install if you want to run the .NET API locally outside of Docker.
macOS:
brew install dotnet-sdk
WSL/Ubuntu:
# Add Microsoft package repository
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
rm packages-microsoft-prod.deb
sudo apt update
sudo apt install -y dotnet-sdk-10.0
Verify:
dotnet --version # Should show 10.x.x
9. Verification Checklist
Run this single command in your terminal and screenshot the output:
echo ""
echo "╔══════════════════════════════════════════╗"
echo "║ BOOTCAMP READINESS CHECK ║"
echo "╠══════════════════════════════════════════╣"
echo "║ ║"
printf "║ OS: %-28s ║\n" "$(uname -s -r | cut -c1-28)"
printf "║ Docker: %-28s ║\n" "$(docker --version 2>/dev/null | cut -d' ' -f3 | tr -d ',' || echo 'NOT INSTALLED ❌')"
printf "║ Compose: %-28s ║\n" "$(docker compose version 2>/dev/null | cut -d' ' -f4 || echo 'NOT INSTALLED ❌')"
printf "║ Git: %-28s ║\n" "$(git --version 2>/dev/null | cut -d' ' -f3 || echo 'NOT INSTALLED ❌')"
printf "║ Node.js: %-28s ║\n" "$(node --version 2>/dev/null || echo 'NOT INSTALLED ❌')"
printf "║ pnpm: %-28s ║\n" "$(pnpm --version 2>/dev/null || echo 'NOT INSTALLED ❌')"
printf "║ SSH Key: %-28s ║\n" "$(test -f ~/.ssh/id_ed25519.pub && echo 'EXISTS ✅' || echo 'MISSING ❌')"
printf "║ GitHub: %-28s ║\n" "$(ssh -T git@github.com 2>&1 | grep -q 'successfully' && echo 'CONNECTED ✅' || echo 'NOT CONNECTED ❌')"
echo "║ ║"
echo "╠══════════════════════════════════════════╣"
# Docker daemon check
if docker info >/dev/null 2>&1; then
echo "║ Docker Daemon: RUNNING ✅ ║"
else
echo "║ Docker Daemon: NOT RUNNING ❌ ║"
fi
echo "║ ║"
echo "╚══════════════════════════════════════════╝"
echo ""
Expected Output (All Green):
╔══════════════════════════════════════════╗
║ BOOTCAMP READINESS CHECK ║
╠══════════════════════════════════════════╣
║ ║
║ OS: Linux 5.15.x ║
║ Docker: 27.x.x ║
║ Compose: v2.x.x ║
║ Git: 2.x.x ║
║ Node.js: v20.x.x ║
║ pnpm: 9.x.x ║
║ SSH Key: EXISTS ✅ ║
║ GitHub: CONNECTED ✅ ║
║ ║
╠══════════════════════════════════════════╣
║ Docker Daemon: RUNNING ✅ ║
║ ║
╚══════════════════════════════════════════╝
✅ Send the screenshot to the group chat to confirm you're ready!
10. Troubleshooting
10.1 SSH: "Permission denied (publickey)"
Problem: ssh -T git@github.com returns permission denied.
Fix:
# Check if SSH agent has your key loaded
ssh-add -l
# If empty, add your key
ssh-add ~/.ssh/id_ed25519
# Verify the public key is the same one on GitHub
cat ~/.ssh/id_ed25519.pub
Then compare the output with what's on https://github.com/settings/keys.
10.2 Docker: "Cannot connect to the Docker daemon"
Windows/WSL:
# Start Docker service
sudo service docker start
# Check status
sudo service docker status
macOS:
- Make sure Docker Desktop is running (whale icon in menu bar)
- If just installed, restart your Mac
10.3 Docker: "Got permission denied while trying to connect to the Docker daemon socket"
# Add yourself to docker group
sudo usermod -aG docker $USER
# IMPORTANT: Close terminal completely and reopen
# On WSL, run: exit, then open Ubuntu again
10.4 WSL: "WslRegisterDistribution failed with error: 0x80370102"
Cause: Virtualization is not enabled in BIOS.
Fix:
- Restart your computer
- Enter BIOS/UEFI (usually
F2,F12,Del, orEscduring boot) - Find "Virtualization Technology" or "Intel VT-x" or "AMD-V"
- Enable it
- Save and restart
10.5 WSL: "The Windows Subsystem for Linux has not been enabled"
# Run in PowerShell as Administrator
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Restart your computer, then run:
wsl --install
10.6 Node.js: "command not found" after installation (macOS)
If you installed via Homebrew:
echo 'export PATH="/opt/homebrew/opt/node@20/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
10.7 pnpm: "command not found"
# Try installing with corepack instead
corepack enable
corepack prepare pnpm@latest --activate
10.8 Git Clone: "Permission denied (publickey)" when cloning
Problem: git clone git@github.com:devopsmalaysia/bootcamp.git fails with permission denied.
Cause: Your SSH key isn't set up correctly for GitHub.
Fix:
# 1. Verify SSH key is added to agent
ssh-add -l
# 2. If empty, add it
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
# 3. Test GitHub connection
ssh -T git@github.com
# 4. If still failing, verify key is on GitHub:
cat ~/.ssh/id_ed25519.pub
# Compare with: https://github.com/settings/keys
10.9 Git Push: "Repository not found" or "Permission denied"
Problem: git push origin main fails after changing remote.
Fix:
# 1. Verify the remote URL is correct
git remote -v
# Should show YOUR username, not devopsmalaysia
# 2. If wrong, fix it:
git remote set-url origin git@github.com:YOUR_USERNAME/bootcamp.git
# 3. Verify the repo exists on GitHub
# Visit: https://github.com/YOUR_USERNAME/bootcamp
# If 404 → you haven't created the repo yet (go back to Section 7.1)
# 4. Verify the repo is EMPTY (no README)
# If you initialized with README, delete the repo and recreate it empty
10.10 General: "I can't fix it!"
Fallback plan: If you absolutely cannot get local tools working:
- Make sure your GitHub account is created and SSH key is added
- Make sure your DigitalOcean account is created with payment method
- Make sure you've created the
bootcamprepository on GitHub - On bootcamp day, we'll create your VPS first and you can work directly from there via SSH
The VPS comes with Docker pre-installed, so you'll still be able to follow along.
11. Pre-Pull Docker Images (Optional but Recommended)
To save time during the bootcamp (and reduce WiFi load), pre-pull these base images:
docker pull node:20-slim
docker pull postgres:17
docker pull caddy:2-alpine
docker pull mcr.microsoft.com/dotnet/aspnet:10.0
docker pull mcr.microsoft.com/dotnet/sdk:10.0
This downloads ~2GB total. Better to do this on a good connection before the bootcamp.
Summary — What You Should Have Ready
| Item | Status |
|---|---|
| GitHub account created | ☐ |
| DigitalOcean account with payment method | ☐ |
| WSL2 + Docker (Windows) OR Docker Desktop (macOS) | ☐ |
| Git installed and configured | ☐ |
| SSH key generated | ☐ |
| SSH key added to GitHub | ☐ |
ssh -T git@github.com works | ☐ |
GitHub repository bootcamp created | ☐ |
| Code cloned, remote changed, and pushed to your repo | ☐ |
| Node.js 20 installed | ☐ |
| pnpm installed | ☐ |
| Verification script all green | ☐ |
| Screenshot sent to group chat | ☐ |
See you Saturday! 🚀
If you have any issues, ask in the group chat immediately — don't wait until bootcamp day.