Galle, LK--:--5/6 sites live

Self Guide · self-paced

A self-paced path through DevOps, SRE and machine learning

Three tracks, 17 stages, about 168 hours. Track 1 takes you from Linux and networking to a CI/CD pipeline with keyless auth; Track 2 works through my 20 bilingual SRE labs to SLOs, error budgets and observability; Track 3 is the 64-lesson ML Playbook, from Python to deployed models and deep learning. Every stage has what to read, a hands-on lab, a 'done when' checklist and lessons you can tick off. Go at your own pace — progress is saved in your browser.

3 tracks17 stages~168 hours120 lessons & labsProgress saved in your browser

Track 1 — DevOps foundations

0%

0 of 65 steps done

Track 2 — Site Reliability Engineering (next step)

0%

0 of 27 steps done

Track 3 — Machine Learning

0%

0 of 74 steps done

Continue where you left off

Stage 1: W3DevOps Module · Linux: The Kernel, the Filesystem and 70 Commands I Actually Use

Go

Track 1 — DevOps foundations

Linux, networking and on to CI/CD: nine stages that take you from your first shell redirect to a keyless deploy pipeline.

Stage 1 · Beginner · ~6h

Linux foundations

0%

Every container, VM and CI runner is Linux. Most production bugs you'll debug are permissions, paths, processes or ports.

You will be able to

  • •Explain kernel vs shell vs user space
  • •Navigate the FHS: /etc, /var/log, /proc
  • •Redirect stdout/stderr like a cron job
  • •Read and set permissions in octal

See it in real projects: W3DevOps, Quintrix ITSO Engine

Hands-on: Build a tiny log pipeline

  1. Start an Ubuntu container or VM
  2. Write a script that prints to stdout and stderr
  3. Capture both into one log and rotate it by date
  4. Find the 5 most frequent error lines with grep, sort and uniq
ExampleShell
docker run -it --rm ubuntu:24.04 bash

cat > worker.sh <<'SH'
#!/usr/bin/env bash
echo "job started"
echo "disk warning" >&2
SH
chmod 755 worker.sh
./worker.sh > "worker-$(date +%F).log" 2>&1
grep -i warning worker-*.log | sort | uniq -c | sort -rn | head -5

Done when

ExerciseCheckpoint 1

Which command redirects BOTH standard output (stdout) and standard error (stderr) to a file named app.log in modern Bash?

ExerciseCheckpoint 2

What permission does octal mode chmod 755 script.sh grant?

Stage 2 · Beginner · ~14h

Networking fundamentals

0%

Hands-on: Read the network you're on

  1. Find your local IP, gateway and DNS server
  2. Work out your subnet's network and broadcast address by hand
  3. Trace a DNS lookup and a TCP connection to a real site
  4. Design an addressing plan for a 3-department office with VLSM
ExampleShell
ip addr show            # or: ifconfig
ip route | grep default
cat /etc/resolv.conf
dig +trace example.com
curl -v https://example.com 2>&1 | head -20
traceroute example.com

Done when

Stage 3 · Beginner · ~8h

Containers with Docker

0%

Containers make 'works on my machine' true on the server. Every project in this portfolio ships as an image.

You will be able to

  • •Explain namespaces vs cgroups
  • •Order a Dockerfile for cache hits
  • •Write a multi-stage build
  • •Run a multi-service stack with Compose

See it in real projects: Nora Labs, CinePrompt & News Studio, Quintrix ITSO Engine

Hands-on: Containerise a web app properly

  1. Write a Dockerfile that copies the lockfile before the source
  2. Add a HEALTHCHECK and read PORT from the environment
  3. Convert it to a multi-stage build and compare image sizes
  4. Add Postgres with docker compose and a named volume
ExampleShell
docker build -t myapp:dev .
docker images myapp
docker run --rm -p 8000:8000 -e PORT=8000 myapp:dev
docker inspect --format='{{json .State.Health}}' $(docker ps -q -l)
docker compose up -d && docker compose ps

Done when

ExerciseCheckpoint 1

What Linux kernel feature isolates process IDs (PIDs) so container PID 1 is isolated from host processes?

ExerciseCheckpoint 2

In Dockerfile engineering, why should COPY package*.json ./ precede COPY . . ?

Stage 4 · Intermediate · ~10h

Kubernetes

0%

Even if you deploy to Cloud Run, it's Kubernetes-shaped. Knowing what's underneath tells you when a managed platform stops fitting.

You will be able to

  • •Name every control-plane and node component
  • •Choose Deployment vs StatefulSet vs DaemonSet
  • •Expose a service with ClusterIP and Ingress
  • •Debug a crashing pod with kubectl

See it in real projects: Site Reliability Engineering (SRE)

Hands-on: Run and break a deployment locally

  1. Create a kind or minikube cluster
  2. Deploy your Stage 2 image with liveness/readiness probes and limits
  3. Set a memory limit too low and watch it get OOMKilled
  4. Fix it, then roll out a new version with zero downtime
ExampleShell
kind create cluster --name lab
kubectl apply -f deployment.yaml
kubectl get pods -w
kubectl describe pod <pod>        # look for OOMKilled / exit 137
kubectl logs <pod> --previous
kubectl rollout status deploy/myapp

Done when

ExerciseCheckpoint 1

In Kubernetes, which Control Plane component is the ONLY one that communicates directly with etcd ?

ExerciseCheckpoint 2

A Kubernetes Pod dies with status OOMKilled and exit code 137 . What caused this?

Stage 5 · Intermediate · ~10h

AWS fundamentals

0%

AWS teaches the vocabulary every cloud uses: least privilege, subnets, security groups and infrastructure as code.

You will be able to

  • •Use IAM roles instead of access keys
  • •Mount an EBS volume on EC2
  • •Host an SPA on S3 with correct routing
  • •Calculate usable IPs in a subnet
  • •Provision with Terraform

See it in real projects: Quintrix ITSO Engine

Hands-on: Terraform a small public web tier

  1. Write main.tf with a VPC, public subnet, security group and EC2 instance
  2. Bootstrap Nginx with user data
  3. Attach an IAM role that can only read one S3 bucket
  4. Destroy everything when done — and check the bill
ExampleShell
terraform init
terraform plan -out tfplan
terraform apply tfplan
curl -I http://$(terraform output -raw public_ip)
terraform destroy

Done when

ExerciseCheckpoint 1

In AWS IAM, what is the best practice for giving an EC2 instance permission to read an S3 bucket?

ExerciseCheckpoint 2

In an AWS VPC with CIDR block 10.0.1.0/24 , how many IP addresses can you assign to EC2 instances?

Stage 6 · Intermediate · ~8h

Google Cloud

0%

It's where most of my projects run: Cloud Run, Compute Engine, Artifact Registry and Vertex AI.

You will be able to

  • •Set a budget alert first
  • •Create a VM and firewall rule with gcloud
  • •Pick the right GCS storage class
  • •Deploy a container to Cloud Run

See it in real projects: Nora Labs, CryptoEdge & TradeV1 ML

Hands-on: Ship your Stage 2 image to Cloud Run

  1. Create a budget with an email alert
  2. Create an Artifact Registry repo
  3. Build for linux/amd64 and push
  4. Deploy with an explicit max-instances and memory
ExampleShell
gcloud artifacts repositories create lab --repository-format=docker --location=us-central1
docker buildx build --platform linux/amd64 -t us-central1-docker.pkg.dev/$PROJECT/lab/myapp:v1 --push .
gcloud run deploy myapp --image=us-central1-docker.pkg.dev/$PROJECT/lab/myapp:v1 \
  --region=us-central1 --allow-unauthenticated --max-instances=2 --memory=512Mi

Done when

ExerciseCheckpoint 1

Which Google Cloud storage class has NO minimum storage duration requirement and lowest latency?

Stage 7 · Intermediate · ~6h

Production web: DNS, Nginx, TLS, CDN

0%

When production breaks, it's often between the browser and your app: DNS, a proxy header, a certificate, a CDN rule.

You will be able to

  • •Trace a request from DNS to upstream
  • •Harden SSH with ed25519 keys
  • •Write an Nginx reverse proxy with WebSockets
  • •Issue TLS with Certbot
  • •Fix SPA 404s on a CDN

See it in real projects: Mahesh Travellers, The Part Timer

Hands-on: Put a real domain in front of an app

  1. Point an A record at a VM
  2. Disable password SSH login
  3. Proxy to your app with Nginx, forwarding client IPs
  4. Add TLS with Certbot and confirm auto-renewal
ExampleShell
dig +short app.example.com
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d app.example.com
sudo certbot renew --dry-run
curl -I https://app.example.com

Done when

ExerciseCheckpoint 1

Why does refreshing /dashboard on an S3-hosted React SPA result in a 404/403 error?

ExerciseCheckpoint 2

In Nginx reverse proxy configuration, why is proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; essential?

Stage 8 · Intermediate · ~4h

Self-hosting with Coolify

0%

A $10/month VM can host a dozen small apps with git-push deploys and automatic SSL — if you're willing to be the on-call engineer.

You will be able to

  • •Install Coolify on a VM
  • •Open the right firewall ports
  • •Connect a second server over SSH
  • •Deploy an app from a Git repo

See it in real projects: W3DevOps

Hands-on: Your own PaaS

  1. Create an e2 VM and allow 22, 80, 443 and 8000
  2. Install Coolify
  3. Add Coolify's key to a second server's authorized_keys
  4. Validate the server and deploy a repo with a custom domain
ExampleShell
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "<coolify public key>" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Done when

ExerciseCheckpoint 1

When connecting a new remote server to Coolify, where must Coolify's generated public SSH key be added?

Stage 9 · Advanced · ~8h

CI/CD and reliability

0%

Automation is what lets you deploy often without fear — and SLOs tell you how careful that automation has to be.

You will be able to

  • •Test before you build, build before you deploy
  • •Deploy immutable SHA-tagged images
  • •Authenticate CI with Workload Identity Federation
  • •Write an SLO and an error budget policy

See it in real projects: CryptoEdge & TradeV1 ML, The Part Timer

Hands-on: Capstone: a pipeline you'd trust

  1. GitHub Actions: lint + tests + import smoke test on every PR
  2. On main: WIF auth, build, push :$SHA, deploy that SHA
  3. Write a 99.9% SLO for your service and compute the monthly budget
  4. Break a deploy on purpose and roll back to the previous SHA
ExampleYAML
# permissions needed for keyless auth
permissions:
  contents: read
  id-token: write

# roll back = redeploy the previous image
gcloud run deploy myapp --image=$REGION-docker.pkg.dev/$PROJECT/lab/myapp:$PREVIOUS_SHA

Done when

Track 2 — Site Reliability Engineering (next step)

Once you can ship, learn to keep it running. Three stages over the 20 bilingual SRE practical labs, ending with SLOs, error budgets and observability.

Stage 10 · Intermediate · ~12h

SRE Labs I — the machine underneath

0%

Hands-on: Diagnose a sick server

  1. Run Labs 01–09 in order — each builds on the last
  2. Fill a disk and watch what breaks first
  3. Trigger an OOM kill in a container with a 64 MB limit
  4. Write a systemd unit that restarts on failure and read its logs
ExampleShell
df -h && du -sh /var/log/* | sort -h | tail
ss -tulpn | grep LISTEN
ps -eo pid,ppid,stat,%mem,cmd --sort=-%mem | head
dmesg -T | grep -i 'killed process'
sudo systemctl status myapp && journalctl -u myapp -n 50 --no-pager

Done when

ExerciseCheckpoint 1

In which CPU protection ring does the core monolithic Linux kernel execute? / Linux Kernel එක ක්‍රියාත්මක වන්නේ කුමන CPU Ring එක තුළද?

ExerciseCheckpoint 2

What is the integer file descriptor number for standard error (stderr) in Linux? / Standard Error (stderr) සඳහා වෙන් කර ඇති File Descriptor අංකය කුමක්ද?

ExerciseCheckpoint 3

What component stores file metadata (size, owner, permissions, block pointers) in a Linux filesystem? / Linux වල file එකක metadata තබාගන්නේ කුමකින්ද?

ExerciseCheckpoint 4

What numeric permission code grants Read, Write, and Execute to Owner, and Read & Execute to everyone else? / Owner ට rwx ද, අනෙක් අයට r-x ද ලබාදෙන අංකය කුමක්ද?

Stage 11 · Intermediate · ~14h

SRE Labs II — cloud, containers and delivery

0%

Hands-on: Self-healing on purpose

  1. Work through Labs 10–18
  2. Kill a pod and time how long Kubernetes takes to replace it
  3. Ship a broken image and confirm the readiness probe stops the rollout
  4. Roll back with one command
ExampleShell
kubectl delete pod -l app=myapp --wait=false && kubectl get pods -w
kubectl set image deploy/myapp app=myapp:broken
kubectl rollout status deploy/myapp --timeout=60s
kubectl rollout undo deploy/myapp

Done when

ExerciseCheckpoint 1

What AWS architectural concept represents physically isolated datacenters within a Region? / AWS Region එකක් තුළ ඇති isolated datacenters හඳුන්වන්නේ කුමක් ලෙසද?

ExerciseCheckpoint 2

What AWS service functions as a stateful virtual firewall controlling traffic at the instance level? / EC2 Instance මට්ටමේ virtual firewall එක කුමක්ද?

ExerciseCheckpoint 3

Which Git command creates and immediately switches to a new feature branch? / අලුත් branch එකක් සාදා එකවර මාරු වන command එක කුමක්ද?

ExerciseCheckpoint 4

Which Linux kernel feature provides process, network, and mount isolation for Docker containers? / Containers සඳහා isolation ලබාදෙන Linux kernel පහසුකම කුමක්ද?

Stage 12 · Advanced · ~8h

SRE Labs III — SLOs, error budgets and observability

0%

This is what makes it engineering: a number for 'reliable enough', a budget you can spend, and alerts that only wake you for real fires.

You will be able to

  • •Write an SLI and SLO for a real service
  • •Compute error budgets and burn rates
  • •Instrument the four golden signals
  • •Run a blameless postmortem

See it in real projects: Site Reliability Engineering (SRE), Nora Labs, CryptoEdge & TradeV1 ML

Hands-on: Capstone: an SLO for one of your services

  1. Pick a service from Stage 6 or 9 and define one availability and one latency SLI
  2. Set a 30-day SLO and compute the budget in minutes
  3. Define 14.4× / 1h and 6× / 6h burn-rate alerts
  4. Simulate an incident and write the postmortem with action items
ExampleShell
python3 -c "mins=30*24*60; slo=0.999; print(f'budget: {mins*(1-slo):.1f} min')"
python3 -c "err=0.0144; slo=0.001; print(f'burn rate: {err/slo:.1f}x')"

Done when

ExerciseCheckpoint 1

If a service commits to a 99.9% SLO over 30 days (43,200 mins), what is the allowed monthly downtime? / 99.9% SLO එකකදී හිමි downtime කාලය කොපමණද?

ExerciseCheckpoint 2

What are Google SRE's Four Golden Signals? / Four Golden Signals 4 මොනවාද?

Track 3 — Machine Learning

The ML Playbook as 5 self-paced stages and 64 lessons — Python and data, maths and first models, algorithms from scratch, evaluation, then deployment and deep learning.

Stage 13 · Beginner · ~16h

ML 1 — Python & Data Basics

0%

Hands-on: Run it yourself

  1. Open Google Colab (or a local Jupyter) and create a notebook per lesson
  2. Type the code rather than pasting it
  3. Change one parameter and predict the new output before running
ExampleShell
pip install numpy pandas scikit-learn matplotlib seaborn
jupyter notebook

Done when

Stage 14 · Beginner · ~8h

ML 2 — Maths & First Models

0%

Linear algebra, statistics and your first end-to-end prediction projects — enough maths to know what the libraries are doing.

You will be able to

  • •Work through all 7 lessons in Maths & First Models
  • •Re-run every notebook cell yourself
  • •Explain each output before moving on

See it in real projects: Machine Learning Playbook & Deep Learning Lab

Hands-on: Run it yourself

  1. Open Google Colab (or a local Jupyter) and create a notebook per lesson
  2. Type the code rather than pasting it
  3. Change one parameter and predict the new output before running
ExampleShell
pip install numpy pandas scikit-learn matplotlib seaborn
jupyter notebook

Done when

Stage 15 · Intermediate · ~12h

ML 3 — Building Models from Scratch

0%

Hands-on: Run it yourself

  1. Open Google Colab (or a local Jupyter) and create a notebook per lesson
  2. Type the code rather than pasting it
  3. Change one parameter and predict the new output before running
ExampleShell
pip install numpy pandas scikit-learn matplotlib seaborn
jupyter notebook

Done when

Stage 16 · Intermediate · ~10h

ML 4 — Evaluating & Choosing Models

0%

Hands-on: Run it yourself

  1. Open Google Colab (or a local Jupyter) and create a notebook per lesson
  2. Type the code rather than pasting it
  3. Change one parameter and predict the new output before running
ExampleShell
pip install numpy pandas scikit-learn matplotlib seaborn
jupyter notebook

Done when

Stage 17 · Advanced · ~14h

ML 5 — Shipping Models to the World

0%

Hands-on: Run it yourself

  1. Open Google Colab (or a local Jupyter) and create a notebook per lesson
  2. Type the code rather than pasting it
  3. Change one parameter and predict the new output before running
ExampleShell
pip install numpy pandas scikit-learn matplotlib seaborn
jupyter notebook

Done when