A comprehensive, hands-on guide covering Linux, Docker, Kubernetes, AWS, Terraform, Ansible, CI/CD, and more. Built as a living documentation of real-world DevOps skills.
From foundational Linux skills to advanced orchestration and cloud architecture — each topic is structured from beginner to expert with hands-on examples.
Master the command line, file systems, processes, networking, shell scripting, and system administration.
Learn branching strategies, collaboration workflows, GitOps, and advanced Git techniques.
Containerize applications, write Dockerfiles, manage images, networking, volumes, and Docker Compose.
Deploy, scale, and manage containerized applications with pods, services, deployments, Helm, and operators.
Master EC2, S3, VPC, IAM, Lambda, RDS, CloudFormation, ECS, EKS, and cloud architecture patterns.
Infrastructure as Code with HCL, providers, modules, state management, workspaces, and best practices.
Automate configuration management with playbooks, roles, inventories, vaults, and Galaxy collections.
Build automated pipelines with Jenkins, GitHub Actions, GitLab CI, ArgoCD, and deployment strategies.
Implement monitoring with Prometheus, Grafana, ELK Stack, alerting, log aggregation, and tracing.
Understand DNS, load balancing, firewalls, TLS/SSL, VPNs, service mesh, and zero-trust security.
Follow a clear, structured progression from fundamentals to advanced real-world scenarios.
Build a rock-solid base with Linux, networking, and version control.
Learn to containerize, deploy to the cloud, and automate infrastructure.
Achieve expert-level skills with orchestration, observability, and architecture.
Every topic includes real-world code examples, configurations, and step-by-step walkthroughs.
# Multi-stage build for a Node.js application
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
# Production stage
FROM node:20-alpine AS production
RUN addgroup -g 1001 -S appgroup && \
adduser -S appuser -u 1001
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER appuser
EXPOSE 3000
HEALTHCHECK --interval=30s CMD wget -q --spider http://localhost:3000/health
CMD ["node", "dist/server.js"]
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
labels:
app: webapp
spec:
replicas: 3
selector:
matchLabels:
app: webapp
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: myregistry/webapp:v1.2.0
ports:
- containerPort: 3000
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "200m"
livenessProbe:
httpGet:
path: /health
port: 3000
# AWS VPC with public/private subnets
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
enable_dns_hostnames = true
enable_dns_support = true
tags = {
Name = "${var.project}-vpc"
Environment = var.environment
}
}
resource "aws_subnet" "public" {
count = length(var.availability_zones)
vpc_id = aws_vpc.main.id
cidr_block = cidrsubnet(aws_vpc.main.cidr_block, 8, count.index)
availability_zone = var.availability_zones[count.index]
map_public_ip_on_launch = true
tags = {
Name = "${var.project}-public-${count.index + 1}"
}
}
resource "aws_security_group" "web" {
name_prefix = "web-sg-"
vpc_id = aws_vpc.main.id
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
# Configure web servers with Nginx
---
- name: Configure Web Servers
hosts: webservers
become: yes
vars:
nginx_port: 80
app_name: myapp
tasks:
- name: Install Nginx
apt:
name: nginx
state: present
update_cache: yes
- name: Deploy Nginx configuration
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/sites-available/{{ app_name }}
notify: Restart Nginx
- name: Enable site
file:
src: /etc/nginx/sites-available/{{ app_name }}
dest: /etc/nginx/sites-enabled/{{ app_name }}
state: link
handlers:
- name: Restart Nginx
service:
name: nginx
state: restarted
name: Build & Deploy Pipeline
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build Docker Image
run: docker build -t myapp:${{ github.sha }} .
- name: Run Tests
run: docker run myapp:${{ github.sha }} npm test
deploy:
needs: build-and-test
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: us-east-1
- name: Deploy to ECS
run: |
aws ecs update-service \
--cluster production \
--service webapp \
--force-new-deployment
This documentation site serves as both a comprehensive learning resource and a showcase of my DevOps expertise. Every tutorial, code example, and architecture pattern documented here reflects real-world experience and best practices gathered through hands-on work.