Hands-on DevOps projects from the roadmap.sh DevOps track — from shell scripts to service discovery — plus a Kubernetes, GitOps & CI/CD track, built and documented in one monorepo.
This repository tracks my journey through 44 practical DevOps projects: the 26 from the roadmap.sh DevOps track (Linux, Bash, networking, CI/CD, containers, Infrastructure as Code, configuration management, security and observability), plus an 18-project Kubernetes, GitOps & CI/CD track (Kubernetes, Helm, Argo CD, progressive delivery, policy as code, Jenkins and multi-cluster platforms).
Each project lives in its own folder with its own README.md documenting the goal, stack, how to run it, and what I learned.
devops-roadmap-projects/
├── beginner/ # CLI tools, SSH, Nginx, DNS, systemd, Docker, AWS basics
│ # + kind, kubectl, manifests, Helm, CI pipeline, first Argo CD app
├── intermediate/ # Ansible, Terraform, GitHub Actions, Compose, backups, security
│ # + Kustomize envs, CI→GitOps, Gateway API/TLS, secrets, app-of-apps, observability, autoscaling, Jenkins CI
└── advanced/ # Blue-green, Prometheus/Grafana, multi-service, Consul
# + Argo Rollouts, Kyverno/cosign, Terraform+GitOps, multi-cluster, Kubernetes the Hard Way
| # | Project | Topic | Description | Status | Brief |
|---|---|---|---|---|---|
| 01 | Server Performance Stats | CLI |
Write a script to analyse basic server performance stats. | ✅ | brief |
| 02 | Log Archive Tool | CLI |
Build a tool to archive logs from the CLI with the date and time. | ✅ | brief |
| 03 | Nginx Log Analyser | CLI |
Write a simple tool to analyze logs from the command line. | ✅ | brief |
| 04 | GitHub Pages Deployment | CI/CD |
Write a simple GitHub Actions workflow to deploy a static website to GitHub Pages. | ✅ | brief |
| 05 | SSH Remote Server Setup | SSH |
Set up a basic remote Linux server and configure it to allow SSH. | 🟨 | brief |
| 06 | Static Site Server | Nginx |
Set up a basic Linux server and configure it to serve a static site. | 🟨 | brief |
| 07 | Basic DNS Setup | DNS |
Purchase a custom domain and set up basic DNS records. | 🟨 | brief |
| 08 | Simple Monitoring | Monitoring |
Set up a basic monitoring dashboard using Netdata. | ✅ | brief |
| 09 | Dummy Systemd Service | Systemd |
Create a long-running systemd service that logs to a file. | ✅ | brief |
| 10 | Basic Dockerfile | Docker |
Build a basic Dockerfile to create a Docker image. | ✅ | brief |
| 11 | EC2 Instance | AWS |
Create an EC2 instance on AWS and connect to it using SSH. | 🟨 | brief |
| # | Project | Topic | Description | Status | Brief |
|---|---|---|---|---|---|
| 17 | Pomodoro Timer | Frameworks |
Create a pomodoro tracker application for productivity. | ⬜ | brief |
| 18 | Configuration Management | Ansible |
Write an Ansible playbook to configure a Linux server. | ⬜ | brief |
| 19 | IaC on DigitalOcean | Terraform |
Write Terraform code to create a Droplet on DigitalOcean. | ⬜ | brief |
| 20 | Node.js Service Deployment | CI/CD |
Use GitHub Actions to deploy a Node.js service to a remote server. | ⬜ | brief |
| 21 | Dockerized Service | Docker |
Use GitHub Actions to deploy a Dockerized Node.js service. | ⬜ | brief |
| 22 | Multi-Container Application | Docker Compose |
Use Docker Compose to run a multi-container application. | ⬜ | brief |
| 23 | Automated DB Backups | Backups |
Set up a scheduled workflow to back up a database every 12 hours. | ⬜ | brief |
| 24 | Bastion Host | Networking |
Set up a bastion host for managing access to private infrastructure. | ⬜ | brief |
| 25 | File Integrity Checker | Security |
Verify the integrity of application log files to detect tampering. | ⬜ | brief |
| 26 | Linux Server Setup | Linux |
Learn to set up and secure a Linux server from scratch. | 🟨 | brief |
| 27 | VPN Server Setup | VPN |
Set up a WireGuard or OpenVPN server to secure remote access. | ⬜ | brief |
| # | Project | Topic | Description | Status | Brief |
|---|---|---|---|---|---|
| 36 | Blue-Green Deployment | DevOps |
Set up a blue-green deployment strategy for your application. | ⬜ | brief |
| 37 | Prometheus and Grafana | Monitoring |
Set up monitoring using Prometheus and visualize metrics in Grafana. | ⬜ | brief |
| 38 | Multi-Service Application | Docker |
Set up an optimized multi-service Docker implementation. | ⬜ | brief |
| 39 | Service Discovery | DevOps |
Set up service discovery with dummy services and Consul. | ⬜ | brief |
A follow-up track (projects 12–16, 28–35 and 40–44) going from a local cluster to a multi-cluster GitOps platform, including CI with both GitHub Actions (15) and Jenkins (35). roadmap.sh has no project list for this, so these briefs are my own, based on current practice and the official docs. They live in the same beginner/, intermediate/ and advanced/ folders and use the same README format. Kubernetes projects through project 41 are designed to run on a local kind cluster; cloud-based project 42 may incur charges.
| # | Project | Topic | Description | Status | Reference |
|---|---|---|---|---|---|
| 12 | Local Kubernetes Cluster | Kubernetes |
Run a local multi-node cluster with kind and learn the kubectl basics. | ✅ | docs |
| 13 | Deploy an App with Manifests | Kubernetes |
Deploy a real API + database with Deployments, Services, ConfigMaps, Secrets and probes. | ⬜ | docs |
| 14 | Package an App with Helm | Helm |
Turn the manifests from project 13 into a reusable Helm chart with per-environment values. | ⬜ | docs |
| 15 | CI Pipeline: Build, Test, Scan, Push | CI/CD |
A GitHub Actions pipeline that tests the app, builds an image, scans it and pushes it to GHCR. | ⬜ | docs |
| 16 | First GitOps Deployment with Argo CD | GitOps |
Install Argo CD and let it deploy your app from Git — no more kubectl apply. | ⬜ | docs |
| # | Project | Topic | Description | Status | Reference |
|---|---|---|---|---|---|
| 28 | Multi-Environment GitOps with Kustomize | GitOps |
One base, three overlays (dev/staging/prod) and promotion by pull request. | ⬜ | docs |
| 29 | Full CI → GitOps CD Loop | CI/CD |
Merge code → image built → config repo updated automatically → Argo CD deploys. | ⬜ | docs |
| 30 | Gateway API, TLS and DNS on Kubernetes | Networking |
Expose apps with the Gateway API and automatic HTTPS certificates from cert-manager. | ⬜ | docs |
| 31 | GitOps Secrets Management | Security |
Keep secrets out of Git (in plaintext) with Sealed Secrets or External Secrets Operator. | ⬜ | docs |
| 32 | App of Apps and ApplicationSets | GitOps |
Bootstrap an entire cluster — add-ons and apps — from one root Application. | ⬜ | docs |
| 33 | Kubernetes Observability Stack | Monitoring |
Metrics, logs and alerts for the cluster and your app — installed via GitOps. | ⬜ | docs |
| 34 | Autoscaling and Resilience | Kubernetes |
Make the app scale with load and survive failures — then prove it with load tests. | ⬜ | docs |
| 35 | Jenkins CI Pipeline | CI/CD |
Rebuild project 15's test, scan and image-publish pipeline in Jenkins, then compare it with GitHub Actions. | ⬜ | docs |
| # | Project | Topic | Description | Status | Reference |
|---|---|---|---|---|---|
| 40 | Progressive Delivery with Argo Rollouts | GitOps |
Canary releases that analyse Prometheus metrics and roll back automatically. | ⬜ | docs |
| 41 | Policy as Code and Supply-Chain Security | Security |
Sign images in CI, generate SBOMs and let Kyverno block anything unsigned or unsafe. | ⬜ | docs |
| 42 | Production Cluster: Terraform + GitOps Bootstrap | IaC |
Provision a managed Kubernetes cluster with Terraform and hand it to Argo CD on day one. | ⬜ | docs |
| 43 | Multi-Cluster GitOps Platform | Platform |
One Argo CD managing several clusters with ApplicationSets, RBAC and sync windows. | ⬜ | docs |
| 44 | Kubernetes the Hard Way | Kubernetes |
Bootstrap a cluster by hand — certificates, etcd, control plane, kubelets — to truly understand it. | ⬜ | docs |
Legend: ⬜ Not started · 🟨 Built — needs your server / domain / cloud account to run · ✅ Done
Kubernetes, GitOps & CI/CD track
- Pick the next project in the table.
- Work in its folder on a branch:
git checkout -b feat/<project-name>. - Fill in its README (goal, stack, how to run, lessons learned).
- Update the status in this table and merge.
Never commit secrets, keys, .tfstate or .env files — they are ignored via .gitignore. Use environment variables or a secrets manager instead.
Mohammed Saouab — @msaouab
All rights reserved to Mohamed Saouab MIT