Skip to main content
Advanced Search
Search Terms
Content Type

Exact Matches
Tag Searches
Date Options
Updated after
Updated before
Created after
Created before

Search Results

190 total results found

Lesson: Scripts You Can Trust

Module 3 — Shell Scripting

What you'll learn How set -euo pipefail turns silent failures into loud, safe ones. The quoting pitfalls that cause the worst real-world script bugs. How to lint your scripts automatically with ShellCheck. How to clean up reliably with trap, and what "idempot...

Assignment 1: A system health-check script

Module 3 — Shell Scripting

Goal: Write a Bash script that inspects the machine it runs on — disk usage, free memory, and whether a chosen service is running — and prints a clear, readable report with a meaningful exit code. Where: On the Jumpbox (10.100.100.254, Ubuntu, user ubuntu). Cr...

Assignment 2: A safe backup/parameterised script

Module 3 — Shell Scripting

Goal: Write a robust, parameterised Bash script that backs up a directory into a timestamped compressed archive, validates its inputs, is safe to re-run, and cleans up after itself. Where: On the Jumpbox (10.100.100.254, Ubuntu, user ubuntu). Create ~/backup.s...

Lesson: Git's Mental Model

Module 4 — Git & Version Control

What you'll learn Why version control exists and what problems it solves on a real team. The four core places your work lives: the working tree, the staging area, the local repository, and (later) a remote. What a commit actually is — a snapshot, not a list o...

Lesson: Status, Add, Commit, Log

Module 4 — Git & Version Control

What you'll learn The everyday loop every developer repeats dozens of times a day: edit → status → add → commit. How to read git status and git diff to see exactly what changed. How to write commit messages that your future self and teammates will thank you f...

Lesson: Branches, Merges & Conflicts

Module 4 — Git & Version Control

What you'll learn What a branch really is (a cheap, movable pointer — not a copy of your files). How to create and switch branches with git branch and git switch. How to combine work with git merge, and the difference between a fast-forward and a merge commit...

Lesson: Working with Gitea

Module 4 — Git & Version Control

What you'll learn What a remote is, and how your local repo and a server repo stay in sync. How to clone, and how to wire up an existing local repo with git remote add. The push/fetch/pull cycle, and what a tracking branch is. How to push your Module 3 script...

Assignment 1: Version your Module 3 scripts on Gitea

Module 4 — Git & Version Control

Goal: Take the shell scripts you wrote in Module 3, turn their folder into a real Git repository with clean commit history, and publish it to the lab's Gitea server. Where: On your lab VM, in the folder holding your Module 3 scripts. The remote is the lab Gite...

Assignment 2: Branch, conflict, resolve, and open a PR

Module 4 — Git & Version Control

Goal: Practice the full collaboration loop — create a feature branch, deliberately cause a merge conflict, resolve it correctly, and land your change through a pull request on Gitea. Where: On your lab VM, in the module3-scripts repository you pushed in Assign...

Lesson: Web Server & Reverse Proxy

Module 5 — Common Linux Services

What you'll learn What a web server does and how Nginx fits into a typical app stack. How to install Nginx and serve a static website. How to write server blocks (virtual hosts) to host more than one site. How to put Nginx in front of an application as a reve...

Lesson: MySQL/MariaDB & PostgreSQL

Module 5 — Common Linux Services

What you'll learn What a relational database (RDBMS) is and the core vocabulary (table, row, SQL). How to install and connect to MySQL/MariaDB and PostgreSQL. How to create a database, a user, and grant that user access. The practical differences between MySQ...

Lesson: A Document Database

Module 5 — Common Linux Services

What you'll learn The difference between the document model and the relational (table) model. When a NoSQL document store is a good fit — and when it isn't. How to install MongoDB and connect with mongosh. Basic CRUD (Create, Read, Update, Delete) operations....

Lesson: Redis & Memcached

Module 5 — Common Linux Services

What you'll learn Why caching exists and how an in-memory cache speeds up an app. Redis core data types and common use cases (caching, sessions, queues). What Memcached is and how it differs. The trade-offs between Redis and Memcached so you can pick one. Bas...

Assignment 1: Stand up Nginx in front of an app database

Module 5 — Common Linux Services

Goal: Put the whole module together: create a properly isolated per-app database and user on a lab DB VM, then serve and reverse-proxy a small app through Nginx — the everyday "web tier + data tier" shape you'll meet constantly. Where: One Nginx host of your c...

Assignment 2: Cache it — add Redis and measure the difference

Module 5 — Common Linux Services

Goal: Prove to yourself that caching is worth it. Take the app from Assignment 1, add Redis as a cache-aside layer, and measure the response time with and without the cache so you can talk about the result. Where: The same app/Nginx host from Assignment 1, plu...

Lesson: Images, Containers & Layers

Module 6 — Containerization (Docker & P...

What you'll learn Explain what a container is and how it differs from a virtual machine (VM). Tell the difference between an image (the blueprint) and a container (a running instance). Understand image layers and why they make containers small and fast. Conne...

Lesson: Two Engines, One Standard

Module 6 — Containerization (Docker & P...

What you'll learn Describe the daemon architecture of Docker and the daemonless architecture of Podman. Explain rootful vs rootless containers and why rootless is safer. Understand the OCI standard that lets images run on any compliant engine. Decide when you...

Lesson: How Containers Talk

Module 6 — Containerization (Docker & P...

What you'll learn Describe the three core Docker network modes: bridge, host, and none. Publish a container port to the host with -p and read the HOST:CONTAINER syntax correctly. Connect containers on a user-defined network so they reach each other by name (b...